Fix: filter string comparison should check for literal
authorMathieu Desnoyers <mathieu.desnoyers@efficios.com>
Wed, 27 Mar 2013 17:30:53 +0000 (13:30 -0400)
committerMathieu Desnoyers <mathieu.desnoyers@efficios.com>
Wed, 27 Mar 2013 17:32:05 +0000 (13:32 -0400)
The prior fix "Fix: filter string wildcard comparison" missed check for
string literal.

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
liblttng-ust/lttng-filter-interpreter.c

index 8d74e7f9615461f1421f1042ee49234c64f33175..8640960801b323d9ce5403d01c2234abfd21392c 100644 (file)
@@ -60,27 +60,27 @@ int stack_strcmp(struct estack *stack, int top, const char *cmp_type)
 
                if (unlikely(p - estack_bx(stack, top)->u.s.str > estack_bx(stack, top)->u.s.seq_len || *p == '\0')) {
                        if (q - estack_ax(stack, top)->u.s.str > estack_ax(stack, top)->u.s.seq_len || *q == '\0') {
-                               diff = 0;
+                               return 0;
                        } else {
-                               ret = parse_char(&q);
-                               if (ret == -1)
-                                       diff = 0;
-                               else
-                                       diff = -1;
+                               if (estack_ax(stack, top)->u.s.literal) {
+                                       ret = parse_char(&q);
+                                       if (ret == -1)
+                                               return 0;
+                               }
+                               return -1;
                        }
-                       break;
                }
                if (unlikely(q - estack_ax(stack, top)->u.s.str > estack_ax(stack, top)->u.s.seq_len || *q == '\0')) {
                        if (p - estack_bx(stack, top)->u.s.str > estack_bx(stack, top)->u.s.seq_len || *p == '\0') {
-                               diff = 0;
+                               return 0;
                        } else {
-                               ret = parse_char(&p);
-                               if (ret == -1)
-                                       diff = 0;
-                               else
-                                       diff = 1;
+                               if (estack_bx(stack, top)->u.s.literal) {
+                                       ret = parse_char(&p);
+                                       if (ret == -1)
+                                               return 0;
+                               }
+                               return 1;
                        }
-                       break;
                }
                if (estack_bx(stack, top)->u.s.literal) {
                        ret = parse_char(&p);
This page took 0.025684 seconds and 4 git commands to generate.