]> git.kaiwu.me - nginx.git/commitdiff
Fixed ngx_parse_time() out of bounds access (ticket #821).
authorMaxim Dounin <mdounin@mdounin.ru>
Fri, 30 Oct 2015 18:43:30 +0000 (21:43 +0300)
committerMaxim Dounin <mdounin@mdounin.ru>
Fri, 30 Oct 2015 18:43:30 +0000 (21:43 +0300)
The code failed to ensure that "s" is within the buffer passed for
parsing when checking for "ms", and this resulted in unexpected errors when
parsing non-null-terminated strings with trailing "m".  The bug manifested
itself when the expires directive was used with variables.

Found by Roman Arutyunyan.

src/core/ngx_parse.c

index d7350d423cf260c7cf0a98764ab4035bffe7696f..7b60c5fb65a3c9c8e3084d47dadfdc5d8b1ff3ef 100644 (file)
@@ -188,7 +188,7 @@ ngx_parse_time(ngx_str_t *line, ngx_uint_t is_sec)
             break;
 
         case 'm':
-            if (*p == 's') {
+            if (p < last && *p == 's') {
                 if (is_sec || step >= st_msec) {
                     return NGX_ERROR;
                 }