diff --git a/jerry-core/ecma/base/ecma-helpers-number.c b/jerry-core/ecma/base/ecma-helpers-number.c index fd74134ce..3c4f7f7c7 100644 --- a/jerry-core/ecma/base/ecma-helpers-number.c +++ b/jerry-core/ecma/base/ecma-helpers-number.c @@ -619,6 +619,8 @@ ecma_number_negate (ecma_number_t num) /**< ecma-number */ ecma_number_t ecma_number_trunc (ecma_number_t num) /**< ecma-number */ { + JERRY_ASSERT (!ecma_number_is_nan (num)); + uint64_t fraction; int32_t exponent; const int32_t dot_shift = ecma_number_get_fraction_and_exponent (num, &fraction, &exponent); diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-date.c b/jerry-core/ecma/builtin-objects/ecma-builtin-date.c index 569012d5d..1da6546a8 100644 --- a/jerry-core/ecma/builtin-objects/ecma-builtin-date.c +++ b/jerry-core/ecma/builtin-objects/ecma-builtin-date.c @@ -136,18 +136,14 @@ ecma_date_construct_helper (const ecma_value_t *args, /**< arguments passed to t if (ecma_is_value_empty (ret_value)) { - if (!ecma_number_is_nan (year) && !ecma_number_is_infinity (year)) + if (!ecma_number_is_nan (year)) { /* 8. */ - int32_t y = ecma_number_to_int32 (year); + ecma_number_t y = ecma_number_trunc (year); if (y >= 0 && y <= 99) { - year = (ecma_number_t) (1900 + y); - } - else - { - year = (ecma_number_t) y; + year = 1900 + y; } } diff --git a/tests/jerry/regression-test-issue-1071.js b/tests/jerry/regression-test-issue-1071.js new file mode 100644 index 000000000..3f79cb63f --- /dev/null +++ b/tests/jerry/regression-test-issue-1071.js @@ -0,0 +1,23 @@ +// Copyright 2016 Samsung Electronics Co., Ltd. +// Copyright 2016 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. + +var d = new Date(864858163349847396, 1, 1, 1, 1, 1, 1, 1) +assert (d.toGMTString() === "Invalid Date"); + +d = new Date(864858, 1, 1, 1, 1, 1, 1, 1) +assert (d.toGMTString() === "Invalid Date"); + +d = new Date(86485, 1, 1, 1, 1, 1, 1, 1) +assert (d.toGMTString() !== "Invalid Date");