Commit cfbaf7f1 authored by Sergey Lyubka's avatar Sergey Lyubka

Expose mg_url_decode to the API

parent ce26234a
...@@ -1635,12 +1635,7 @@ int mg_printf(struct mg_connection *conn, const char *fmt, ...) { ...@@ -1635,12 +1635,7 @@ int mg_printf(struct mg_connection *conn, const char *fmt, ...) {
return mg_vprintf(conn, fmt, ap); return mg_vprintf(conn, fmt, ap);
} }
// URL-decode input buffer into destination buffer. int mg_url_decode(const char *src, int src_len, char *dst,
// 0-terminate the destination buffer. Return the length of decoded data.
// form-url-encoded data differs from URI encoding in a way that it
// uses '+' as character for space, see RFC 1866 section 8.2.1
// http://ftp.ics.uci.edu/pub/ietf/html/rfc1866.txt
static int url_decode(const char *src, int src_len, char *dst,
int dst_len, int is_form_url_encoded) { int dst_len, int is_form_url_encoded) {
int i, j, a, b; int i, j, a, b;
#define HEXTOI(x) (isdigit(x) ? x - '0' : x - 'W') #define HEXTOI(x) (isdigit(x) ? x - '0' : x - 'W')
...@@ -1698,7 +1693,7 @@ int mg_get_var(const char *data, size_t data_len, const char *name, ...@@ -1698,7 +1693,7 @@ int mg_get_var(const char *data, size_t data_len, const char *name,
assert(s >= p); assert(s >= p);
// Decode variable into destination buffer // Decode variable into destination buffer
len = url_decode(p, (size_t)(s - p), dst, dst_len, 1); len = mg_url_decode(p, (size_t)(s - p), dst, dst_len, 1);
// Redirect error code from -1 to -2 (destination buffer too small). // Redirect error code from -1 to -2 (destination buffer too small).
if (len == -1) { if (len == -1) {
...@@ -4396,7 +4391,7 @@ static void handle_request(struct mg_connection *conn) { ...@@ -4396,7 +4391,7 @@ static void handle_request(struct mg_connection *conn) {
* ((char *) conn->request_info.query_string++) = '\0'; * ((char *) conn->request_info.query_string++) = '\0';
} }
uri_len = (int) strlen(ri->uri); uri_len = (int) strlen(ri->uri);
url_decode(ri->uri, uri_len, (char *) ri->uri, uri_len + 1, 0); mg_url_decode(ri->uri, uri_len, (char *) ri->uri, uri_len + 1, 0);
remove_double_dots_and_double_slashes((char *) ri->uri); remove_double_dots_and_double_slashes((char *) ri->uri);
convert_uri_to_file_name(conn, path, sizeof(path), &file); convert_uri_to_file_name(conn, path, sizeof(path), &file);
conn->throttle = set_throttle(conn->ctx->config[THROTTLE], conn->throttle = set_throttle(conn->ctx->config[THROTTLE],
......
...@@ -333,6 +333,14 @@ const char *mg_get_builtin_mime_type(const char *file_name); ...@@ -333,6 +333,14 @@ const char *mg_get_builtin_mime_type(const char *file_name);
// Return Mongoose version. // Return Mongoose version.
const char *mg_version(void); const char *mg_version(void);
// URL-decode input buffer into destination buffer.
// 0-terminate the destination buffer.
// form-url-encoded data differs from URI encoding in a way that it
// uses '+' as character for space, see RFC 1866 section 8.2.1
// http://ftp.ics.uci.edu/pub/ietf/html/rfc1866.txt
// Return: length of the decoded data, or -1 if dst buffer is too small.
int mg_url_decode(const char *src, int src_len, char *dst,
int dst_len, int is_form_url_encoded);
// MD5 hash given strings. // MD5 hash given strings.
// Buffer 'buf' must be 33 bytes long. Varargs is a NULL terminated list of // Buffer 'buf' must be 33 bytes long. Varargs is a NULL terminated list of
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment