diff options
author | 2012-07-21 15:34:07 -0400 | |
---|---|---|
committer | 2012-07-21 15:34:07 -0400 | |
commit | 2fa860df89c8680b4782308511a74244e0179b4e (patch) | |
tree | 5d99ec63c6f0e52226ec8b82736968d686bf73a0 /src/c/urweb.c | |
parent | cbce1b6184acae87ba220969ab2c69cf2697ea32 (diff) |
Get regular forms working again
Diffstat (limited to 'src/c/urweb.c')
-rw-r--r-- | src/c/urweb.c | 33 |
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; } |