Mercurial > hg > nginx
changeset 1347:142d979bc738 stable-0.5
r1333, r1334 merge:
omit unnecessary code,
escape space, etc in $memcached_key
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Sun, 29 Jul 2007 17:27:10 +0000 |
parents | 175edf225f10 |
children | fe5c88df87f5 |
files | src/core/ngx_string.c src/core/ngx_string.h src/http/modules/ngx_http_memcached_module.c |
diffstat | 3 files changed, 41 insertions(+), 14 deletions(-) [+] |
line wrap: on
line diff
--- a/src/core/ngx_string.c Sun Jul 29 17:25:06 2007 +0000 +++ b/src/core/ngx_string.c Sun Jul 29 17:27:10 2007 +0000 @@ -1059,7 +1059,27 @@ 0xffffffff /* 1111 1111 1111 1111 1111 1111 1111 1111 */ }; - static uint32_t *map[] = { uri, args, html, refresh }; + /* " ", %00-%1F */ + + static uint32_t memcached[] = { + 0xffffffff, /* 1111 1111 1111 1111 1111 1111 1111 1111 */ + + /* ?>=< ;:98 7654 3210 /.-, +*)( '&%$ #"! */ + 0x00000001, /* 0000 0000 0000 0000 0000 0000 0000 0001 */ + + /* _^]\ [ZYX WVUT SRQP ONML KJIH GFED CBA@ */ + 0x00000000, /* 0000 0000 0000 0000 0000 0000 0000 0000 */ + + /* ~}| {zyx wvut srqp onml kjih gfed cba` */ + 0x00000000, /* 0000 0000 0000 0000 0000 0000 0000 0000 */ + + 0x00000000, /* 0000 0000 0000 0000 0000 0000 0000 0000 */ + 0x00000000, /* 0000 0000 0000 0000 0000 0000 0000 0000 */ + 0x00000000, /* 0000 0000 0000 0000 0000 0000 0000 0000 */ + 0x00000000, /* 0000 0000 0000 0000 0000 0000 0000 0000 */ + }; + + static uint32_t *map[] = { uri, args, html, refresh, memcached }; escape = map[type];
--- a/src/core/ngx_string.h Sun Jul 29 17:25:06 2007 +0000 +++ b/src/core/ngx_string.h Sun Jul 29 17:27:10 2007 +0000 @@ -150,12 +150,13 @@ u_char *ngx_utf_cpystrn(u_char *dst, u_char *src, size_t n); -#define NGX_ESCAPE_URI 0 -#define NGX_ESCAPE_ARGS 1 -#define NGX_ESCAPE_HTML 2 -#define NGX_ESCAPE_REFRESH 3 +#define NGX_ESCAPE_URI 0 +#define NGX_ESCAPE_ARGS 1 +#define NGX_ESCAPE_HTML 2 +#define NGX_ESCAPE_REFRESH 3 +#define NGX_ESCAPE_MEMCACHED 4 -#define NGX_UNESCAPE_URI 1 +#define NGX_UNESCAPE_URI 1 uintptr_t ngx_escape_uri(u_char *dst, u_char *src, size_t size, ngx_uint_t type); @@ -164,11 +165,11 @@ void ngx_sort(void *base, size_t n, size_t size, int (*cmp)(const void *, const void *)); -#define ngx_qsort qsort +#define ngx_qsort qsort -#define ngx_value_helper(n) #n -#define ngx_value(n) ngx_value_helper(n) +#define ngx_value_helper(n) #n +#define ngx_value(n) ngx_value_helper(n) #endif /* _NGX_STRING_H_INCLUDED_ */
--- a/src/http/modules/ngx_http_memcached_module.c Sun Jul 29 17:25:06 2007 +0000 +++ b/src/http/modules/ngx_http_memcached_module.c Sun Jul 29 17:27:10 2007 +0000 @@ -226,6 +226,7 @@ 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,10 +243,9 @@ return NGX_ERROR; } - len = sizeof("get ") - 1 + vv->len + sizeof(CRLF) - 1; - if (vv->len) { - len += 1 + vv->len; - } + 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) { @@ -268,7 +268,13 @@ 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;