diff options
Diffstat (limited to 'external')
-rw-r--r-- | external/njs_regex.c | 34 | ||||
-rw-r--r-- | external/njs_webcrypto_module.c | 9 |
2 files changed, 38 insertions, 5 deletions
diff --git a/external/njs_regex.c b/external/njs_regex.c index a118666b..cd45afc0 100644 --- a/external/njs_regex.c +++ b/external/njs_regex.c @@ -114,6 +114,11 @@ njs_regex_escape(njs_mp_t *mp, njs_str_t *text) for (p = start; p < end; p++) { switch (*p) { + case '\\': + p += 1; + + break; + case '[': if (p + 1 < end && p[1] == ']') { p += 1; @@ -122,6 +127,11 @@ njs_regex_escape(njs_mp_t *mp, njs_str_t *text) } else if (p + 2 < end && p[1] == '^' && p[2] == ']') { p += 2; anychars += 1; + + } else { + while (p < end && *p != ']') { + p += 1; + } } break; @@ -146,6 +156,15 @@ njs_regex_escape(njs_mp_t *mp, njs_str_t *text) for (p = start; p < end; p++) { switch (*p) { + case '\\': + *dst++ = *p; + if (p + 1 < end) { + p += 1; + *dst++ = *p; + } + + continue; + case '[': if (p + 1 < end && p[1] == ']') { p += 1; @@ -156,12 +175,27 @@ njs_regex_escape(njs_mp_t *mp, njs_str_t *text) p += 2; dst = njs_cpymem(dst, "[\\s\\S]", 6); continue; + + } else { + *dst++ = *p++; /* Copy '['. */ + + while (p < end && *p != ']') { + *dst++ = *p++; + } + + if (p < end) { + *dst++ = *p; /* Copy ']'. */ + } + + continue; } } *dst++ = *p; } + njs_assert(dst == text->start + text->length); + return NJS_OK; #else diff --git a/external/njs_webcrypto_module.c b/external/njs_webcrypto_module.c index d9b05d09..b9a74353 100644 --- a/external/njs_webcrypto_module.c +++ b/external/njs_webcrypto_module.c @@ -2593,7 +2593,6 @@ static njs_int_t njs_ext_generate_key(njs_vm_t *vm, njs_value_t *args, njs_uint_t nargs, njs_index_t unused, njs_value_t *retval) { - int nid; unsigned usage; njs_int_t ret; njs_bool_t extractable; @@ -2730,8 +2729,7 @@ njs_ext_generate_key(njs_vm_t *vm, njs_value_t *args, njs_uint_t nargs, case NJS_ALGORITHM_ECDSA: case NJS_ALGORITHM_ECDH: - nid = 0; - ret = njs_algorithm_curve(vm, aobject, &nid); + ret = njs_algorithm_curve(vm, aobject, &key->u.a.curve); if (njs_slow_path(ret == NJS_ERROR)) { goto fail; } @@ -2747,7 +2745,7 @@ njs_ext_generate_key(njs_vm_t *vm, njs_value_t *args, njs_uint_t nargs, goto fail; } - if (EVP_PKEY_CTX_set_ec_paramgen_curve_nid(ctx, nid) <= 0) { + if (EVP_PKEY_CTX_set_ec_paramgen_curve_nid(ctx, key->u.a.curve) <= 0) { njs_webcrypto_error(vm, "EVP_PKEY_CTX_set_ec_paramgen_curve_nid() " "failed"); goto fail; @@ -4854,7 +4852,8 @@ njs_algorithm_hash(njs_vm_t *vm, njs_value_t *options, if (njs_value_is_object(options)) { val = njs_vm_object_prop(vm, options, &string_hash, &value); if (val == NULL) { - return NJS_HASH_SHA256; + *hash = NJS_HASH_SHA256; + return NJS_OK; } } else { |