diff --git a/parser/libapparmor_re/regexp.y b/parser/libapparmor_re/regexp.y index de56fc754..e1ac7f2ea 100644 --- a/parser/libapparmor_re/regexp.y +++ b/parser/libapparmor_re/regexp.y @@ -1073,6 +1073,8 @@ regexp_lex(YYSTYPE *val, const char **pos) switch(*(*pos)++) { case '\0': (*pos)--; + /* fall through */ + case '\\': val->c = '\\'; break; diff --git a/parser/parser_regex.c b/parser/parser_regex.c index 8d827e69f..6aedff040 100644 --- a/parser/parser_regex.c +++ b/parser/parser_regex.c @@ -212,7 +212,7 @@ static pattern_t convert_aaregex_to_pcre(const char *aare, int anchor, while (*s == '*') s++; if (*s == '/' || !*s) { - STORE("[^/]", dptr, 4); + STORE("[^/\\x00]", dptr, 8); } } if (*(sptr + 1) == '*') { @@ -229,11 +229,11 @@ static pattern_t convert_aaregex_to_pcre(const char *aare, int anchor, ptype = ePatternRegex; } - STORE(".*", dptr, 2); + STORE("[^\\x00]*", dptr, 8); sptr++; } else { ptype = ePatternRegex; - STORE("[^/]*", dptr, 5); + STORE("[^/\\x00]*", dptr, 9); } /* *(sptr+1) == '*' */ } /* bEscape */ @@ -248,7 +248,7 @@ static pattern_t convert_aaregex_to_pcre(const char *aare, int anchor, STORE(sptr, dptr, 1); } else { ptype = ePatternRegex; - STORE("[^/]", dptr, 4); + STORE("[^/\\x00]", dptr, 8); } break;