diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-regexp-prototype.cpp b/jerry-core/ecma/builtin-objects/ecma-builtin-regexp-prototype.cpp index dd9382714..ee4b205ef 100644 --- a/jerry-core/ecma/builtin-objects/ecma-builtin-regexp-prototype.cpp +++ b/jerry-core/ecma/builtin-objects/ecma-builtin-regexp-prototype.cpp @@ -59,7 +59,8 @@ ecma_builtin_regexp_prototype_exec (ecma_value_t this_arg, /**< this argument */ { ecma_completion_value_t ret_value = ecma_make_empty_completion_value (); - if (ecma_object_get_class_name (ecma_get_object_from_value (this_arg)) != LIT_MAGIC_STRING_REGEXP_UL) + if (!ecma_is_value_object (this_arg) + || ecma_object_get_class_name (ecma_get_object_from_value (this_arg)) != LIT_MAGIC_STRING_REGEXP_UL) { ret_value = ecma_raise_type_error ("Incomplete RegExp type"); } @@ -127,7 +128,8 @@ ecma_builtin_regexp_prototype_to_string (ecma_value_t this_arg) /**< this argume { ecma_completion_value_t ret_value = ecma_make_empty_completion_value (); - if (ecma_object_get_class_name (ecma_get_object_from_value (this_arg)) != LIT_MAGIC_STRING_REGEXP_UL) + if (!ecma_is_value_object (this_arg) + || ecma_object_get_class_name (ecma_get_object_from_value (this_arg)) != LIT_MAGIC_STRING_REGEXP_UL) { ret_value = ecma_raise_type_error ("Incomplete RegExp type"); } diff --git a/tests/jerry/regression-test-issue-316.js b/tests/jerry/regression-test-issue-316.js new file mode 100644 index 000000000..1fe728b0b --- /dev/null +++ b/tests/jerry/regression-test-issue-316.js @@ -0,0 +1,44 @@ +// Copyright 2015 Samsung Electronics Co., Ltd. +// Copyright 2015 University of Szeged. +// +// 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. + +try { + v_1 = RegExp.prototype.test; + v_1(ReferenceError); +} +catch (e) +{ + assert (e instanceof TypeError); + assert (e.message === "Incomplete RegExp type"); +} + +try { + v_1 = RegExp.prototype.exec; + v_1(ReferenceError); +} +catch (e) +{ + assert (e instanceof TypeError); + assert (e.message === "Incomplete RegExp type"); +} + +try { + v_1 = RegExp.prototype.toString; + v_1(ReferenceError); +} +catch (e) +{ + assert (e instanceof TypeError); + assert (e.message === "Incomplete RegExp type"); +}