From cdc41c305efd86fcfb5b81e28338283d1939f226 Mon Sep 17 00:00:00 2001 From: Unbit Date: Sat, 27 Apr 2013 11:45:48 +0200 Subject: [PATCH] improved url encoding api --- core/utils.c | 26 ++++++++++++++++++++++++++ uwsgi.h | 1 + 2 files changed, 27 insertions(+) diff --git a/core/utils.c b/core/utils.c index 167d33a1..26178757 100644 --- a/core/utils.c +++ b/core/utils.c @@ -3104,6 +3104,7 @@ void http_url_decode(char *buf, uint16_t * len, char *dst) { } + /* we scan the table in reverse, as updated values are at the end */ @@ -3911,3 +3912,28 @@ char *uwsgi_str_to_hex(char *src, size_t slen) { } return dst; } + +// dst has to be 3 times buf size (USE IT ONLY FOR PATH_INFO !!!) +void http_url_encode(char *buf, uint16_t *len, char *dst) { + + uint16_t i; + char *ptr = dst; + for(i=0;i<*len;i++) { + if ((buf[i] >= 'A' && buf[i] <= 'Z') || + (buf[i] >= 'a' && buf[i] <= 'z') || + (buf[i] >= '0' && buf[i] <= '9') || + buf[i] == '-' || buf[i] == '_' || buf[i] == '.' || buf[i] == '~' || buf[i] == '/' ) { + *ptr++= buf[i]; + } + else { + char *h = uwsgi_hex_table[(int) buf[i]]; + *ptr++= '%'; + *ptr++= h[0]; + *ptr++= h[1]; + } + } + + *len = ptr-dst; + +} + diff --git a/uwsgi.h b/uwsgi.h index a820b53e..29975c2b 100644 --- a/uwsgi.h +++ b/uwsgi.h @@ -3060,6 +3060,7 @@ void uwsgi_fixup_fds(int, int, struct uwsgi_gateway *); void uwsgi_set_processname(char *); void http_url_decode(char *, uint16_t *, char *); +void http_url_encode(char *, uint16_t *, char *); pid_t uwsgi_fork(char *);