X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~mdw/git/disorder/blobdiff_plain/763d5e6ad88ef3ba1cd1d7742d060e4f1e54c6b8..4d06b900cd27ba1bf01c3734d8e89cc599337564:/server/cgi.c diff --git a/server/cgi.c b/server/cgi.c index ce04563..5e475ed 100644 --- a/server/cgi.c +++ b/server/cgi.c @@ -52,7 +52,7 @@ #include "cgi.h" #include "printf.h" #include "mime.h" -#include "utf8.h" +#include "unicode.h" struct kvp *cgi_args; @@ -187,8 +187,8 @@ void cgi_parse(void) { else fatal(0, "unknown request method %s", p); for(k = cgi_args; k; k = k->next) - if(!validutf8(k->name) - || !validutf8(k->value)) + if(!utf8_valid(k->name, strlen(k->name)) + || !utf8_valid(k->value, strlen(k->value))) fatal(0, "invalid UTF-8 sequence in cgi argument"); } @@ -225,7 +225,7 @@ char *cgi_sgmlquote(const char *s, int raw) { int n; if(!raw) { - if(!(ucs = utf82ucs4(s))) exit(EXIT_FAILURE); + if(!(ucs = utf8_to_utf32(s, strlen(s), 0))) exit(EXIT_FAILURE); } else { ucs = xmalloc_noptr((strlen(s) + 1) * sizeof(uint32_t)); for(n = 0; s[n]; ++n) @@ -585,9 +585,19 @@ const char *cgi_label(const char *key) { read_options(); if(!(label = kvp_get(labels, key))) { - if((label = strchr(key, '.'))) + /* No label found */ + if(!strncmp(key, "images.", 7)) { + static const char *url_static; + /* images.X defaults to X.png */ + + if(!url_static) + url_static = cgi_label("url.static"); + byte_xasprintf((char **)&label, "%s%s.png", url_static, key + 7); + } else if((label = strchr(key, '.'))) + /* X.Y defaults to Y */ ++label; else + /* otherwise default to label name */ label = key; } return label;