]> git.kaiwu.me - njs.git/commitdiff
Replacing vsprintf with nxt_vsprintf in modules' exceptions API.
authorDmitry Volyntsev <xeioex@nginx.com>
Tue, 12 Feb 2019 15:37:59 +0000 (18:37 +0300)
committerDmitry Volyntsev <xeioex@nginx.com>
Tue, 12 Feb 2019 15:37:59 +0000 (18:37 +0300)
nginx/ngx_http_js_module.c
nginx/ngx_stream_js_module.c
njs/njs_error.c
njs/njs_error.h
njs/njs_generator.c
njs/njs_parser.c
njs/njs_vm.c

index 800a98936e051411f4db5df2c5cd7cab4cb37c60..7d43d50f5b8a2ffe27c1a3f9606ff972f75e8e58 100644 (file)
@@ -1751,8 +1751,7 @@ ngx_http_js_ext_subrequest(njs_vm_t *vm, njs_value_t *args, nxt_uint_t nargs,
             }
 
             if (method == n) {
-                njs_vm_error(vm, "unknown method \"%.*s\"",
-                             (int) method_name.length, method_name.start);
+                njs_vm_error(vm, "unknown method \"%V\"", &method_name);
                 return NJS_ERROR;
             }
         }
index 0fa656e306e4309ef9d7898f12a138e286a2dfd7..cebee745e56240e3f1095063239795ecdbfca9de 100644 (file)
@@ -862,8 +862,7 @@ ngx_stream_js_event(ngx_stream_session_t *s, nxt_str_t *event)
     }
 
     if (i == n) {
-        njs_vm_error(ctx->vm, "unknown event \"%.*s\"", (int) event->length,
-                     event->start);
+        njs_vm_error(ctx->vm, "unknown event \"%V\"", event);
         return NULL;
     }
 
@@ -1053,8 +1052,7 @@ ngx_stream_js_ext_on(njs_vm_t *vm, njs_value_t *args, nxt_uint_t nargs,
     }
 
     if (*event != NULL) {
-        njs_vm_error(vm, "event handler \"%.*s\" is already set",
-                     (int) name.length, name.start);
+        njs_vm_error(vm, "event handler \"%V\" is already set", &name);
         return NJS_ERROR;
     }
 
index b59c59de709de7c8eb9bedc934bbc17c01552711..331568484ac0c66a0440c622a03b0e9675d19452 100644 (file)
@@ -15,7 +15,8 @@ static const njs_value_t  njs_error_name_string = njs_string("name");
 
 
 void
-njs_error_new(njs_vm_t *vm, njs_value_type_t type, u_char *start, size_t size)
+njs_error_new(njs_vm_t *vm, njs_value_t *dst, njs_value_type_t type,
+    u_char *start, size_t size)
 {
     nxt_int_t     ret;
     njs_value_t   string;
@@ -29,15 +30,16 @@ njs_error_new(njs_vm_t *vm, njs_value_type_t type, u_char *start, size_t size)
     error = njs_error_alloc(vm, type, NULL, &string);
 
     if (nxt_fast_path(error != NULL)) {
-        vm->retval.data.u.object = error;
-        vm->retval.type = type;
-        vm->retval.data.truth = 1;
+        dst->data.u.object = error;
+        dst->type = type;
+        dst->data.truth = 1;
     }
 }
 
 
 void
-njs_error_fmt_new(njs_vm_t *vm, njs_value_type_t type, const char* fmt, ...)
+njs_error_fmt_new(njs_vm_t *vm, njs_value_t *dst, njs_value_type_t type,
+    const char* fmt, ...)
 {
     va_list  args;
     u_char   buf[NXT_MAX_ERROR_STR], *p;
@@ -50,7 +52,7 @@ njs_error_fmt_new(njs_vm_t *vm, njs_value_type_t type, const char* fmt, ...)
         va_end(args);
     }
 
-    njs_error_new(vm, type, buf, p - buf);
+    njs_error_new(vm, dst, type, buf, p - buf);
 }
 
 
