Last active
February 5, 2019 12:22
-
-
Save xeioex/9c879c05d303885a14f65362448b56ae to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # HG changeset patch | |
| # User hongzhidao <[email protected]> | |
| # Date 1549292425 -28800 | |
| # Mon Feb 04 23:00:25 2019 +0800 | |
| # Node ID 0345529657fcd8ea901f8a13bb94852d225ae5c0 | |
| # Parent 6c66f34a89b9c1229f0a3c80cfd3a3e01f802c8a | |
| Using nxt_sprintf() instead of sprintf() in backtraces. | |
| diff --git a/njs/njs_builtin.c b/njs/njs_builtin.c | |
| --- a/njs/njs_builtin.c | |
| +++ b/njs/njs_builtin.c | |
| @@ -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 | |
| 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("."); | |
| - | |
| - 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; | |
| } | |
| return NXT_DECLINED; | |
| + | |
| +found: | |
| + | |
| + njs_string_get(&prop->name, &string); | |
| + | |
| + 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; | |
| + } | |
| + | |
| + nxt_sprintf(name->start, name->start + len, | |
| + "%V%V%V", &obj->name, &middle, &string); | |
| + | |
| + return NXT_OK; | |
| } | |
| diff --git a/njs/njs_extern.c b/njs/njs_extern.c | |
| --- a/njs/njs_extern.c | |
| +++ b/njs/njs_extern.c | |
| @@ -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; | |
| } | |
| diff --git a/njs/njs_vm.c b/njs/njs_vm.c | |
| --- a/njs/njs_vm.c | |
| +++ b/njs/njs_vm.c | |
| @@ -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,16 @@ 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 +3159,7 @@ again: | |
| } | |
| start = p; | |
| + end = start + len; | |
| p = nxt_cpymem(p, dst->start, dst->length); | |
| *p++ = '\n'; | |
| @@ -3174,20 +3175,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); | |
| } | |
| } | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment