Workaround the stringop-overflow check false positives.
This commit is contained in:
parent
93d6151800
commit
22bc75ee3e
@ -336,3 +336,5 @@ test_status_t p_test_no_malloc_init(test_t *t, ...);
|
|||||||
void p_test_init(const char *name);
|
void p_test_init(const char *name);
|
||||||
void p_test_fini(void);
|
void p_test_fini(void);
|
||||||
void p_test_fail(const char *prefix, const char *message);
|
void p_test_fail(const char *prefix, const char *message);
|
||||||
|
|
||||||
|
void strncpy_cond(void *dst, const char *src, bool cond);
|
||||||
|
@ -232,3 +232,16 @@ p_test_fail(const char *prefix, const char *message) {
|
|||||||
malloc_cprintf(NULL, NULL, "%s%s\n", prefix, message);
|
malloc_cprintf(NULL, NULL, "%s%s\n", prefix, message);
|
||||||
test_status = test_status_fail;
|
test_status = test_status_fail;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
strncpy_cond(void *dst, const char *src, bool cond) {
|
||||||
|
if (cond) {
|
||||||
|
/*
|
||||||
|
* Avoid strcpy and explicitly set length to 0 because the
|
||||||
|
* `stringop-overflow` check may warn even if the specific test
|
||||||
|
* is unreachable.
|
||||||
|
*/
|
||||||
|
size_t n = cond ? strlen(src) + 1 : 0;
|
||||||
|
strncpy(dst, src, n);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -2,13 +2,18 @@
|
|||||||
|
|
||||||
#include "jemalloc/internal/log.h"
|
#include "jemalloc/internal/log.h"
|
||||||
|
|
||||||
|
static void
|
||||||
|
update_log_var_names(const char *names) {
|
||||||
|
strncpy_cond(log_var_names, names, config_log);
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
expect_no_logging(const char *names) {
|
expect_no_logging(const char *names) {
|
||||||
log_var_t log_l1 = LOG_VAR_INIT("l1");
|
log_var_t log_l1 = LOG_VAR_INIT("l1");
|
||||||
log_var_t log_l2 = LOG_VAR_INIT("l2");
|
log_var_t log_l2 = LOG_VAR_INIT("l2");
|
||||||
log_var_t log_l2_a = LOG_VAR_INIT("l2.a");
|
log_var_t log_l2_a = LOG_VAR_INIT("l2.a");
|
||||||
|
|
||||||
strcpy(log_var_names, names);
|
update_log_var_names(names);
|
||||||
|
|
||||||
int count = 0;
|
int count = 0;
|
||||||
|
|
||||||
@ -50,7 +55,7 @@ TEST_BEGIN(test_log_enabled_direct) {
|
|||||||
int count;
|
int count;
|
||||||
|
|
||||||
count = 0;
|
count = 0;
|
||||||
strcpy(log_var_names, "l1");
|
update_log_var_names("l1");
|
||||||
for (int i = 0; i < 10; i++) {
|
for (int i = 0; i < 10; i++) {
|
||||||
log_do_begin(log_l1)
|
log_do_begin(log_l1)
|
||||||
count++;
|
count++;
|
||||||
@ -59,7 +64,7 @@ TEST_BEGIN(test_log_enabled_direct) {
|
|||||||
assert_d_eq(count, 10, "Mis-logged!");
|
assert_d_eq(count, 10, "Mis-logged!");
|
||||||
|
|
||||||
count = 0;
|
count = 0;
|
||||||
strcpy(log_var_names, "l1.a");
|
update_log_var_names("l1.a");
|
||||||
for (int i = 0; i < 10; i++) {
|
for (int i = 0; i < 10; i++) {
|
||||||
log_do_begin(log_l1_a)
|
log_do_begin(log_l1_a)
|
||||||
count++;
|
count++;
|
||||||
@ -68,7 +73,7 @@ TEST_BEGIN(test_log_enabled_direct) {
|
|||||||
assert_d_eq(count, 10, "Mis-logged!");
|
assert_d_eq(count, 10, "Mis-logged!");
|
||||||
|
|
||||||
count = 0;
|
count = 0;
|
||||||
strcpy(log_var_names, "l1.a|abc|l2|def");
|
update_log_var_names("l1.a|abc|l2|def");
|
||||||
for (int i = 0; i < 10; i++) {
|
for (int i = 0; i < 10; i++) {
|
||||||
log_do_begin(log_l1_a)
|
log_do_begin(log_l1_a)
|
||||||
count++;
|
count++;
|
||||||
@ -85,7 +90,7 @@ TEST_END
|
|||||||
TEST_BEGIN(test_log_enabled_indirect) {
|
TEST_BEGIN(test_log_enabled_indirect) {
|
||||||
test_skip_if(!config_log);
|
test_skip_if(!config_log);
|
||||||
atomic_store_b(&log_init_done, true, ATOMIC_RELAXED);
|
atomic_store_b(&log_init_done, true, ATOMIC_RELAXED);
|
||||||
strcpy(log_var_names, "l0|l1|abc|l2.b|def");
|
update_log_var_names("l0|l1|abc|l2.b|def");
|
||||||
|
|
||||||
/* On. */
|
/* On. */
|
||||||
log_var_t log_l1 = LOG_VAR_INIT("l1");
|
log_var_t log_l1 = LOG_VAR_INIT("l1");
|
||||||
@ -135,7 +140,7 @@ TEST_END
|
|||||||
TEST_BEGIN(test_log_enabled_global) {
|
TEST_BEGIN(test_log_enabled_global) {
|
||||||
test_skip_if(!config_log);
|
test_skip_if(!config_log);
|
||||||
atomic_store_b(&log_init_done, true, ATOMIC_RELAXED);
|
atomic_store_b(&log_init_done, true, ATOMIC_RELAXED);
|
||||||
strcpy(log_var_names, "abc|.|def");
|
update_log_var_names("abc|.|def");
|
||||||
|
|
||||||
log_var_t log_l1 = LOG_VAR_INIT("l1");
|
log_var_t log_l1 = LOG_VAR_INIT("l1");
|
||||||
log_var_t log_l2_a_a = LOG_VAR_INIT("l2.a.a");
|
log_var_t log_l2_a_a = LOG_VAR_INIT("l2.a.a");
|
||||||
|
Loading…
Reference in New Issue
Block a user