diff options
author | Igor Sysoev <igor@sysoev.ru> | 2007-07-22 19:18:59 +0000 |
---|---|---|
committer | Igor Sysoev <igor@sysoev.ru> | 2007-07-22 19:18:59 +0000 |
commit | 3f70782404db989cf60ff9e77171ed2d689db900 (patch) | |
tree | 44288abe7481a68ccb473fb25721fb49a192ffda /src/http/modules/ngx_http_memcached_module.c | |
parent | 37ae8ca0e12ffc8cfc02986806a8a27e71c207b0 (diff) | |
download | nginx-3f70782404db989cf60ff9e77171ed2d689db900.tar.gz nginx-3f70782404db989cf60ff9e77171ed2d689db900.zip |
escape space, etc in $memcached_key
Diffstat (limited to 'src/http/modules/ngx_http_memcached_module.c')
-rw-r--r-- | src/http/modules/ngx_http_memcached_module.c | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/src/http/modules/ngx_http_memcached_module.c b/src/http/modules/ngx_http_memcached_module.c index 3430cbb65..f7205418c 100644 --- a/src/http/modules/ngx_http_memcached_module.c +++ b/src/http/modules/ngx_http_memcached_module.c @@ -226,6 +226,7 @@ static ngx_int_t ngx_http_memcached_create_request(ngx_http_request_t *r) { size_t len; + uintptr_t escape; ngx_buf_t *b; ngx_chain_t *cl; ngx_http_memcached_ctx_t *ctx; @@ -242,7 +243,9 @@ ngx_http_memcached_create_request(ngx_http_request_t *r) return NGX_ERROR; } - len = sizeof("get ") - 1 + vv->len + sizeof(CRLF) - 1; + escape = 2 * ngx_escape_uri(NULL, vv->data, vv->len, NGX_ESCAPE_MEMCACHED); + + len = sizeof("get ") - 1 + vv->len + escape + sizeof(CRLF) - 1; b = ngx_create_temp_buf(r->pool, len); if (b == NULL) { @@ -265,7 +268,13 @@ ngx_http_memcached_create_request(ngx_http_request_t *r) ctx->key.data = b->last; - b->last = ngx_copy(b->last, vv->data, vv->len); + if (escape == 0) { + b->last = ngx_copy(b->last, vv->data, vv->len); + + } else { + b->last = (u_char *) ngx_escape_uri(b->last, vv->data, vv->len, + NGX_ESCAPE_MEMCACHED); + } ctx->key.len = b->last - ctx->key.data; |