X-Git-Url: https://git.cameronkatri.com/cgit.git/blobdiff_plain/e76a1ea427792aaa331cdec70d7d4ff1fb3422e0..7530d94f05887b8065742adb614c368d8568a22c:/html.c diff --git a/html.c b/html.c index eaabf72..5b07aa0 100644 --- a/html.c +++ b/html.c @@ -95,7 +95,7 @@ void html_txt(const char *txt) while(t && *t){ int c = *t; if (c=='<' || c=='>' || c=='&') { - write(htmlfd, txt, t - txt); + html_raw(txt, t - txt); if (c=='>') html(">"); else if (c=='<') @@ -116,7 +116,7 @@ void html_ntxt(int len, const char *txt) while(t && *t && len--){ int c = *t; if (c=='<' || c=='>' || c=='&') { - write(htmlfd, txt, t - txt); + html_raw(txt, t - txt); if (c=='>') html(">"); else if (c=='<') @@ -128,7 +128,7 @@ void html_ntxt(int len, const char *txt) t++; } if (t!=txt) - write(htmlfd, txt, t - txt); + html_raw(txt, t - txt); if (len<0) html("..."); } @@ -138,8 +138,8 @@ void html_attr(const char *txt) const char *t = txt; while(t && *t){ int c = *t; - if (c=='<' || c=='>' || c=='\'' || c=='\"') { - write(htmlfd, txt, t - txt); + if (c=='<' || c=='>' || c=='\'' || c=='\"' || c=='&') { + html_raw(txt, t - txt); if (c=='>') html(">"); else if (c=='<') @@ -148,6 +148,8 @@ void html_attr(const char *txt) html("'"); else if (c=='"') html("""); + else if (c=='&') + html("&"); txt = t+1; } t++; @@ -160,11 +162,11 @@ void html_url_path(const char *txt) { const char *t = txt; while(t && *t){ - int c = *t; + unsigned char c = *t; const char *e = url_escape_table[c]; - if (e && c!='+' && c!='&' && c!='+') { - write(htmlfd, txt, t - txt); - write(htmlfd, e, 3); + if (e && c!='+' && c!='&') { + html_raw(txt, t - txt); + html(e); txt = t+1; } t++; @@ -177,11 +179,13 @@ void html_url_arg(const char *txt) { const char *t = txt; while(t && *t){ - int c = *t; + unsigned char c = *t; const char *e = url_escape_table[c]; + if (c == ' ') + e = "+"; if (e) { - write(htmlfd, txt, t - txt); - write(htmlfd, e, 3); + html_raw(txt, t - txt); + html(e); txt = t+1; } t++; @@ -249,7 +253,7 @@ int html_include(const char *filename) return -1; } while((len = fread(buf, 1, 4096, f)) > 0) - write(htmlfd, buf, len); + html_raw(buf, len); fclose(f); return 0; } @@ -277,7 +281,7 @@ char *convert_query_hexchar(char *txt) d1 = hextoint(*(txt+1)); d2 = hextoint(*(txt+2)); if (d1<0 || d2<0) { - memmove(txt, txt+3, n-3); + memmove(txt, txt+3, n-2); return txt-1; } else { *txt = d1 * 16 + d2; @@ -288,12 +292,12 @@ char *convert_query_hexchar(char *txt) int http_parse_querystring(const char *txt_, void (*fn)(const char *name, const char *value)) { - char *t, *txt, *value = NULL, c; + char *o, *t, *txt, *value = NULL, c; if (!txt_) return 0; - t = txt = strdup(txt_); + o = t = txt = strdup(txt_); if (t == NULL) { printf("Out of memory\n"); exit(1); @@ -316,5 +320,6 @@ int http_parse_querystring(const char *txt_, void (*fn)(const char *name, const } if (t!=txt) (*fn)(txt, value); + free(o); return 0; }