nginx-0.7.49

Maxim Dounin mdounin at mdounin.ru
Mon Apr 6 15:42:57 MSD 2009


Hello!

On Mon, Apr 06, 2009 at 03:30:54PM +0400, Maxim Dounin wrote:

> Hello!
> 
> On Mon, Apr 06, 2009 at 02:45:18PM +0400, Igor Sysoev wrote:
> 
> > Changes with nginx 0.7.49                                        06 Apr 2009
> > 
> >     *) Change: a segmentation fault might occur in worker process, if the 
> >        $arg_... variables were used; the bug had appeared in 0.7.48.
> 
> It should be
> 
> --- a/src/core/ngx_string.c
> +++ b/src/core/ngx_string.c
> @@ -703,14 +703,14 @@ ngx_strlcasestrn(u_char *s1, u_char *las
>  {
>      ngx_uint_t  c1, c2;
> 
> +    c2 = (ngx_uint_t) *s2++;
> +    c2  = (c2 >= 'A' && c2 <= 'Z') ? (c2 | 0x20) : c2;
> +    last -= n;
> +
>      if (s1 <= last) {
>          return NULL;
>      }
> 
> -    c2 = (ngx_uint_t) *s2++;
> -    c2  = (c2 >= 'A' && c2 <= 'Z') ? (c2 | 0x20) : c2;
> -    last -= n;
> -
>      do {
>          do {
>              if (s1 == last) {

Disregard this.  It should be 

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
@@ -703,14 +703,14 @@ ngx_strlcasestrn(u_char *s1, u_char *las
 {
     ngx_uint_t  c1, c2;

-    if (s1 <= last) {
-        return NULL;
-    }
-
     c2 = (ngx_uint_t) *s2++;
     c2  = (c2 >= 'A' && c2 <= 'Z') ? (c2 | 0x20) : c2;
     last -= n;

+    if (s1 >= last) {
+        return NULL;
+    }
+
     do {
         do {
             if (s1 == last) {


Shame on me again.

Maxim Dounin

p.s. 0.7.49 doesn't handle $args_* at all.





More information about the nginx mailing list