]> git.kaiwu.me - njs.git/commitdiff
Using nxt_sprintf() instead of sprintf() in backtraces.
authorhongzhidao <hongzhidao@gmail.com>
Mon, 4 Feb 2019 15:00:25 +0000 (23:00 +0800)
committerhongzhidao <hongzhidao@gmail.com>
Mon, 4 Feb 2019 15:00:25 +0000 (23:00 +0800)
njs/njs_builtin.c
njs/njs_extern.c
njs/njs_vm.c

index 76ef5a3680e3db029a14114fcf2026d40926e1db..07a3fa7bfe0380923d5b1e130602fa6d94092ed0 100644 (file)
@@ -978,69 +978,32 @@ nxt_int_t
 njs_builtin_match_native_function(njs_vm_t *vm, njs_function_t *function,
     nxt_str_t *name)
 {
-    char                       *buf;
     size_t                     len;
-    nxt_str_t                  string;
+    nxt_str_t                  string, middle;
     nxt_int_t                  rc;
     const njs_object_init_t    *obj, **p;
     const njs_object_prop_t    *prop;
     const njs_function_init_t  *fun;
 
+    middle = nxt_string_value(".");
+
     rc = njs_builtin_match(njs_object_init, function, &prop, &obj);
 
     if (rc == NXT_OK) {
-        njs_string_get(&prop->name, &string);
-        len = obj->name.length + string.length + sizeof(".");
-
-        buf = nxt_mp_zalloc(vm->mem_pool, len);
-        if (buf == NULL) {
-            return NXT_ERROR;
-        }
-
-        snprintf(buf, len, "%s.%s", obj->name.start, string.start);
-
-        name->length = len;
-        name->start = (u_char *) buf;
-
-        return NXT_OK;
+        goto found;
     }
 
     rc = njs_builtin_match(njs_prototype_init, function, &prop, &obj);
 
     if (rc == NXT_OK) {
-        njs_string_get(&prop->name, &string);
-        len = obj->name.length + string.length + sizeof(".prototype.");
-
-        buf = nxt_mp_zalloc(vm->mem_pool, len);
-        if (buf == NULL) {
-            return NXT_ERROR;
-        }
-
-        snprintf(buf, len, "%s.prototype.%s", obj->name.start, string.start);
-
-        name->length = len;
-        name->start = (u_char *) buf;
-
-        return NXT_OK;
+        middle = nxt_string_value(".prototype.");
+        goto found;
     }
 
     rc = njs_builtin_match(njs_constructor_init, function, &prop, &obj);
 
     if (rc == NXT_OK) {
-        njs_string_get(&prop->name, &string);
-        len = obj->name.length + string.length + sizeof(".");
-
-        buf = nxt_mp_zalloc(vm->mem_pool, len);
-        if (buf == NULL) {
-            return NXT_ERROR;
-        }
-
-        snprintf(buf, len, "%s.%s", obj->name.start, string.start);
-
-        name->length = len;
-        name->start = (u_char *) buf;
-
-        return NXT_OK;
+        goto found;
     }
 
     fun = njs_native_functions;
@@ -1056,23 +1019,27 @@ njs_builtin_match_native_function(njs_vm_t *vm, njs_function_t *function,
     rc = njs_builtin_match(njs_module_init, function, &prop, &obj);
 
     if (rc == NXT_OK) {
-        njs_string_get(&prop->name, &string);
-        len = obj->name.length + string.length + sizeof(".");
+        goto found;
+    }
 
-        buf = nxt_mp_zalloc(vm->mem_pool, len);
-        if (buf == NULL) {
-            return NXT_ERROR;
-        }
+    return NXT_DECLINED;
 
-        snprintf(buf, len, "%s.%s", obj->name.start, string.start);
+found:
 
-        name->length = len;
-        name->start = (u_char *) buf;
+    njs_string_get(&prop->name, &string);
 
-        return NXT_OK;
+    len = obj->name.length + middle.length + string.length;
+
+    name->length = len;
+    name->start = nxt_mp_zalloc(vm->mem_pool, len);
+    if (name->start == NULL) {
+        return NXT_ERROR;
     }
 
-    return NXT_DECLINED;
+    nxt_sprintf(name->start, name->start + len,
+                "%V%V%V", &obj->name, &middle, &string);
+
+    return NXT_OK;
 }
 
 
index bc3dd54580a5dc4fb6393f2847da13fcfcc0c181..503fd0bc39baaa5f5bf0a04234659b776d400cc9 100644 (file)
@@ -326,7 +326,7 @@ static nxt_int_t
 njs_external_match(njs_vm_t *vm, njs_function_native_t func, njs_extern_t *ext,
     nxt_str_t *name, njs_extern_part_t *head, njs_extern_part_t *ppart)
 {
-    char               *buf, *p;
+    u_char             *buf, *p;
     size_t             len;
     nxt_int_t          ret;
     njs_extern_t       *prop;
@@ -374,12 +374,11 @@ found:
     p = buf;
 
     for (pr = head; pr != NULL; pr = pr->next) {
-        p += snprintf(p, buf + len - p, "%.*s.", (int) pr->str.length,
-                      pr->str.start);
+        p = nxt_sprintf(p, buf + len, "%V.", &pr->str);
     }
 
     name->start = (u_char *) buf;
-    name->length = len;
+    name->length = len - 1;
 
     return NXT_OK;
 }
index deb4fbd6cd547b8c1fa8483fd725acdbf39e694f..451ca28ec757171b457cb7a2b0100268d86c1b54 100644 (file)
@@ -3049,7 +3049,7 @@ njs_ret_t
 njs_vm_value_to_ext_string(njs_vm_t *vm, nxt_str_t *dst, const njs_value_t *src,
     nxt_uint_t handle_exception)
 {
-    u_char                 *p, *start;
+    u_char                 *p, *start, *end;
     size_t                 len, size, count;
     njs_ret_t              ret;
     nxt_uint_t             i, exception;
@@ -3135,16 +3135,17 @@ again:
                     } else {
 
                         if (count != 0) {
-                            len += sizeof("      repeats  times\n") + 10;
+                            len += nxt_length("      repeats  times\n")
+                                   + NXT_INT_T_LEN;
                             count = 0;
                         }
 
                         if (be[i].line != 0) {
-                            len += sizeof("    at  (:)\n") + 10
+                            len += nxt_length("    at  (:)\n") + NXT_INT_T_LEN
                                    + be[i].name.length;
 
                         } else {
-                            len += sizeof("    at  (native)\n")
+                            len += nxt_length("    at  (native)\n")
                                    + be[i].name.length;
                         }
                     }
@@ -3159,6 +3160,7 @@ again:
                 }
 
                 start = p;
+                end = start + len;
 
                 p = nxt_cpymem(p, dst->start, dst->length);
                 *p++ = '\n';
@@ -3174,20 +3176,18 @@ again:
 
                     } else {
                         if (count != 0) {
-                            p += sprintf((char *) p,
-                                         "      repeats %zu times\n", count);
-                            count =0;
+                            p = nxt_sprintf(p, end,
+                                            "      repeats %uz times\n", count);
+                            count = 0;
                         }
 
                         if (be[i].line != 0) {
-                            p += sprintf((char *) p, "    at %.*s (:%u)\n",
-                                         (int) be[i].name.length,
-                                         be[i].name.start, be[i].line);
+                            p = nxt_sprintf(p, end, "    at %V (:%uD)\n",
+                                            &be[i].name, be[i].line);
 
                         } else {
-                            p += sprintf((char *) p, "    at %.*s (native)\n",
-                                         (int) be[i].name.length,
-                                         be[i].name.start);
+                            p = nxt_sprintf(p, end, "    at %V (native)\n",
+                                            &be[i].name);
                         }
                     }