]> git.kaiwu.me - njs.git/commitdiff
Fetch: fix QJS numeric conversion
authorDmitry Volyntsev <xeioex@nginx.com>
Tue, 15 Sep 2026 22:24:06 +0000 (15:24 -0700)
committerDmitry Volyntsev <xeioexception@gmail.com>
Wed, 16 Sep 2026 21:17:38 +0000 (14:17 -0700)
Previously, QuickJS wrote an int64_t through ngx_int_t fetch fields.

The fix is to use the checked native conversion helper so ILP32 builds
cannot overwrite adjacent state.

nginx/ngx_qjs_fetch.c

index 5a8e98d785de61b12f5234bfd9df2fa29a69a71e..3373c9a98572c275bf7ebc8b692e8a2db85f8c80 100644 (file)
@@ -301,10 +301,10 @@ ngx_qjs_ext_fetch(JSContext *cx, JSValueConst this_val, int argc,
         }
 
         if (!JS_IsUndefined(value)) {
-            rc = JS_ToInt64(cx, (int64_t *) &http->buffer_size, value);
+            rc = ngx_qjs_integer(cx, value, &http->buffer_size);
             JS_FreeValue(cx, value);
 
-            if (rc < 0) {
+            if (rc != NGX_OK) {
                 goto fail;
             }
         }
@@ -315,11 +315,10 @@ ngx_qjs_ext_fetch(JSContext *cx, JSValueConst this_val, int argc,
         }
 
         if (!JS_IsUndefined(value)) {
-            rc = JS_ToInt64(cx, (int64_t *) &http->max_response_body_size,
-                            value);
+            rc = ngx_qjs_integer(cx, value, &http->max_response_body_size);
             JS_FreeValue(cx, value);
 
-            if (rc < 0) {
+            if (rc != NGX_OK) {
                 goto fail;
             }
         }
@@ -801,12 +800,11 @@ static JSValue
 ngx_qjs_fetch_response_ctor(JSContext *cx, JSValueConst new_target, int argc,
     JSValueConst *argv)
 {
-    int                 ret;
     size_t              byte_offset, byte_length;
     u_char             *p, *end;
     JSValue             init, value, body, proto, obj, buf;
     ngx_str_t           bd;
-    ngx_int_t           rc;
+    ngx_int_t           rc, ret;
     const char         *str;
     ngx_pool_t         *pool;
     ngx_js_ctx_t       *ctx;
@@ -843,10 +841,10 @@ ngx_qjs_fetch_response_ctor(JSContext *cx, JSValueConst new_target, int argc,
         }
 
         if (!JS_IsUndefined(value)) {
-            ret = JS_ToInt64(cx, (int64_t *) &response->code, value);
+            ret = ngx_qjs_integer(cx, value, &response->code);
             JS_FreeValue(cx, value);
 
-            if (ret < 0) {
+            if (ret != NGX_OK) {
                 return JS_EXCEPTION;
             }