# HG changeset patch # User Igor Sysoev # Date 1206302334 0 # Node ID 466fdc84c82d36f85a387e2c812a89ba92483db8 # Parent d85e291b99f950741d36d140150d309b12cc552a use dynamically allocated buffer in ngx_sort() diff --git a/src/core/ngx_string.c b/src/core/ngx_string.c --- a/src/core/ngx_string.c +++ b/src/core/ngx_string.c @@ -1432,24 +1432,30 @@ void ngx_sort(void *base, size_t n, size_t size, int (*cmp)(const void *, const void *)) { - u_char *p1, *p2; - u_char buf[256]; + u_char *p1, *p2, *p; + + p = ngx_alloc(size, ngx_cycle->log); + if (p == NULL) { + return; + } for (p1 = (u_char *) base + size; p1 < (u_char *) base + n * size; p1 += size) { - ngx_memcpy(buf, p1, size); + ngx_memcpy(p, p1, size); for (p2 = p1; - p2 > (u_char *) base && cmp(p2 - size, buf) > 0; + p2 > (u_char *) base && cmp(p2 - size, p) > 0; p2 -= size) { ngx_memcpy(p2, p2 - size, size); } - ngx_memcpy(p2, buf, size); + ngx_memcpy(p2, p, size); } + + ngx_free(p); }