summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGravatar Adam Chlipala <adamc@hcoop.net>2009-11-27 09:12:46 -0500
committerGravatar Adam Chlipala <adamc@hcoop.net>2009-11-27 09:12:46 -0500
commit6fe3b9b161042130f6df278defee7dfd8ae6850d (patch)
tree15b6d42341953d7bdb5b73f29445391070b5b57d /src
parentb9982e3f5bb8c01d2b2b787b39d3a0b6796d0e8d (diff)
Fix handling of clearCookie/getCookie in same page gen
Diffstat (limited to 'src')
-rw-r--r--src/c/urweb.c16
1 files changed, 11 insertions, 5 deletions
diff --git a/src/c/urweb.c b/src/c/urweb.c
index aaa1278f..d1a5d320 100644
--- a/src/c/urweb.c
+++ b/src/c/urweb.c
@@ -2645,6 +2645,8 @@ uw_Basis_blob uw_Basis_stringToBlob_error(uw_context ctx, uw_Basis_string s, siz
return b;
}
+#define THE_PAST "expires=Mon, 01-01-1970 00:00:00 GMT"
+
uw_Basis_string uw_Basis_get_cookie(uw_context ctx, uw_Basis_string c) {
int len = strlen(c);
char *p = ctx->outHeaders.start;
@@ -2658,10 +2660,14 @@ uw_Basis_string uw_Basis_get_cookie(uw_context ctx, uw_Basis_string c) {
size_t sz = strcspn(p2+1, ";\r\n");
if (!strncasecmp(p, c, p2 - p)) {
- char *ret = uw_malloc(ctx, sz + 1);
- memcpy(ret, p2+1, sz);
- ret[sz] = 0;
- return ret;
+ if (sz == 0 && strstr(p2+2, THE_PAST))
+ return NULL;
+ else {
+ char *ret = uw_malloc(ctx, sz + 1);
+ memcpy(ret, p2+1, sz);
+ ret[sz] = 0;
+ return ret;
+ }
}
}
}
@@ -2719,7 +2725,7 @@ uw_unit uw_Basis_clear_cookie(uw_context ctx, uw_Basis_string prefix, uw_Basis_s
uw_write_header(ctx, c);
uw_write_header(ctx, "=; path=");
uw_write_header(ctx, prefix);
- uw_write_header(ctx, "; expires=Mon, 01-01-1970 00:00:00 GMT\r\n");
+ uw_write_header(ctx, "; " THE_PAST "\r\n");
return uw_unit_v;
}