In ap_expr_parse(), ap_expr_yylex_init() will return 1 on failure,
and ctx.scanner will remain NULL. However the return value of
ap_expr_yylex_init() is not checked, and there is a dereference of
ctx.scanner in following function ap_expr_yyset_extra(),
which may lead to NULL pointer dereference.
Fix this bug by adding return value check of ap_expr_yylex_init.
Submitted by: Zhou Qingyang <zhou1615@umn.edu>
Github: closes #308
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@
1908772 13f79535-47bb-0310-9956-
ffa450edef68
ctx.lookup_fn = lookup_fn ? lookup_fn : ap_expr_lookup_default;
ctx.at_start = 1;
- ap_expr_yylex_init(&ctx.scanner);
+ rc = ap_expr_yylex_init(&ctx.scanner);
+ if (rc)
+ return "ap_expr_yylex_init error";
+
ap_expr_yyset_extra(&ctx, ctx.scanner);
rc = ap_expr_yyparse(&ctx);
ap_expr_yylex_destroy(ctx.scanner);