@@ -65,8 +67,7 @@ njs_error_alloc(njs_vm_t *vm, njs_value_type_t type, const njs_value_t *name,
 
     error = nxt_mp_alloc(vm->mem_pool, sizeof(njs_object_t));
     if (nxt_slow_path(error == NULL)) {
-        njs_memory_error(vm);
-        return NULL;
+        goto memory_error;
     }
 
     nxt_lvlhsh_init(&error->hash);
@@ -86,7 +87,7 @@ njs_error_alloc(njs_vm_t *vm, njs_value_type_t type, const njs_value_t *name,
 
         prop = njs_object_prop_alloc(vm, &njs_error_name_string, name, 1);
         if (nxt_slow_path(prop == NULL)) {
-            return NULL;
+            goto memory_error;
         }
 
         lhq.value = prop;
@@ -105,7 +106,7 @@ njs_error_alloc(njs_vm_t *vm, njs_value_type_t type, const njs_value_t *name,
 
         prop = njs_object_prop_alloc(vm, &njs_error_message_string, message, 1);
         if (nxt_slow_path(prop == NULL)) {
-            return NULL;
+            goto memory_error;
         }
 
         prop->enumerable = 0;
@@ -120,6 +121,12 @@ njs_error_alloc(njs_vm_t *vm, njs_value_type_t type, const njs_value_t *name,
     }
 
     return error;
+
+memory_error:
+
+    njs_memory_error(vm);
+
+    return NULL;
 }
 
 
index f37f47c4d3f11ec568fe3b7c4b2f7210bca53f8b..37fc5c1df97c48592502b2317bc9fee1f715a5f9 100644 (file)
@@ -9,26 +9,32 @@
 
 
 #define njs_error(vm, fmt, ...)                                               \
-    njs_error_fmt_new(vm, NJS_OBJECT_ERROR, fmt, ##__VA_ARGS__)
+    njs_error_fmt_new(vm, &vm->retval, NJS_OBJECT_ERROR, fmt, ##__VA_ARGS__)
 #define njs_eval_error(vm, fmt, ...)                                          \
-    njs_error_fmt_new(vm, NJS_OBJECT_EVAL_ERROR, fmt, ##__VA_ARGS__)
+    njs_error_fmt_new(vm, &vm->retval, NJS_OBJECT_EVAL_ERROR, fmt,            \
+                      ##__VA_ARGS__)
 #define njs_internal_error(vm, fmt, ...)                                      \
-    njs_error_fmt_new(vm, NJS_OBJECT_INTERNAL_ERROR, fmt,            \
-                               ##__VA_ARGS__)
+    njs_error_fmt_new(vm, &vm->retval, NJS_OBJECT_INTERNAL_ERROR, fmt,        \
+                      ##__VA_ARGS__)
 #define njs_range_error(vm, fmt, ...)                                         \
-    njs_error_fmt_new(vm, NJS_OBJECT_RANGE_ERROR, fmt, ##__VA_ARGS__)
+    njs_error_fmt_new(vm, &vm->retval, NJS_OBJECT_RANGE_ERROR, fmt,           \
+                      ##__VA_ARGS__)
 #define njs_reference_error(vm, fmt, ...)                                     \
-    njs_error_fmt_new(vm, NJS_OBJECT_REF_ERROR, fmt, ##__VA_ARGS__)
+    njs_error_fmt_new(vm, &vm->retval, NJS_OBJECT_REF_ERROR, fmt,             \
+                      ##__VA_ARGS__)
 #define njs_syntax_error(vm, fmt, ...)                                        \
-    njs_error_fmt_new(vm, NJS_OBJECT_SYNTAX_ERROR, fmt, ##__VA_ARGS__)
+    njs_error_fmt_new(vm, &vm->retval, NJS_OBJECT_SYNTAX_ERROR, fmt,          \
+                      ##__VA_ARGS__)
 #define njs_type_error(vm, fmt, ...)                                          \
-    njs_error_fmt_new(vm, NJS_OBJECT_TYPE_ERROR, fmt, ##__VA_ARGS__)
+    njs_error_fmt_new(vm, &vm->retval, NJS_OBJECT_TYPE_ERROR, fmt,            \
+                      ##__VA_ARGS__)
 #define njs_uri_error(vm, fmt, ...)                                           \
-    njs_error_fmt_new(vm, NJS_OBJECT_URI_ERROR, fmt, ##__VA_ARGS__)
+    njs_error_fmt_new(vm, &vm->retval, NJS_OBJECT_URI_ERROR, fmt,             \
+                      ##__VA_ARGS__)
 
-void njs_error_new(njs_vm_t *vm, njs_value_type_t type, u_char *start,
-    size_t size);
-void njs_error_fmt_new(njs_vm_t *vm, njs_value_type_t type,
+void njs_error_new(njs_vm_t *vm, njs_value_t *dst, njs_value_type_t type,
+    u_char *start, size_t size);
+void njs_error_fmt_new(njs_vm_t *vm, njs_value_t *dst, njs_value_type_t type,
     const char* fmt, ...);
 
 void njs_memory_error(njs_vm_t *vm);
index 496e7481212e18ca924ee9e100cde540e7bf5f82..24a8064261471ac76595711be57b86da8c5562a5 100644 (file)
@@ -3191,5 +3191,5 @@ njs_generate_syntax_error(njs_vm_t *vm, njs_parser_node_t *node,
         p = nxt_sprintf(p, end, " in %uD", node->token_line);
     }
 
-    njs_error_new(vm, NJS_OBJECT_SYNTAX_ERROR, msg, p - msg);
+    njs_error_new(vm, &vm->retval, NJS_OBJECT_SYNTAX_ERROR, msg, p - msg);
 }
index 7141c801902c04f51f24b568f6581954f9f084b0..04016d207eacda20ad3f88f743171a04e8156add 100644 (file)
@@ -2759,5 +2759,5 @@ njs_parser_error(njs_vm_t *vm, njs_parser_t *parser, njs_value_type_t type,
         p = nxt_sprintf(p, end, " in %uD", lexer->line);
     }
 
-    njs_error_new(vm, type, msg, p - msg);
+    njs_error_new(vm, &vm->retval, type, msg, p - msg);
  }
index 8355c16d712067c98b3810023944583e5b599783..a3de3dc4e6a9f2adcd3ae00110b684975736ec16 100644 (file)
@@ -3329,41 +3329,18 @@ njs_value_data_set(njs_value_t *value, void *data)
 void
 njs_value_error_set(njs_vm_t *vm, njs_value_t *value, const char *fmt, ...)
 {
-    size_t        size;
-    va_list       args;
-    nxt_int_t     ret;
-    njs_value_t   string;
-    njs_object_t  *error;
-    char          buf[256];
+    va_list  args;
+    u_char   buf[NXT_MAX_ERROR_STR], *p;
+
+    p = buf;
 
     if (fmt != NULL) {
         va_start(args, fmt);
-        size = vsnprintf(buf, sizeof(buf), fmt, args);
+        p = nxt_vsprintf(buf, buf + sizeof(buf), fmt, args);
         va_end(args);
-
-    } else {
-        size = 0;
     }
 
-    ret = njs_string_new(vm, &string, (u_char *) buf, size, size);
-    if (nxt_slow_path(ret != NXT_OK)) {
-        goto memory_error;
-    }
-
-    error = njs_error_alloc(vm, NJS_OBJECT_ERROR, NULL, &string);
-    if (nxt_slow_path(error == NULL)) {
-        goto memory_error;
-    }
-
-    value->data.u.object = error;
-    value->type = NJS_OBJECT_ERROR;
-    value->data.truth = 1;
-
-    return;
-
-memory_error:
-
-    njs_memory_error_set(vm, value);
+    njs_error_new(vm, value, NJS_OBJECT_ERROR, buf, p - buf);
 }