On 10.04.2013 23:21, Guenter Knauf wrote:
On 10.04.2013 23:01, fua...@apache.org wrote:
Author: fuankg
Date: Wed Apr 10 21:01:51 2013
New Revision: 1466669

URL: http://svn.apache.org/r1466669
Log:
Put this backport for now on hold to get some more
time for testing ...

ok, onward with some more testing .....
now on r:regex() ...

1) the sample in the docs is completely wrong ...
1.1) the docu has r:regex(string, pattern) but current code implements r:regex(pattern, string); I will change this in the code soon since I it looks more Lua-like for me what is in the docs since all other Lua match functions also have parameters in the order (string, pattern) 1.2) the pattern "foo (%w+) (%S*)" doesnt work for me; it looks more like a pattern for string.match(); instead a valid pattern for r:regex() would be f.e. "foo (\\w+) (\\a+)"; backslash must be escaped in a Lua string

2) r:regex() crashes the server if more than AP_MAX_REG_MATCH matches are found; this is because we still get the real number of matches in regex.re_nsub although passing in AP_MAX_REG_MATCH:
    rv = ap_regexec(&regex, source, AP_MAX_REG_MATCH, matches, 0);

when I add:

    if (regex.re_nsub > AP_MAX_REG_MATCH) {
        ap_log_rerror(APLOG_MARK, APLOG_INFO, 0, r,
                      "regex returned %d matches; allowed %d.",
                      regex.re_nsub, AP_MAX_REG_MATCH);
        return 2;
    }

and test with a 20 match regex, I get this in the log:
regex returned 20 matches; allowed 10.

The docu of regexec() gives no hints about how to retrieve the real number of matches stored:
http://ci.apache.org/projects/httpd/trunk/doxygen/ap__regex_8h.html
and I've not yet digged into the code; but we need to make sure that the following loop doesnt loop over AP_MAX_REG_MATCH:
    for (i = 0; i <= regex.re_nsub; i++) {

BTW. what is the reason for limiting AP_MAX_REG_MATCH to 10 in httpd.h ?

Gün.


Reply via email to