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]
APACHE 2.0 STATUS: -*-text-*-
-Last modified at [$Date: 2004/08/17 16:44:14 $]
+Last modified at [$Date: 2004/08/17 19:56:34 $]
Release:
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
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);