summaryrefslogtreecommitdiff
path: root/src/c/urweb.c
diff options
context:
space:
mode:
authorGravatar Adam Chlipala <adam@chlipala.net>2012-07-21 15:34:07 -0400
committerGravatar Adam Chlipala <adam@chlipala.net>2012-07-21 15:34:07 -0400
commit2fa860df89c8680b4782308511a74244e0179b4e (patch)
tree5d99ec63c6f0e52226ec8b82736968d686bf73a0 /src/c/urweb.c
parentcbce1b6184acae87ba220969ab2c69cf2697ea32 (diff)
Get regular forms working again
Diffstat (limited to 'src/c/urweb.c')
-rw-r--r--src/c/urweb.c33
1 files changed, 16 insertions, 17 deletions
diff --git a/src/c/urweb.c b/src/c/urweb.c
index 0ccc418a..8d44088d 100644
--- a/src/c/urweb.c
+++ b/src/c/urweb.c
@@ -4100,29 +4100,28 @@ uw_Basis_string uw_Basis_remainingFields(uw_context ctx, uw_Basis_postField f) {
}
uw_Basis_postField *uw_Basis_firstFormField(uw_context ctx, uw_Basis_string s) {
- char *amp, *eq, *unurl, *copy;
+ char *unurl;
uw_Basis_postField *f;
- if (s[0] == 0)
- return NULL;
+ if (!ctx->hasPostBody)
+ uw_error(ctx, FATAL, "firstFormField called when there is no POST body");
- amp = strchr(s, '&');
- copy = uw_malloc(ctx, amp ? amp - s + 1 : strlen(s) + 1);
- if (amp) {
- strncpy(copy, s, amp - s);
- copy[amp - s] = 0;
- } else
- strcpy(copy, s);
-
- eq = strchr(copy, '=');
- if (eq)
- *eq++ = 0;
+ if (s < ctx->postBody.data || s >= ctx->postBody.data + ctx->postBody.len)
+ return NULL;
f = uw_malloc(ctx, sizeof(uw_Basis_postField));
- unurl = copy;
+ unurl = s;
f->name = uw_Basis_unurlifyString(ctx, &unurl);
- f->value = eq ? (unurl = eq, uw_Basis_unurlifyString(ctx, &unurl)) : "";
- f->remaining = amp ? amp+1 : "";
+ s = strchr(s, 0);
+ if (!s)
+ uw_error(ctx, FATAL, "firstFormField: Missing null terminator");
+ ++s;
+ unurl = s;
+ f->value = uw_Basis_unurlifyString(ctx, &unurl);
+ s = strchr(s, 0);
+ if (!s)
+ uw_error(ctx, FATAL, "firstFormField: Missing null terminator");
+ f->remaining = s+1;
return f;
}