BUG/MEDIUM: pattern: Segfault in binary parser

The functions pat_parse_* must return 0 if fail and the number of
elements eated from **text if not fail. The function pat_parse_bin()
returns 0 or the length parsed. This causes a segfault. I just apply the
double operator "!" on the result of the function pat_parse_bin() and
the return value value match the expected value.
This commit is contained in:
Thierry FOURNIER 2014-01-21 10:59:24 +01:00 committed by Willy Tarreau
parent 46be2e5039
commit 46ceb01c24

View file

@ -445,12 +445,18 @@ int pat_parse_bin(const char **text, struct pattern *pattern, enum pat_usage usa
pattern->expect_type = SMP_T_CBIN;
if (usage == PAT_U_COMPILE)
return parse_binary(*text, &pattern->ptr.str, &pattern->len, err);
/* If the parse_binary fails, it returns 0. In succes case, it returns
* the length of the arsed binary content. The function pat_parse_*
* must return 0 if fail and the number of elements eated from **text
* if not fail. In succes case, this function eat always 1 elements.
* The double operator "!" converts the range "1-n" to "1".
*/
return !!parse_binary(*text, &pattern->ptr.str, &pattern->len, err);
trash = get_trash_chunk();
pattern->len = trash->size;
pattern->ptr.str = trash->str;
return parse_binary(*text, &pattern->ptr.str, &pattern->len, err);
return !!parse_binary(*text, &pattern->ptr.str, &pattern->len, err);
}
/* Parse and concatenate all further strings into one. */