diff options
author | László Langó <llango.u-szeged@partner.samsung.com> | 2017-12-06 14:47:40 +0100 |
---|---|---|
committer | Dániel Bátyai <dbatyai@inf.u-szeged.hu> | 2017-12-06 14:47:40 +0100 |
commit | 1007b6302405ad2d7881fdfd130b01268808d3ee (patch) | |
tree | fd7e88730d92cad7d2bb74ae558a43f995691326 | |
parent | a8a6122a93f24a80c77cb2eda1f04a0fe49a39af (diff) |
Fix clearing of error reference (#2131)
'ecma_clear_error_reference' must increase the reference of the returned
ecma value referenced by the error if there are more than one reference.
JerryScript-DCO-1.0-Signed-off-by: László Langó llango.u-szeged@partner.samsung.com
-rw-r--r-- | jerry-core/ecma/base/ecma-helpers.c | 9 | ||||
-rw-r--r-- | tests/unit-core/test-api-set-and-clear-error-flag.c | 36 |
2 files changed, 39 insertions, 6 deletions
diff --git a/jerry-core/ecma/base/ecma-helpers.c b/jerry-core/ecma/base/ecma-helpers.c index 8ca331c4..87680324 100644 --- a/jerry-core/ecma/base/ecma-helpers.c +++ b/jerry-core/ecma/base/ecma-helpers.c @@ -1403,17 +1403,14 @@ ecma_clear_error_reference (ecma_value_t value) JERRY_ASSERT (error_ref_p->refs > 0); - ecma_value_t referenced_value = error_ref_p->value; - if (error_ref_p->refs > 1) { error_ref_p->refs--; - } - else - { - jmem_pools_free (error_ref_p, sizeof (ecma_error_reference_t)); + return ecma_copy_value (error_ref_p->value); } + ecma_value_t referenced_value = error_ref_p->value; + jmem_pools_free (error_ref_p, sizeof (ecma_error_reference_t)); return referenced_value; } /* ecma_clear_error_reference */ diff --git a/tests/unit-core/test-api-set-and-clear-error-flag.c b/tests/unit-core/test-api-set-and-clear-error-flag.c new file mode 100644 index 00000000..65302bbd --- /dev/null +++ b/tests/unit-core/test-api-set-and-clear-error-flag.c @@ -0,0 +1,36 @@ +/* Copyright JS Foundation and other contributors, http://js.foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "jerryscript.h" +#include "test-common.h" + +int +main (void) +{ + TEST_INIT (); + + jerry_init (JERRY_INIT_EMPTY); + + jerry_value_t obj_val = jerry_create_object (); + jerry_value_set_error_flag (&obj_val); + jerry_value_t err_val = jerry_acquire_value (obj_val); + + jerry_value_clear_error_flag (&obj_val); + jerry_release_value (obj_val); + + jerry_release_value (err_val); + + jerry_cleanup (); +} /* main */ |