diff --git a/jerry-core/ecma/operations/ecma-regexp-object.c b/jerry-core/ecma/operations/ecma-regexp-object.c index 1d27b061e..3005a301a 100644 --- a/jerry-core/ecma/operations/ecma-regexp-object.c +++ b/jerry-core/ecma/operations/ecma-regexp-object.c @@ -2220,11 +2220,12 @@ ecma_regexp_replace_helper (ecma_value_t this_arg, /**< this argument */ (lit_utf8_size_t) (string_end_p - source_position_p)); result = ecma_make_string_value (ecma_stringbuilder_finalize (&replace_ctx.builder)); - goto cleanup_results; + goto cleanup_chars; cleanup_builder: ecma_stringbuilder_destroy (&replace_ctx.builder); +cleanup_chars: if (string_flags & ECMA_STRING_FLAG_MUST_BE_FREED) { jmem_heap_free_block ((void *) replace_ctx.string_p, replace_ctx.string_size); diff --git a/tests/jerry/es2015/symbol-replace.js b/tests/jerry/es2015/symbol-replace.js index dc9cdce5c..976192b9c 100644 --- a/tests/jerry/es2015/symbol-replace.js +++ b/tests/jerry/es2015/symbol-replace.js @@ -660,3 +660,11 @@ try { } catch (e) { assert (e === "abrupt @@replace") } + +class Regexplike2 { + exec() { + return {} + } +} +re = new Regexplike2(); +assert (replace.call (re, "1") === "undefined");