From 919b79deab1e7ca2ec4754d786190698e0385c1e Mon Sep 17 00:00:00 2001 From: Zhangmq <827028667@qq.com> Date: Tue, 26 Aug 2025 10:55:20 +0800 Subject: [PATCH] modify parameter validation for Array Issue:https://gitee.com/openharmony/arkcompiler_runtime_core/issues/ICUOCL?from=project-issue Signed-off-by: zhangmingqi --- .../plugins/ets/stdlib/escompat/Array.ets | 6 ++++++ .../ets/templates/stdlib/Array_escompat.erb | 6 ++++++ .../escompat/ArrayExtendTest.ets | 10 ++++++---- .../escompat/ArrayShrinkTest.ets | 18 +++++++++++------- 4 files changed, 29 insertions(+), 11 deletions(-) diff --git a/static_core/plugins/ets/stdlib/escompat/Array.ets b/static_core/plugins/ets/stdlib/escompat/Array.ets index 7e96736d0a..ecab95e2ed 100644 --- a/static_core/plugins/ets/stdlib/escompat/Array.ets +++ b/static_core/plugins/ets/stdlib/escompat/Array.ets @@ -160,6 +160,9 @@ export class Array implements ReadonlyArray, Iterable { * */ public extendTo(arrayLength: number, initialValue: T): void { + if(arrayLength < 0){ + throw new RangeError("Parameter error.Invalid array length.") + } if (arrayLength > Int.MAX_VALUE) { throw new RangeError("arrayLength must be <= int32 max") } @@ -182,6 +185,9 @@ export class Array implements ReadonlyArray, Iterable { * */ public shrinkTo(arrayLength: number): void { + if(arrayLength < 0){ + throw new RangeError("Parameter error.Invalid array length.") + } if (arrayLength >= this.actualLength) { return } diff --git a/static_core/plugins/ets/templates/stdlib/Array_escompat.erb b/static_core/plugins/ets/templates/stdlib/Array_escompat.erb index 184e8d7528..e7de3a97d7 100644 --- a/static_core/plugins/ets/templates/stdlib/Array_escompat.erb +++ b/static_core/plugins/ets/templates/stdlib/Array_escompat.erb @@ -139,6 +139,9 @@ export class Array implements ReadonlyArray, Iterable { * */ public extendTo(arrayLength: number, initialValue: T): void { + if(arrayLength < 0){ + throw new RangeError("Parameter error.Invalid array length.") + } if (arrayLength > Int.MAX_VALUE) { throw new RangeError("arrayLength must be <= int32 max") } @@ -161,6 +164,9 @@ export class Array implements ReadonlyArray, Iterable { * */ public shrinkTo(arrayLength: number): void { + if(arrayLength < 0){ + throw new RangeError("Parameter error.Invalid array length.") + } if (arrayLength >= this.actualLength) { return } diff --git a/static_core/plugins/ets/tests/ets_func_tests/escompat/ArrayExtendTest.ets b/static_core/plugins/ets/tests/ets_func_tests/escompat/ArrayExtendTest.ets index f4052186e0..005736605f 100644 --- a/static_core/plugins/ets/tests/ets_func_tests/escompat/ArrayExtendTest.ets +++ b/static_core/plugins/ets/tests/ets_func_tests/escompat/ArrayExtendTest.ets @@ -34,10 +34,12 @@ class TestData { } function testExtendToNegLength() { - let a = Array.from(TestData.src); - a.extendTo(TestData.arrayLength1, TestData.initialValue1); - let result: boolean = equaled(TestData.expected1, a); - arktest.assertTrue(result, "Error. Got: " + a + ". Expected: " + TestData.expected1); + try { + let a = Array.from(TestData.src); + a.extendTo(TestData.arrayLength1, TestData.initialValue1); + } catch(error) { + arktest.assertEQ(error.toString(), 'RangeError: Parameter error.Invalid array length.') + } } function testExtendToPosLength() { diff --git a/static_core/plugins/ets/tests/ets_func_tests/escompat/ArrayShrinkTest.ets b/static_core/plugins/ets/tests/ets_func_tests/escompat/ArrayShrinkTest.ets index 1efcb51a0f..89e181c298 100644 --- a/static_core/plugins/ets/tests/ets_func_tests/escompat/ArrayShrinkTest.ets +++ b/static_core/plugins/ets/tests/ets_func_tests/escompat/ArrayShrinkTest.ets @@ -36,10 +36,12 @@ class TestData { } function testShrinkToNegLength() { - let a = Array.from(TestData.src); - a.shrinkTo(TestData.arrayLength1); - let result: boolean = equaled(TestData.expected1, a); - arktest.assertTrue(result, "Error. Got: " + a + ". Expected: " + TestData.expected1); + try { + let a = Array.from(TestData.src); + a.shrinkTo(TestData.arrayLength1); + } catch(error) { + arktest.assertEQ(error.toString(), 'RangeError: Parameter error.Invalid array length.') + } } function testShrinkToLength() { @@ -59,9 +61,11 @@ function testShrinkToOutLength() { function testShrinkToIntMinValue() { let a = Array.from(TestData.src); for (let i: number = 0; i < TestData.limit4; ++i) { - a.shrinkTo(TestData.arrayLength4 + i); - let result: boolean = equaled(TestData.expected4, a); - arktest.assertTrue(result, "Error. " + i + " Got: " + a + ". Expected: " + TestData.expected4); + try { + a.shrinkTo(TestData.arrayLength4 + i); + } catch(error) { + arktest.assertEQ( error.toString(), 'RangeError: Parameter error.Invalid array length.') + } } } -- Gitee