Project

General

Profile

Feature #443 » mod_redirect_expansion-1.4.8.patch

mod_redirect url-encode and %%/$$ patch -- will - Anonymous, 2006-01-06 08:44

View differences:

lighttpd-1.4.8/src/mod_redirect.c 2006-01-06 00:13:14.766313576 -0800
start = 0; end = pattern_len;
for (k = 0; k < pattern_len; k++) {
if ((pattern[k] == '$' || pattern[k] == '%') &&
isdigit((unsigned char)pattern[k + 1])) {
/* got one */
size_t num = pattern[k + 1] - '0';
end = k;
buffer_append_string_len(p->location, pattern + start, end - start);
if (pattern[k] == '$') {
/* n is always > 0 */
if (num < (size_t)n) {
buffer_append_string(p->location, list[num]);
if ((pattern[k] == '$' || pattern[k] == '%')) {
/* Support normal backreferences, url-encoded backreferences,
* and ignored values %%, etc
*/
if (isdigit((unsigned char)pattern[k + 1])) {
/* got one */
size_t num = pattern[k + 1] - '0';
end = k;
buffer_append_string_len(p->location, pattern + start, end - start);
if (pattern[k] == '$') {
/* n is always > 0 */
if (num < (size_t)n) {
buffer_append_string(p->location, list[num]);
}
} else {
config_append_cond_match_buffer(con, p->conf.context, p->location, num);
}
} else {
config_append_cond_match_buffer(con, p->conf.context, p->location, num);
}
k++;
start = k + 1;
k++;
start = k + 1;
} else if (pattern[k + 1] == '$' || pattern[k + 1] == '%') {
end = k;
buffer_append_string_len(p->location, pattern + start, end - start);
/* Drop one of the two */
k++;
buffer_append_string_len(p->location, pattern + k, 2);
k++;
start = k + 1;
} else if (pattern[k + 1] == '!' && isdigit((unsigned char)pattern[k + 2])) {
/* got one */
size_t num = 0;
num = pattern[k + 2] - '0';
end = k;
buffer_append_string_len(p->location, pattern + start, end - start);
if (pattern[k] == '$') {
/* n is always > 0 */
if (num < (size_t)n) {
buffer_append_string_encoded(p->location, list[num],
strlen(list[num]), ENCODING_REL_URI_PART);
}
k++;
} else if (pattern[k] == '%') { /* Subst and escape */
buffer *mbuf = buffer_init();
config_append_cond_match_buffer(con, p->conf.context, mbuf, num);
buffer_append_string_encoded(p->location, mbuf->ptr,
mbuf->used - 1, ENCODING_REL_URI_PART);
k++;
}
k++;
start = k + 1;
}
}
}
(1-1/2)