Message ID | 20190805102646.31142-1-sergey.senozhatsky@gmail.com (mailing list archive) |
---|---|
State | Rejected |
Headers | show |
Series | [1/2] parse-events: deref pointer for proper sizeof() | expand |
On Mon, 5 Aug 2019 19:26:45 +0900 Sergey Senozhatsky <sergey.senozhatsky.work@gmail.com> wrote: > Signed-off-by: Sergey Senozhatsky <sergey.senozhatsky@gmail.com> > --- Hi Sergey, Thanks for sending these! -- Steve > parse-events.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/parse-events.c b/parse-events.c > index 3d59d92..807fc53 100644 > --- a/parse-events.c > +++ b/parse-events.c > @@ -2058,7 +2058,7 @@ process_fields(struct event_format *event, struct print_flag_sym **list, char ** > goto out_free; > > field = malloc_or_die(sizeof(*field)); > - memset(field, 0, sizeof(field)); > + memset(field, 0, sizeof(*field)); > > value = arg_eval(arg); > field->value = strdup(value);
On (08/05/19 23:21), Steven Rostedt wrote: > On Mon, 5 Aug 2019 19:26:45 +0900 > Sergey Senozhatsky <sergey.senozhatsky.work@gmail.com> wrote: > > > Signed-off-by: Sergey Senozhatsky <sergey.senozhatsky@gmail.com> > > --- > > Hi Sergey, > > Thanks for sending these! Hi Steven, I just realised that the patches are against v1.1.1, not the master branch. Let me know if it's not OK. I've some issues building v1.1.1. swig -Wall -python -noproxy ctracecmd.i parse-events.h:676: Error: Syntax error in input(3). Which is, probably, this 'bool' variable of type filter_arg_boolean struct filter_arg { enum filter_arg_type type; union { struct filter_arg_boolean bool; <<<< 676 struct filter_arg_field field; struct filter_arg_value value; struct filter_arg_op op; struct filter_arg_exp exp; struct filter_arg_num num; struct filter_arg_str str; }; }; Is this a known problem? -ss
On (08/06/19 14:14), Sergey Senozhatsky wrote: > Hi Steven, > > I just realised that the patches are against v1.1.1, not the master > branch. Let me know if it's not OK. > > > I've some issues building v1.1.1. > > swig -Wall -python -noproxy ctracecmd.i > parse-events.h:676: Error: Syntax error in input(3). > > Which is, probably, this 'bool' variable of type filter_arg_boolean > > struct filter_arg { > enum filter_arg_type type; > union { > struct filter_arg_boolean bool; <<<< 676 > struct filter_arg_field field; > struct filter_arg_value value; > struct filter_arg_op op; > struct filter_arg_exp exp; > struct filter_arg_num num; > struct filter_arg_str str; > }; > }; > > Is this a known problem? This patch seems to do the trick for me. --- diff --git a/parse-events.h b/parse-events.h index 3a4ef08..01be4f0 100644 --- a/parse-events.h +++ b/parse-events.h @@ -673,7 +673,7 @@ struct filter_arg_str { struct filter_arg { enum filter_arg_type type; union { - struct filter_arg_boolean bool; + struct filter_arg_boolean boolean; struct filter_arg_field field; struct filter_arg_value value; struct filter_arg_op op; diff --git a/parse-filter.c b/parse-filter.c index 0d448cb..13f3422 100644 --- a/parse-filter.c +++ b/parse-filter.c @@ -359,7 +359,7 @@ create_arg_item(struct event_format *event, if (strcmp(token, COMM) != 0) { /* not a field, Make it false */ arg->type = FILTER_ARG_BOOLEAN; - arg->bool.value = FILTER_FALSE; + arg->boolean.value = FILTER_FALSE; break; } /* If token is 'COMM' then it is special */ @@ -487,7 +487,7 @@ static int add_right(struct filter_arg *op, struct filter_arg *arg, free_arg(left); free_arg(arg); op->type = FILTER_ARG_BOOLEAN; - op->bool.value = FILTER_FALSE; + op->boolean.value = FILTER_FALSE; break; } @@ -772,7 +772,7 @@ enum filter_vals test_arg(struct filter_arg *parent, struct filter_arg *arg) /* bad case */ case FILTER_ARG_BOOLEAN: - return FILTER_VAL_FALSE + arg->bool.value; + return FILTER_VAL_FALSE + arg->boolean.value; /* good cases: */ case FILTER_ARG_STR: @@ -871,7 +871,7 @@ static struct filter_arg *collapse_tree(struct filter_arg *arg) free_arg(arg); arg = allocate_arg(); arg->type = FILTER_ARG_BOOLEAN; - arg->bool.value = ret == FILTER_VAL_TRUE; + arg->boolean.value = ret == FILTER_VAL_TRUE; } return arg; @@ -1116,7 +1116,7 @@ process_event(struct event_format *event, const char *filter_str, if (!*parg) { *parg = allocate_arg(); (*parg)->type = FILTER_ARG_BOOLEAN; - (*parg)->bool.value = FILTER_FALSE; + (*parg)->boolean.value = FILTER_FALSE; } return 0; @@ -1139,7 +1139,7 @@ static int filter_event(struct event_filter *filter, /* just add a TRUE arg */ arg = allocate_arg(); arg->type = FILTER_ARG_BOOLEAN; - arg->bool.value = FILTER_TRUE; + arg->boolean.value = FILTER_TRUE; } filter_type = add_filter_type(filter, event->id); @@ -1369,9 +1369,9 @@ static int copy_filter_type(struct event_filter *filter, arg = allocate_arg(); arg->type = FILTER_ARG_BOOLEAN; if (strcmp(str, "TRUE") == 0) - arg->bool.value = 1; + arg->boolean.value = 1; else - arg->bool.value = 0; + arg->boolean.value = 0; filter_type = add_filter_type(filter, event->id); filter_type->filter = arg; @@ -1442,8 +1442,8 @@ int pevent_update_trivial(struct event_filter *dest, struct event_filter *source arg = filter_type->filter; if (arg->type != FILTER_ARG_BOOLEAN) continue; - if ((arg->bool.value && type == FILTER_TRIVIAL_FALSE) || - (!arg->bool.value && type == FILTER_TRIVIAL_TRUE)) + if ((arg->boolean.value && type == FILTER_TRIVIAL_FALSE) || + (!arg->boolean.value && type == FILTER_TRIVIAL_TRUE)) continue; event = filter_type->event; @@ -1497,10 +1497,10 @@ void pevent_filter_clear_trivial(struct event_filter *filter, continue; switch (type) { case FILTER_TRIVIAL_FALSE: - if (filter_type->filter->bool.value) + if (filter_type->filter->boolean.value) continue; case FILTER_TRIVIAL_TRUE: - if (!filter_type->filter->bool.value) + if (!filter_type->filter->boolean.value) continue; default: break; @@ -1551,10 +1551,10 @@ int pevent_filter_event_has_trivial(struct event_filter *filter, switch (type) { case FILTER_TRIVIAL_FALSE: - return !filter_type->filter->bool.value; + return !filter_type->filter->boolean.value; case FILTER_TRIVIAL_TRUE: - return filter_type->filter->bool.value; + return filter_type->filter->boolean.value; default: return 1; } @@ -1783,7 +1783,7 @@ static int test_filter(struct event_format *event, switch (arg->type) { case FILTER_ARG_BOOLEAN: /* easy case */ - return arg->bool.value; + return arg->boolean.value; case FILTER_ARG_OP: return test_op(event, arg, record); @@ -2147,7 +2147,7 @@ static char *arg_to_str(struct event_filter *filter, struct filter_arg *arg) switch (arg->type) { case FILTER_ARG_BOOLEAN: str = malloc_or_die(6); - if (arg->bool.value) + if (arg->boolean.value) strcpy(str, "TRUE"); else strcpy(str, "FALSE");
On (08/06/19 14:41), Sergey Senozhatsky wrote: > > This patch seems to do the trick for me. > D'oh... Steven, please scratch all these patches which I have sent. Something terribly wrong happened on my box and git didn't pull the current master properly yesterday. Somehow. No sure I understand how, tho. I looked at very outdated source code tree. Sorry for the noise!! -ss
On Tue, 6 Aug 2019 15:07:30 +0900 Sergey Senozhatsky <sergey.senozhatsky.work@gmail.com> wrote: > On (08/06/19 14:41), Sergey Senozhatsky wrote: > > > > This patch seems to do the trick for me. > > > > D'oh... > > Steven, please scratch all these patches which I have sent. > Something terribly wrong happened on my box and git didn't pull > the current master properly yesterday. Somehow. No sure I understand > how, tho. I looked at very outdated source code tree. > > Sorry for the noise!! heh, no problem. -- Steve
diff --git a/parse-events.c b/parse-events.c index 3d59d92..807fc53 100644 --- a/parse-events.c +++ b/parse-events.c @@ -2058,7 +2058,7 @@ process_fields(struct event_format *event, struct print_flag_sym **list, char ** goto out_free; field = malloc_or_die(sizeof(*field)); - memset(field, 0, sizeof(field)); + memset(field, 0, sizeof(*field)); value = arg_eval(arg); field->value = strdup(value);
Signed-off-by: Sergey Senozhatsky <sergey.senozhatsky@gmail.com> --- parse-events.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)