You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@httpd.apache.org by nd...@apache.org on 2004/08/17 21:56:35 UTC
cvs commit: httpd-2.0/modules/metadata mod_usertrack.c
nd 2004/08/17 12:56:35
Modified: . Tag: APACHE_2_0_BRANCH CHANGES STATUS
modules/metadata Tag: APACHE_2_0_BRANCH mod_usertrack.c
Log:
escape the cookie_name before pasting into the regexp.
Reviewed by: Jeff Trawick, Justin Erenkrantz
Revision Changes Path
No revision
No revision
1.988.2.321 +3 -0 httpd-2.0/CHANGES
Index: CHANGES
===================================================================
RCS file: /home/cvs/httpd-2.0/CHANGES,v
retrieving revision 1.988.2.320
retrieving revision 1.988.2.321
diff -u -u -r1.988.2.320 -r1.988.2.321
--- CHANGES 15 Aug 2004 23:33:27 -0000 1.988.2.320
+++ CHANGES 17 Aug 2004 19:56:33 -0000 1.988.2.321
@@ -1,5 +1,8 @@
Changes with Apache 2.0.51
+ *) mod_usertrack: Escape the cookie name before pasting into the
+ regexp. [Andr� Malo]
+
*) Extend the SetEnvIf directive to capture subexpressions of the
matched value. [Andr� Malo]
1.751.2.985 +1 -6 httpd-2.0/STATUS
Index: STATUS
===================================================================
RCS file: /home/cvs/httpd-2.0/STATUS,v
retrieving revision 1.751.2.984
retrieving revision 1.751.2.985
diff -u -u -r1.751.2.984 -r1.751.2.985
--- STATUS 17 Aug 2004 16:44:14 -0000 1.751.2.984
+++ STATUS 17 Aug 2004 19:56:34 -0000 1.751.2.985
@@ -210,11 +210,6 @@
modules/loggers/mod_log_config.c: r1.116
+1: nd
- *) mod_usertrack: Escape the cookie_name before pasting into the regexp.
- (2.0 + 1.3)
- modules/metadata/mod_usertrack.c: r1.51
- +1: nd, trawick, jerenkrantz
-
*) Fix memory leak in mod_rewrite. PR 27862. (2.0 + 1.3)
http://www.apache.org/~nd/mod_rewrite_fixleak.diff
+1: nd
No revision
No revision
1.39.2.11 +35 -2 httpd-2.0/modules/metadata/mod_usertrack.c
Index: mod_usertrack.c
===================================================================
RCS file: /home/cvs/httpd-2.0/modules/metadata/mod_usertrack.c,v
retrieving revision 1.39.2.10
retrieving revision 1.39.2.11
diff -u -u -r1.39.2.10 -r1.39.2.11
--- mod_usertrack.c 2 Jun 2004 22:40:22 -0000 1.39.2.10
+++ mod_usertrack.c 17 Aug 2004 19:56:34 -0000 1.39.2.11
@@ -160,12 +160,45 @@
apr_pool_t *p,
const char *cookie_name)
{
+ int danger_chars = 0;
+ const char *sp = cookie_name;
+
/* The goal is to end up with this regexp,
* ^cookie_name=([^;]+)|;[\t]+cookie_name=([^;]+)
* with cookie_name obviously substituted either
* with the real cookie name set by the user in httpd.conf, or with the
- * default COOKIE_NAME. */
- dcfg->regexp_string = apr_pstrcat(p, "^", cookie_name, "=([^;]+)|;[ \t]+", cookie_name, "=([^;]+)", NULL);
+ * default COOKIE_NAME.
+ */
+
+ /* Anyway, we need to escape the cookie_name before pasting it
+ * into the regex
+ */
+ while (*sp) {
+ if (!apr_isalnum(*sp)) {
+ ++danger_chars;
+ }
+ ++sp;
+ }
+
+ if (danger_chars) {
+ char *cp;
+ cp = apr_palloc(p, sp - cookie_name + danger_chars + 1); /* 1 == \0 */
+ sp = cookie_name;
+ cookie_name = cp;
+ while (*sp) {
+ if (!apr_isalnum(*sp)) {
+ *cp++ = '\\';
+ }
+ *cp++ = *sp++;
+ }
+ *cp = '\0';
+ }
+
+ dcfg->regexp_string = apr_pstrcat(p, "^",
+ cookie_name,
+ "=([^;]+)|;[ \t]+",
+ cookie_name,
+ "=([^;]+)", NULL);
dcfg->regexp = ap_pregcomp(p, dcfg->regexp_string, REG_EXTENDED);
ap_assert(dcfg->regexp != NULL);