--- x/lighttpd-1.4.23/src/mod_rewrite.c 2009-03-31 00:16:59.000000000 +0200 +++ lighttpd-1.4.23/src/mod_rewrite.c 2009-10-20 01:10:01.000000000 +0200 @@ -384,11 +384,12 @@ buffer_reset(con->request.uri); start = 0; end = pattern_len; - for (k = 0; k < pattern_len; k++) { - if (pattern[k] == '$' || pattern[k] == '%') { - /* got one */ + for (k = 0; k < pattern_len - 1; k++) { - size_t num = pattern[k + 1] - '0'; + switch(pattern[k]) { + case '$': + case '%': + /* got one */ end = k; @@ -399,6 +400,7 @@ buffer_append_string_len(con->request.uri, pattern+k, pattern[k] == pattern[k+1] ? 1 : 2); } else if (pattern[k] == '$') { /* n is always > 0 */ + size_t num = pattern[k + 1] - '0'; if (num < (size_t)n) { buffer_append_string(con->request.uri, list[num]); } @@ -407,9 +409,8 @@ log_error_write(srv, __FILE__, __LINE__, "sb", "used a redirect containing a %[0-9]+ in the global scope, ignored:", rule->value); - } else { - config_append_cond_match_buffer(con, p->conf.context, con->request.uri, num); + config_append_cond_match_buffer(con, p->conf.context, con->request.uri, pattern[k + 1] - '0'); } k++;