[lttng-dev] [PATCH lttng-tools 1/2] Fix: Parenthesize previous statement when adding conditions to a filter

David Goulet dgoulet at efficios.com
Wed Sep 3 15:00:05 EDT 2014


Both patches merged!

On 28 Aug (12:53:43), Jérémie Galarneau wrote:
> Not parenthesizing the clauses in a filter string causes JUL events to be
> traced even though they are not enabled when an enable-event command is
> issued with a filter and the --loglevel-only option.
> 
> For instance,
> 
> lttng enable-event -j "my_event" --loglevel-only JUL_CONFIG -f "int_loglevel > 0 || int_loglevel < 0"
> 
> results in the following filter being applied:
> 
> int_loglevel > 0 || int_loglevel < 0 && logger_name == "my_event" && int_loglevel == 700
> 
> The resulting expression will always evaluate to true, regardless of the logger
> name.
> 
> This fix parenthesizes each clause to ensure they are all independently
> evaluated and not unintuitively affected by operator precedence.
> 
> Signed-off-by: Jérémie Galarneau <jeremie.galarneau at efficios.com>
> ---
>  src/lib/lttng-ctl/lttng-ctl.c | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/src/lib/lttng-ctl/lttng-ctl.c b/src/lib/lttng-ctl/lttng-ctl.c
> index 9686b7d..f83d053 100644
> --- a/src/lib/lttng-ctl/lttng-ctl.c
> +++ b/src/lib/lttng-ctl/lttng-ctl.c
> @@ -705,7 +705,7 @@ static char *set_jul_filter(const char *filter, struct lttng_event *ev)
>  	/* Don't add filter for the '*' event. */
>  	if (ev->name[0] != '*') {
>  		if (filter) {
> -			err = asprintf(&jul_filter, "%s && logger_name == \"%s\"", filter,
> +			err = asprintf(&jul_filter, "(%s) && (logger_name == \"%s\")", filter,
>  					ev->name);
>  		} else {
>  			err = asprintf(&jul_filter, "logger_name == \"%s\"", ev->name);
> @@ -729,7 +729,7 @@ static char *set_jul_filter(const char *filter, struct lttng_event *ev)
>  		if (filter || jul_filter) {
>  			char *new_filter;
>  
> -			err = asprintf(&new_filter, "%s && int_loglevel %s %d",
> +			err = asprintf(&new_filter, "(%s) && (int_loglevel %s %d)",
>  					jul_filter ? jul_filter : filter, op,
>  					ev->loglevel);
>  			if (jul_filter) {
> -- 
> 2.1.0
> 
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 603 bytes
Desc: Digital signature
URL: <http://lists.lttng.org/pipermail/lttng-dev/attachments/20140903/18fc3263/attachment-0001.sig>


More information about the lttng-dev mailing list