diff options
| author | Igor Sysoev <igor@sysoev.ru> | 2007-10-29 15:03:04 +0000 |
|---|---|---|
| committer | Igor Sysoev <igor@sysoev.ru> | 2007-10-29 15:03:04 +0000 |
| commit | 4c8ba0415777772072fa9302d994d701ee9ee484 (patch) | |
| tree | f458ccb46e61ef05cf32ef76765c0f8a70afca4c /src/core/ngx_string.c | |
| parent | d7aa2115b8f7ae138704d1e8b3690b0925a544de (diff) | |
| download | nginx-4c8ba0415777772072fa9302d994d701ee9ee484.tar.gz nginx-4c8ba0415777772072fa9302d994d701ee9ee484.tar.bz2 | |
r1545, r1546 merge:
ngx_escape_html(), SSI echo encoding
Diffstat (limited to 'src/core/ngx_string.c')
| -rw-r--r-- | src/core/ngx_string.c | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/src/core/ngx_string.c b/src/core/ngx_string.c index 6b37e8046..45079b706 100644 --- a/src/core/ngx_string.c +++ b/src/core/ngx_string.c @@ -1305,6 +1305,67 @@ done: } +uintptr_t +ngx_escape_html(u_char *dst, u_char *src, size_t size) +{ + u_char ch; + ngx_uint_t i, len; + + if (dst == NULL) { + + len = 0; + + for (i = 0; i < size; i++) { + switch (*src++) { + + case '<': + len += sizeof("<") - 2; + break; + + case '>': + len += sizeof(">") - 2; + break; + + case '&': + len += sizeof("&") - 2; + break; + + default: + break; + } + } + + return (uintptr_t) len; + } + + for (i = 0; i < size; i++) { + ch = *src++; + + switch (ch) { + + case '<': + *dst++ = '&'; *dst++ = 'l'; *dst++ = 't'; *dst++ = ';'; + break; + + case '>': + *dst++ = '&'; *dst++ = 'g'; *dst++ = 't'; *dst++ = ';'; + break; + + case '&': + *dst++ = '&'; *dst++ = 'a'; *dst++ = 'm'; *dst++ = 'p'; + *dst++ = ';'; + break; + + default: + *dst++ = ch; + break; + } + } + + return (uintptr_t) dst; +} + + /* ngx_sort() is implemented as insertion sort because we need stable sort */ void |
