modules/aaa/mod_authz_host.c:239: error: BUFFER_OVERRUN_L1
  Offset: [1, +oo] Size: 1 by call to `ap_getword_conf`.

modules/aaa/mod_authz_host.c:230:15: Call
228. 
229.     /* the require line is an expression, which is evaluated now. */
230.     require = ap_expr_str_exec(r, expr, &err);
                   ^
231.     if (err) {
232.       ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r, APLOGNO(03354)

server/util_expr_eval.c:1001:1: Parameter `*info->root_node->node_arg1`
   999. }
  1000. 
  1001. AP_DECLARE(const char *) ap_expr_str_exec(request_rec *r,
        ^
  1002.                                           const ap_expr_info_t *info,
  1003.                                           const char **err)

server/util_expr_eval.c:1005:12: Call
  1003.                                           const char **err)
  1004. {
  1005.     return ap_expr_str_exec_re(r, info, 0, NULL, NULL, err);
                   ^
  1006. }
  1007. 

server/util_expr_eval.c:994:9: Assignment
    992.         return result;
    993.     else if (rc < 0)
    994.         return NULL;
                 ^
    995.     else
    996.         ap_assert(0);

server/util_expr_eval.c:1005:5: Assignment
  1003.                                           const char **err)
  1004. {
  1005.     return ap_expr_str_exec_re(r, info, 0, NULL, NULL, err);
            ^
  1006. }
  1007. 

modules/aaa/mod_authz_host.c:230:5: Assignment
228. 
229.     /* the require line is an expression, which is evaluated now. */
230.     require = ap_expr_str_exec(r, expr, &err);
         ^
