diff options
-rw-r--r-- | docs/02.API-REFERENCE.md | 2 | ||||
-rw-r--r-- | jerry-core/api/jerry.c | 2 | ||||
-rw-r--r-- | tests/unit-core/test-api-set-and-clear-error-flag.c | 9 |
3 files changed, 11 insertions, 2 deletions
diff --git a/docs/02.API-REFERENCE.md b/docs/02.API-REFERENCE.md index d05c4d93..7591dc4e 100644 --- a/docs/02.API-REFERENCE.md +++ b/docs/02.API-REFERENCE.md @@ -1722,7 +1722,7 @@ whether the input error value must be released or not. If it is set to `true`, then a [`jerry_release_value`](#jerry_release_value) function will be called for the first argument, so the error value won't be available after the call of `jerry_get_value_from_error`. The second argument should be false if both error -and its represented value are needed. The first argument is returned unchanged if it is not an error. +and its represented value are needed. *Note*: Returned value must be freed with [jerry_release_value](#jerry_release_value) when it is no longer needed. diff --git a/jerry-core/api/jerry.c b/jerry-core/api/jerry.c index 06073f1c..cca137f9 100644 --- a/jerry-core/api/jerry.c +++ b/jerry-core/api/jerry.c @@ -921,7 +921,7 @@ jerry_get_value_from_error (jerry_value_t value, /**< api value */ if (!ecma_is_value_error_reference (value)) { - return value; + return release ? value : ecma_copy_value (value); } jerry_value_t ret_val = jerry_acquire_value (ecma_get_error_reference_from_value (value)->value); 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 index 7899602c..f16a65a0 100644 --- a/tests/unit-core/test-api-set-and-clear-error-flag.c +++ b/tests/unit-core/test-api-set-and-clear-error-flag.c @@ -33,6 +33,15 @@ main (void) jerry_release_value (err_val); jerry_value_t value = jerry_create_number (42); + value = jerry_get_value_from_error (value, true); + jerry_release_value (value); + + value = jerry_create_number (42); + jerry_value_t value2 = jerry_get_value_from_error (value, false); + jerry_release_value (value); + jerry_release_value (value2); + + value = jerry_create_number (42); jerry_value_t error = jerry_create_error_from_value (value, true); error = jerry_create_error_from_value (error, true); jerry_release_value (error); |