<div dir="ltr">It works well now, thank you!</div><div class="gmail_extra"><br><div class="gmail_quote">2017-02-16 22:14 GMT+08:00 Maxim Dounin <span dir="ltr"><<a href="mailto:mdounin@mdounin.ru" target="_blank">mdounin@mdounin.ru</a>></span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hello!<br>
<span class=""><br>
On Thu, Feb 16, 2017 at 03:51:24PM +0800, 洪志道 wrote:<br>
<br>
> Hi.<br>
><br>
> diff -r da46bfc484ef src/http/ngx_http_variables.c<br>
> --- a/src/http/ngx_http_variables.<wbr>c Mon Feb 13 21:45:01 2017 +0300<br>
> +++ b/src/http/ngx_http_variables.<wbr>c Wed Feb 08 10:31:53 2017 +0800<br>
> @@ -783,6 +783,10 @@<br>
>      ssize_t    s, *sp;<br>
>      ngx_str_t  val;<br>
><br>
> +    if (v->data == NULL) {<br>
> +        return;<br>
> +    }<br>
> +<br>
>      val.len = v->len;<br>
>      val.data = v->data;<br>
><br>
><br>
> The following will cause core file, I think it's better to deal with in<br>
> nginx.<br>
><br>
> server {<br>
>     listen  8000;<br>
><br>
>     location / {<br>
>         content_by_lua_block {<br>
>             ngx.var.limit_rate = size;  # size is undefined.<br>
>             ngx.say('hello lua');<br>
>         }<br>
>     }<br>
<br>
</span>This looks like a bug in ngx_parse_size(), it incorrectly assumes<br>
that the input string is at least 1 character long.  And I believe<br>
it can be triggered without Lua too.<br>
<br>
Please test if the following patch fixes things for you:<br>
<br>
# HG changeset patch<br>
# User Maxim Dounin <<a href="mailto:mdounin@mdounin.ru">mdounin@mdounin.ru</a>><br>
# Date 1487253948 -10800<br>
#      Thu Feb 16 17:05:48 2017 +0300<br>
# Node ID 51c8df305d083bc57828f68cd6e709<wbr>cacdcc41c0<br>
# Parent  be00ca08e41a69e585b6aff70a725e<wbr>d6c9e1a876<br>
Fixed ngx_parse_size() / ngx_parse_offset() with 0-length strings.<br>
<br>
diff --git a/src/core/ngx_parse.c b/src/core/ngx_parse.c<br>
--- a/src/core/ngx_parse.c<br>
+++ b/src/core/ngx_parse.c<br>
@@ -17,6 +17,11 @@ ngx_parse_size(ngx_str_t *line)<br>
     ssize_t  size, scale, max;<br>
<br>
     len = line->len;<br>
+<br>
+    if (len == 0) {<br>
+        return NGX_ERROR;<br>
+    }<br>
+<br>
     unit = line->data[len - 1];<br>
<br>
     switch (unit) {<br>
@@ -58,6 +63,11 @@ ngx_parse_offset(ngx_str_t *line)<br>
     size_t  len;<br>
<br>
     len = line->len;<br>
+<br>
+    if (len == 0) {<br>
+        return NGX_ERROR;<br>
+    }<br>
+<br>
     unit = line->data[len - 1];<br>
<br>
     switch (unit) {<br>
<span class="HOEnZb"><font color="#888888"><br>
<br>
--<br>
Maxim Dounin<br>
<a href="http://nginx.org/" rel="noreferrer" target="_blank">http://nginx.org/</a><br>
</font></span><div class="HOEnZb"><div class="h5">______________________________<wbr>_________________<br>
nginx-devel mailing list<br>
<a href="mailto:nginx-devel@nginx.org">nginx-devel@nginx.org</a><br>
<a href="http://mailman.nginx.org/mailman/listinfo/nginx-devel" rel="noreferrer" target="_blank">http://mailman.nginx.org/<wbr>mailman/listinfo/nginx-devel</a></div></div></blockquote></div><br></div>