From: Josef 'Jeff' Sipek Date: Tue, 12 Jan 2021 16:15:44 +0000 (-0500) Subject: lib: event-filter - Use p_strdup() instead of p_strdup_empty() to avoid NULLs X-Git-Tag: 2.3.14.rc1~86 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=ebb4a80f8e87d711bf6b56ac745adea0c8d9c72a;p=thirdparty%2Fdovecot%2Fcore.git lib: event-filter - Use p_strdup() instead of p_strdup_empty() to avoid NULLs The code used p_strdup_empty() in an (incorrect) attempt to avoid NULLs turning into empty strings (""). None of the strdup variants do this. However, p_strdup_empty() converts empty strings to NULLs. This caused a NULL pointer dereference later on. --- diff --git a/src/lib/event-filter-parser.y b/src/lib/event-filter-parser.y index a1e4347480..c3db39d428 100644 --- a/src/lib/event-filter-parser.y +++ b/src/lib/event-filter-parser.y @@ -74,7 +74,7 @@ static struct event_filter_node *key_value(struct event_filter_parser_state *sta file = p_strdup_until(state->pool, b, colon); } } else { - file = p_strdup_empty(state->pool, b); + file = p_strdup(state->pool, b); line = 0; } diff --git a/src/lib/event-filter.c b/src/lib/event-filter.c index 4db4584b1d..3739506194 100644 --- a/src/lib/event-filter.c +++ b/src/lib/event-filter.c @@ -277,7 +277,7 @@ void event_filter_add(struct event_filter *filter, node = p_new(filter->pool, struct event_filter_node, 1); node->type = EVENT_FILTER_NODE_TYPE_EVENT_SOURCE_LOCATION; node->op = EVENT_FILTER_OP_CMP_EQ; - node->str = p_strdup_empty(filter->pool, query->source_filename); + node->str = p_strdup(filter->pool, query->source_filename); node->intmax = query->source_linenum; add_node(filter->pool, &int_query->expr, node); @@ -300,14 +300,14 @@ clone_expr(pool_t pool, struct event_filter_node *old) new->op = old->op; new->children[0] = clone_expr(pool, old->children[0]); new->children[1] = clone_expr(pool, old->children[1]); - new->str = p_strdup_empty(pool, old->str); + new->str = p_strdup(pool, old->str); new->intmax = old->intmax; new->category.log_type = old->category.log_type; - new->category.name = p_strdup_empty(pool, old->category.name); + new->category.name = p_strdup(pool, old->category.name); new->category.ptr = old->category.ptr; - new->field.key = p_strdup_empty(pool, old->field.key); + new->field.key = p_strdup(pool, old->field.key); new->field.value_type = old->field.value_type; - new->field.value.str = p_strdup_empty(pool, old->field.value.str); + new->field.value.str = p_strdup(pool, old->field.value.str); new->field.value.intmax = old->field.value.intmax; new->field.value.timeval = old->field.value.timeval;