]> scripts.mit.edu Git - autoinstallsdev/mediawiki.git/blob - maintenance/apache-ampersand.diff
MediaWiki 1.15.5
[autoinstallsdev/mediawiki.git] / maintenance / apache-ampersand.diff
1 --- orig/apache_1.3.26/src/modules/standard/mod_rewrite.h       Wed Mar 13 13:05:34 2002
2 +++ apache_1.3.26/src/modules/standard/mod_rewrite.h    Tue Oct 15 14:07:21 2002
3 @@ -447,6 +447,7 @@
4  static char *rewrite_mapfunc_toupper(request_rec *r, char *key);
5  static char *rewrite_mapfunc_tolower(request_rec *r, char *key);
6  static char *rewrite_mapfunc_escape(request_rec *r, char *key);
7 +static char *rewrite_mapfunc_ampescape(request_rec *r, char *key);
8  static char *rewrite_mapfunc_unescape(request_rec *r, char *key);
9  static char *select_random_value_part(request_rec *r, char *value);
10  static void  rewrite_rand_init(void);
11 --- orig/apache_1.3.26/src/modules/standard/mod_rewrite.c       Wed May 29 10:39:23 2002
12 +++ apache_1.3.26/src/modules/standard/mod_rewrite.c    Tue Oct 15 14:07:49 2002
13 @@ -502,6 +502,9 @@
14          else if (strcmp(a2+4, "unescape") == 0) {
15              new->func = rewrite_mapfunc_unescape;
16          }
17 +        else if (strcmp(a2+4, "ampescape") == 0) {
18 +            new->func = rewrite_mapfunc_ampescape;
19 +        }
20          else if (sconf->state == ENGINE_ENABLED) {
21              return ap_pstrcat(cmd->pool, "RewriteMap: internal map not found:",
22                                a2+4, NULL);
23 @@ -2982,6 +2985,30 @@
24  
25      value = ap_escape_uri(r->pool, key);
26      return value;
27 +}
28 +
29 +static char *rewrite_mapfunc_ampescape(request_rec *r, char *key)
30 +{
31 +    /* We only need to escape the ampersand */
32 +    char *copy = ap_palloc(r->pool, 3 * strlen(key) + 3);
33 +    const unsigned char *s = (const unsigned char *)key;
34 +    unsigned char *d = (unsigned char *)copy;
35 +    unsigned c;
36 +
37 +    while ((c = *s)) {
38 +       if (c == '&') {
39 +           *d++ = '%';
40 +           *d++ = '2';
41 +           *d++ = '6';
42 +       }
43 +       else {
44 +           *d++ = c;
45 +       }
46 +       ++s;
47 +    }
48 +    *d = '\0';
49 +    
50 +    return copy;
51  }
52  
53  static char *rewrite_mapfunc_unescape(request_rec *r, char *key)