231.     if (err) {
232.       ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r, APLOGNO(03354)

modules/aaa/mod_authz_host.c:238:5: Assignment
236. 
237.     /* tokenize expected list of names */
238.     t = require;
         ^
239.     while ((w = ap_getword_conf(r->pool, &t)) && w[0]) {
240. 

modules/aaa/mod_authz_host.c:239:17: Call
237.     /* tokenize expected list of names */
238.     t = require;
239.     while ((w = ap_getword_conf(r->pool, &t)) && w[0]) {
                     ^
240. 
241.         apr_sockaddr_t *sa;

server/util.c:780:1: <Length trace>
778. }
779. 
780. AP_DECLARE(char *) ap_getword_conf(apr_pool_t *p, const char **line)
     ^
781. {
782.     const char *str = *line, *strend;

server/util.c:780:1: Parameter `**line`
  778. }
  779. 
  780. AP_DECLARE(char *) ap_getword_conf(apr_pool_t *p, const char **line)
       ^
  781. {
  782.     const char *str = *line, *strend;

server/util.c:782:5: Assignment
  780. AP_DECLARE(char *) ap_getword_conf(apr_pool_t *p, const char **line)
  781. {
  782.     const char *str = *line, *strend;
           ^
  783.     char *res;
  784.     char quote;

server/util.c:795:9: Assignment
  793. 
  794.     if ((quote = *str) == '"' || quote == '\'') {
  795.         strend = str + 1;
               ^
  796.         while (*strend && *strend != quote) {
  797.             if (*strend == '\\' && strend[1] &&

server/util.c:796:16: Array access: Offset: [1, +oo] Size: 1 by call to `ap_getword_conf` 
  794.     if ((quote = *str) == '"' || quote == '\'') {
  795.         strend = str + 1;
  796.         while (*strend && *strend != quote) {
                      ^
  797.             if (*strend == '\\' && strend[1] &&
  798.                 (strend[1] == quote || strend[1] == '\\')) {

AP_DECLARE(char *) ap_getword_conf(apr_pool_t *p, const char **line)
{
    const char *str = *line, *strend;
    char *res;
    char quote;
    while (apr_isspace(*str))
        ++str;
    if (!*str) {
        *line = str;
        return "";
    }
    if ((quote = *str) == '"' || quote == '\'') {
        strend = str + 1;
        while (*strend && *strend != quote) {
            if (*strend == '\\' && strend[1] &&
                (strend[1] == quote || strend[1] == '\\')) {
                strend += 2;
            }
            else {
                ++strend;
            }
        }
        res = substring_conf(p, str + 1, strend - str - 1, quote);
        if (*strend == quote)
            ++strend;
    }
    else {
        strend = str;
        while (*strend && !apr_isspace(*strend))
            ++strend;
        res = substring_conf(p, str, strend - str, 0);
    }
    while (apr_isspace(*strend))
        ++strend;
    *line = strend;
    return res;
}
['static authz_status\nforward_dns_check_authorization(request_rec *r,\n                                const char *require_line,\n                                const void *parsed_require_line)\n{\n    const char *err = NULL;\n    const ap_expr_info_t *expr = parsed_require_line;\n    const char *require, *t;\n    char *w;\n    require = ap_expr_str_exec(r, expr, &err);\n    if (err) {\n      ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r, APLOGNO(03354)\n                    "Can\'t evaluate require expression: %s", err);\n      return AUTHZ_DENIED;\n    }\n    t = require;\n    while ((w = ap_getword_conf(r->pool, &t)) && w[0]) {\n        apr_sockaddr_t *sa;\n        apr_status_t rv;\n        char *hash_ptr;\n        if ((hash_ptr = ap_strchr(w, \'#\'))) {\n            if (hash_ptr == w) {\n                break;\n            }\n            *hash_ptr = \'\\0\';\n        }\n        rv = apr_sockaddr_info_get(&sa, w, APR_UNSPEC, 0, 0, r->pool);\n        if (rv == APR_SUCCESS) {\n            while (sa) {\n                int match = apr_sockaddr_equal(sa, r->useragent_addr);\n                ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r, APLOGNO(03355)\n                              "access check for %s as \'%s\': %s",\n                              r->useragent_ip, w, match? "yes": "no");\n                if (match) {\n                    return AUTHZ_GRANTED;\n                }\n                sa = sa->next;\n            }\n        }\n        else {\n            ap_log_rerror(APLOG_MARK, APLOG_WARNING, 0, r, APLOGNO(03356)\n                          "No sockaddr info for \\"%s\\"", w);\n        }\n        if (hash_ptr) {\n            break;\n        }\n    }\n    return AUTHZ_DENIED;\n}', 'AP_DECLARE(const char *) ap_expr_str_exec(request_rec *r,\n                                          const ap_expr_info_t *info,\n                                          const char **err)\n{\n    return ap_expr_str_exec_re(r, info, 0, NULL, NULL, err);\n}', 'AP_DECLARE(const char *) ap_expr_str_exec_re(request_rec *r,\n                                             const ap_expr_info_t *info,\n                                             apr_size_t nmatch,\n                                             ap_regmatch_t *pmatch,\n                                             const char **source,\n                                             const char **err)\n{\n    ap_expr_eval_ctx_t ctx;\n    int dont_vary, rc;\n    const char *tmp_source, *vary_this;\n    ap_regmatch_t tmp_pmatch[AP_MAX_REG_MATCH];\n    const char *result;\n    AP_DEBUG_ASSERT(info->flags & AP_EXPR_FLAG_STRING_RESULT);\n    if (info->root_node->node_op == op_String) {\n        *err = NULL;\n        return (const char *)info->root_node->node_arg1;\n    }\n    tmp_source = NULL;\n    vary_this = NULL;\n    dont_vary = (info->flags & AP_EXPR_FLAG_DONT_VARY);\n    ctx.r = r;\n    ctx.c = r->connection;\n    ctx.s = r->server;\n    ctx.p = r->pool;\n    ctx.err  = err;\n    ctx.info = info;\n    ctx.re_nmatch = nmatch;\n    ctx.re_pmatch = pmatch;\n    ctx.re_source = source;\n    ctx.vary_this = dont_vary ? NULL : &vary_this;\n    ctx.data = NULL;\n    ctx.result_string = &result;\n    if (!pmatch) {\n        ctx.re_nmatch = AP_MAX_REG_MATCH;\n        ctx.re_pmatch = tmp_pmatch;\n        ctx.re_source = &tmp_source;\n    }\n    rc = ap_expr_exec_ctx(&ctx);\n    if (rc > 0)\n        return result;\n    else if (rc < 0)\n        return NULL;\n    else\n        ap_assert(0);\n    return NULL;\n}', 'AP_DECLARE(char *) ap_getword_conf(apr_pool_t *p, const char **line)\n{\n    const char *str = *line, *strend;\n    char *res;\n    char quote;\n    while (apr_isspace(*str))\n        ++str;\n    if (!*str) {\n        *line = str;\n        return "";\n    }\n    if ((quote = *str) == \'"\' || quote == \'\\\'\') {\n        strend = str + 1;\n        while (*strend && *strend != quote) {\n            if (*strend == \'\\\\\' && strend[1] &&\n                (strend[1] == quote || strend[1] == \'\\\\\')) {\n                strend += 2;\n            }\n            else {\n                ++strend;\n            }\n        }\n        res = substring_conf(p, str + 1, strend - str - 1, quote);\n        if (*strend == quote)\n            ++strend;\n    }\n    else {\n        strend = str;\n        while (*strend && !apr_isspace(*strend))\n            ++strend;\n        res = substring_conf(p, str, strend - str, 0);\n    }\n    while (apr_isspace(*strend))\n        ++strend;\n    *line = strend;\n    return res;\n}']