utils: accept '?' as path terminator in uh_path_match()
[project/uhttpd.git] / utils.c
diff --git a/utils.c b/utils.c
index 1c61c41fa2ceb9e36845570787787c9c1376e32e..6502d948f7d8c9766fac463d87495dbbd53401fa 100644 (file)
--- a/utils.c
+++ b/utils.c
@@ -47,7 +47,7 @@ void uh_chunk_write(struct client *cl, const void *data, int len)
                ustream_printf(cl->us, "%X\r\n", len);
        ustream_write(cl->us, data, len, true);
        if (chunked)
-               ustream_printf(cl->us, "\r\n", len);
+               ustream_printf(cl->us, "\r\n");
 }
 
 void uh_chunk_vprintf(struct client *cl, const char *format, va_list arg)
@@ -74,7 +74,7 @@ void uh_chunk_vprintf(struct client *cl, const char *format, va_list arg)
                ustream_write(cl->us, buf, len, true);
        else
                ustream_vprintf(cl->us, format, arg);
-       ustream_printf(cl->us, "\r\n", len);
+       ustream_printf(cl->us, "\r\n");
 }
 
 void uh_chunk_printf(struct client *cl, const char *format, ...)
@@ -215,7 +215,7 @@ bool uh_path_match(const char *prefix, const char *url)
        if (strncmp(url, prefix, len) != 0)
                return false;
 
-       return url[len] == '/' || url[len] == 0;
+       return url[len] == '/' || url[len] == '?' || url[len] == 0;
 }
 
 char *uh_split_header(char *str)
@@ -269,11 +269,11 @@ static bool is_html_special_char(char c)
 
 char *uh_htmlescape(const char *str)
 {
-       size_t len;
+       size_t i, len;
        char *p, *copy;
 
-       for (p = str, len = 1; *p; p++)
-               if (is_html_special_char(*p))
+       for (i = 0, len = 1; str[i]; i++)
+               if (is_html_special_char(str[i]))
                        len += 6; /* &#x??; */
                else
                        len++;
@@ -283,11 +283,11 @@ char *uh_htmlescape(const char *str)
        if (!copy)
                return NULL;
 
-       for (p = copy; *str; str++)
-               if (is_html_special_char(*str))
-                       p += sprintf(p, "&#x%02x;", (unsigned int)*str);
+       for (i = 0, p = copy; str[i]; i++)
+               if (is_html_special_char(str[i]))
+                       p += sprintf(p, "&#x%02x;", (unsigned int)str[i]);
                else
-                       *p++ = *str;
+                       *p++ = str[i];
 
        return copy;
 }