Module Name: src
Committed By: mrg
Date: Sat Mar 9 21:36:04 UTC 2013
Modified Files:
src/libexec/httpd: bozohttpd.c
Log Message:
fix PR 47629, using a slightly different patch to the one in the PR.
this modifies escape_rfc3986() to escape '%' itself, and to properly
track the buffer size and nul out the final byte, not some random
byte that may actually be unmapped.
To generate a diff of this commit:
cvs rdiff -u -r1.32 -r1.33 src/libexec/httpd/bozohttpd.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/libexec/httpd/bozohttpd.c
diff -u src/libexec/httpd/bozohttpd.c:1.32 src/libexec/httpd/bozohttpd.c:1.33
--- src/libexec/httpd/bozohttpd.c:1.32 Thu Jul 19 09:53:06 2012
+++ src/libexec/httpd/bozohttpd.c Sat Mar 9 21:36:04 2013
@@ -1,4 +1,4 @@
-/* $NetBSD: bozohttpd.c,v 1.32 2012/07/19 09:53:06 mrg Exp $ */
+/* $NetBSD: bozohttpd.c,v 1.33 2013/03/09 21:36:04 mrg Exp $ */
/* $eterna: bozohttpd.c,v 1.178 2011/11/18 09:21:15 mrg Exp $ */
@@ -871,7 +871,7 @@ escape_rfc3986(bozohttpd_t *httpd, const
return buf;
}
- for (s = url, d = buf; *s;) {
+ for (len = 0, s = url, d = buf; *s;) {
if (*s & 0x80)
goto encode_it;
switch (*s) {
@@ -893,13 +893,16 @@ escape_rfc3986(bozohttpd_t *httpd, const
case ',':
case ';':
case '=':
+ case '%':
encode_it:
snprintf(d, 4, "%%%2X", *s++);
d += 3;
len += 3;
+ break;
default:
*d++ = *s++;
len++;
+ break;
}
}
buf[len] = 0;