Skip to content

Commit 817b0fb

Browse files
authored
Merge pull request syslog-ng#5035 from HofiOne/Further-null-ptr-fixes
Further null ptr fixes
2 parents ec2e42a + 9918421 commit 817b0fb

File tree

6 files changed

+27
-20
lines changed

6 files changed

+27
-20
lines changed

lib/cfg-block.c

+4-7
Original file line numberDiff line numberDiff line change
@@ -67,13 +67,11 @@ static void
6767
_validate_args_callback(gpointer k, gpointer v, gpointer user_data)
6868
{
6969
CfgArgs *defs = ((gpointer *) user_data)[0];
70+
const gchar *reference = ((gpointer *) user_data)[1];
71+
gboolean *problem_found = ((gpointer *) user_data)[2];
7072

71-
if (defs == NULL)
72-
return;
73-
74-
if (FALSE == cfg_args_contains(defs, k))
73+
if ((!defs || !cfg_args_contains(defs, k)))
7574
{
76-
const gchar *reference = ((gpointer *) user_data)[1];
7775
if (cfg_args_is_accepting_varargs(defs))
7876
{
7977
msg_verbose("Unknown argument, adding it to __VARARGS__",
@@ -87,7 +85,6 @@ _validate_args_callback(gpointer k, gpointer v, gpointer user_data)
8785
evt_tag_str("argument", k),
8886
evt_tag_str("value", v),
8987
evt_tag_str("reference", reference));
90-
gboolean *problem_found = ((gpointer *) user_data)[2];
9188
*problem_found = TRUE;
9289
}
9390
}
@@ -141,7 +138,7 @@ _validate_spurious_args(CfgArgs *self, CfgArgs *defs, const gchar *reference)
141138
static gboolean
142139
_validate_args(CfgArgs *self, CfgArgs *defs, const gchar *reference)
143140
{
144-
return _validate_mandatory_options(defs, self, reference) && _validate_spurious_args(self, defs, reference);
141+
return defs && _validate_mandatory_options(defs, self, reference) && _validate_spurious_args(self, defs, reference);
145142
}
146143

147144
/*

lib/logreader.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -420,7 +420,7 @@ log_reader_work_finished(void *s, gpointer arg)
420420
log_pipe_notify(self->control, notify_code, self);
421421
}
422422

423-
if (self->super.super.flags & PIF_INITIALIZED)
423+
if ((self->super.super.flags & PIF_INITIALIZED) && self->proto)
424424
{
425425
/* reenable polling the source assuming that we're still in
426426
* business (e.g. the reader hasn't been uninitialized) */

lib/plugin.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -384,7 +384,7 @@ plugin_load_module(PluginContext *context, const gchar *module_name, CfgArgs *ar
384384
g_module_make_resident(mod);
385385
module_info = _get_module_info(mod);
386386

387-
if (module_info->canonical_name)
387+
if (module_info && module_info->canonical_name)
388388
{
389389
g_free(module_init_func);
390390
module_init_func = _format_module_init_name(module_info->canonical_name ? : module_name);

lib/template/repr.c

+1
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@ _setup_function_call(LogTemplate *template, Plugin *p, LogTemplateElem *e,
6363

6464
g_return_val_if_fail(error == NULL || *error == NULL, FALSE);
6565
e->func.ops = plugin_construct(p);
66+
g_return_val_if_fail(e->func.ops != NULL, FALSE);
6667
e->func.state = e->func.ops->size_of_state > 0 ? g_malloc0(e->func.ops->size_of_state) : NULL;
6768

6869
/* prepare may modify the argv array: remove and rearrange elements */

modules/affile/affile-dest.c

+17-11
Original file line numberDiff line numberDiff line change
@@ -312,22 +312,28 @@ affile_dw_queue(LogPipe *s, LogMessage *lm, const LogPathOptions *path_options)
312312
}
313313

314314
static void
315-
affile_dw_set_owner(AFFileDestWriter *self, AFFileDestDriver *owner)
315+
affile_dw_unset_owner(AFFileDestWriter *self)
316316
{
317317
if (self->owner)
318318
log_pipe_unref(&self->owner->super.super.super);
319-
self->owner = owner;
320-
if (self->owner)
321-
log_pipe_ref(&self->owner->super.super.super);
322319

323-
self->super.expr_node = self->owner ? self->owner->super.super.super.expr_node : NULL;
320+
self->owner = NULL;
321+
}
322+
323+
static void
324+
affile_dw_set_owner(AFFileDestWriter *self, AFFileDestDriver *owner)
325+
{
326+
GlobalConfig *cfg = log_pipe_get_config(&owner->super.super.super);
327+
324328
if (self->owner)
325-
log_pipe_set_options(&self->super, &self->owner->super.super.super.options);
329+
log_pipe_unref(&self->owner->super.super.super);
330+
log_pipe_ref(&owner->super.super.super);
331+
self->owner = owner;
332+
self->super.expr_node = owner->super.super.super.expr_node;
326333

327-
GlobalConfig *cfg = self->owner ? log_pipe_get_config(&self->owner->super.super.super) : NULL;
334+
log_pipe_set_options(&self->super, &owner->super.super.super.options);
328335
log_pipe_set_config(&self->super, cfg);
329-
330-
if (self->writer && self->owner)
336+
if (self->writer)
331337
{
332338
StatsClusterKeyBuilder *writer_sck_builder = stats_cluster_key_builder_new();
333339
stats_cluster_key_builder_add_label(writer_sck_builder, stats_cluster_label("driver", "file"));
@@ -336,7 +342,7 @@ affile_dw_set_owner(AFFileDestWriter *self, AFFileDestDriver *owner)
336342
log_pipe_set_config((LogPipe *) self->writer, cfg);
337343
log_writer_set_options(self->writer,
338344
&self->super,
339-
&self->owner->writer_options,
345+
&owner->writer_options,
340346
self->owner->super.super.id,
341347
writer_sck_builder);
342348
}
@@ -523,7 +529,7 @@ affile_dd_reuse_writer(gpointer key, gpointer value, gpointer user_data)
523529
affile_dw_set_owner(writer, self);
524530
if (!log_pipe_init(&writer->super))
525531
{
526-
affile_dw_set_owner(writer, NULL);
532+
affile_dw_unset_owner(writer);
527533
log_pipe_unref(&writer->super);
528534
g_hash_table_remove(self->writer_hash, key);
529535
}

news/bugfix-216.md

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
Fixed potential null pointer deref issues
2+
3+
TODO Add Dmitry Levin @nivelus to the NEWS file as a thank you for finding these

0 commit comments

Comments
 (0)