rule-scan: Copy yytext strings

When trying to use TOK_IDENT and TOK_STRING in a single rule, that
resulted in "corrupt" strings.

https://www.gnu.org/software/bison/manual/html_node/Strings-are-Destroyed.html
This commit is contained in:
Arne Welzel 2023-11-29 18:50:14 +01:00
parent 0aef842f05
commit b795c0bfc1

View file

@ -187,17 +187,17 @@ finger { rules_lval.val = zeek::detail::Rule::FINGER; return TOK_PATTERN_TYPE; }
{STRING} { {STRING} {
*(yytext + strlen(yytext) - 1) = '\0'; *(yytext + strlen(yytext) - 1) = '\0';
rules_lval.str = yytext + 1; rules_lval.str = zeek::util::copy_string(yytext + 1);
return TOK_STRING; return TOK_STRING;
} }
{ID} { {ID} {
rules_lval.str = yytext; rules_lval.str = zeek::util::copy_string(yytext);
return TOK_IDENT; return TOK_IDENT;
} }
<PS>{PID} { <PS>{PID} {
rules_lval.str = yytext; rules_lval.str = zeek::util::copy_string(yytext);
return TOK_POLICY_SYMBOL; return TOK_POLICY_SYMBOL;
} }
@ -216,7 +216,7 @@ finger { rules_lval.val = zeek::detail::Rule::FINGER; return TOK_PATTERN_TYPE; }
else else
{ {
*(yytext + len - 1) = '\0'; *(yytext + len - 1) = '\0';
rules_lval.str = yytext + 1; rules_lval.str = zeek::util::copy_string(yytext + 1);
} }
return TOK_PATTERN; return TOK_PATTERN;