X-Git-Url: https://git.octo.it/?a=blobdiff_plain;ds=sidebyside;f=src%2Futils_cgi.c;h=eb9d593affdb2d2e0531d8e779d94d6507715705;hb=9e7f6711d2cebfec79c8038c51037ba79810323c;hp=0b63daf6ae89a3103fbdaf2fa9f7f5eb6cc9d59a;hpb=8fca1d79d089342400381c3bd8e1c717d34ce9b1;p=collection4.git
diff --git a/src/utils_cgi.c b/src/utils_cgi.c
index 0b63daf..eb9d593 100644
--- a/src/utils_cgi.c
+++ b/src/utils_cgi.c
@@ -104,6 +104,7 @@ static char *uri_unescape_copy (char *dest, const char *src, size_t n) /* {{{ */
*dest_ptr = *src_ptr;
}
+ n--;
src_ptr++;
dest_ptr++;
*dest_ptr = 0;
@@ -111,7 +112,7 @@ static char *uri_unescape_copy (char *dest, const char *src, size_t n) /* {{{ */
assert (*dest_ptr == 0);
return (dest);
-} /* }}} char *uri_unescape */
+} /* }}} char *uri_unescape_copy */
static char *uri_unescape (const char *string) /* {{{ */
{
@@ -431,10 +432,17 @@ char *uri_escape_copy (char *dest, const char *src, size_t n) /* {{{ */
return (dest);
}
else if ((((unsigned char) src[in]) < 32)
- || (src[in] == '&')
- || (src[in] == ';')
- || (src[in] == '?')
- || (src[in] == '/')
+ || (src[in] == ' ')
+ /* RFC 3986, gen-delims */
+ || (src[in] == ':') || (src[in] == '/') || (src[in] == '?')
+ || (src[in] == '#') || (src[in] == '[') || (src[in] == ']')
+ || (src[in] == '@')
+ /* RFC 3986, sub-delims */
+ || (src[in] == '!') || (src[in] == '$') || (src[in] == '&')
+ || (src[in] == '(') || (src[in] == ')') || (src[in] == '*')
+ || (src[in] == '+') || (src[in] == ',') || (src[in] == ';')
+ || (src[in] == '=') || (src[in] == '\'')
+ /* 8-bit data */
|| (((unsigned char) src[in]) >= 128))
{
char esc[4];
@@ -461,6 +469,16 @@ char *uri_escape_copy (char *dest, const char *src, size_t n) /* {{{ */
return (dest);
} /* }}} char *uri_escape_copy */
+char *uri_escape_buffer (char *buffer, size_t buffer_size) /* {{{ */
+{
+ char temp[buffer_size];
+
+ uri_escape_copy (temp, buffer, buffer_size);
+ memcpy (buffer, temp, buffer_size);
+
+ return (&buffer[0]);
+} /* }}} char *uri_escape_buffer */
+
char *uri_escape (const char *string) /* {{{ */
{
char buffer[4096];
@@ -739,7 +757,7 @@ int html_print_logo (__attribute__((unused)) void *user_data) /* {{{ */
printf ("\n"
" C4
\n"
"