@@ -9,72 +9,59 @@ includes: [compareArray.js, resizableArrayBufferUtils.js]
99features: [resizable-arraybuffer]
1010---*/
1111
12+ const fillWithIndexes = ( ta , length ) => {
13+ for ( let i = 0 ; i < length ; ++ i ) {
14+ ta [ i ] = MayNeedBigInt ( ta , i ) ;
15+ }
16+ return ta ;
17+ } ;
18+
1219for ( let ctor of ctors ) {
1320 const rab = CreateResizableArrayBuffer ( 4 * ctor . BYTES_PER_ELEMENT , 8 * ctor . BYTES_PER_ELEMENT ) ;
1421 const fixedLength = new ctor ( rab , 0 , 4 ) ;
15- const evil = {
16- valueOf : ( ) => {
17- rab . resize ( 2 * ctor . BYTES_PER_ELEMENT ) ;
18- return 2 ;
19- }
22+ const evil = ( ) => {
23+ rab . resize ( 2 * ctor . BYTES_PER_ELEMENT ) ;
24+ return 2 ;
2025 } ;
2126 assert . throws ( TypeError , ( ) => {
22- fixedLength . copyWithin ( evil , 0 , 1 ) ;
27+ fixedLength . copyWithin ( { valueOf : evil } , 0 , 1 , ctor . name + " evil target." ) ;
2328 } ) ;
2429 rab . resize ( 4 * ctor . BYTES_PER_ELEMENT ) ;
2530 assert . throws ( TypeError , ( ) => {
26- fixedLength . copyWithin ( 0 , evil , 3 ) ;
31+ fixedLength . copyWithin ( 0 , { valueOf : evil } , 3 , ctor . name + " evil start." ) ;
2732 } ) ;
2833 rab . resize ( 4 * ctor . BYTES_PER_ELEMENT ) ;
2934 assert . throws ( TypeError , ( ) => {
30- fixedLength . copyWithin ( 0 , 1 , evil ) ;
35+ fixedLength . copyWithin ( 0 , 1 , { valueOf : evil } , ctor . name + " evil end." ) ;
3136 } ) ;
3237}
38+
3339for ( let ctor of ctors ) {
3440 const rab = CreateResizableArrayBuffer ( 4 * ctor . BYTES_PER_ELEMENT , 8 * ctor . BYTES_PER_ELEMENT ) ;
35- const lengthTracking = new ctor ( rab ) ;
36- for ( let i = 0 ; i < 4 ; ++ i ) {
37- lengthTracking [ i ] = MayNeedBigInt ( lengthTracking , i ) ;
38- }
39- // [0, 1, 2, 3]
40- // ^
41- // target
42- // ^
43- // start
44- const evil = {
45- valueOf : ( ) => {
46- rab . resize ( 3 * ctor . BYTES_PER_ELEMENT ) ;
47- return 2 ;
48- }
41+ const lengthTracking = fillWithIndexes ( new ctor ( rab ) , 4 ) ;
42+ // [0, 1, 2,] 3]
43+ // <=--> dest
44+ // <=-> src
45+ const evil = ( ) => {
46+ rab . resize ( 3 * ctor . BYTES_PER_ELEMENT ) ;
47+ return 2 ;
4948 } ;
50- lengthTracking . copyWithin ( evil , 0 ) ;
51- assert . compareArray ( ToNumbers ( lengthTracking ) , [
52- 0 ,
53- 1 ,
54- 0
55- ] ) ;
49+ lengthTracking . copyWithin ( { valueOf : evil } , 0 ) ;
50+ assert . compareArray ( ToNumbers ( lengthTracking ) , [ 0 , 1 , 0 ] ,
51+ ctor . name + " truncated copy forward." ) ;
5652}
53+
5754for ( let ctor of ctors ) {
5855 const rab = CreateResizableArrayBuffer ( 4 * ctor . BYTES_PER_ELEMENT , 8 * ctor . BYTES_PER_ELEMENT ) ;
59- const lengthTracking = new ctor ( rab ) ;
60- for ( let i = 0 ; i < 4 ; ++ i ) {
61- lengthTracking [ i ] = MayNeedBigInt ( lengthTracking , i ) ;
62- }
63- // [0, 1, 2, 3]
64- // ^
65- // start
66- // ^
67- // target
68- const evil = {
69- valueOf : ( ) => {
70- rab . resize ( 3 * ctor . BYTES_PER_ELEMENT ) ;
71- return 2 ;
72- }
56+ const lengthTracking = fillWithIndexes ( new ctor ( rab ) , 4 ) ;
57+ // [0, 1, 2,] 3]
58+ // <=--> src
59+ // <=-> dest
60+ const evil = ( ) => {
61+ rab . resize ( 3 * ctor . BYTES_PER_ELEMENT ) ;
62+ return 2 ;
7363 } ;
74- lengthTracking . copyWithin ( 0 , evil ) ;
75- assert . compareArray ( ToNumbers ( lengthTracking ) , [
76- 2 ,
77- 1 ,
78- 2
79- ] ) ;
64+ lengthTracking . copyWithin ( 0 , { valueOf : evil } ) ;
65+ assert . compareArray ( ToNumbers ( lengthTracking ) , [ 2 , 1 , 2 ] ,
66+ ctor . name + " truncated copy backward." ) ;
8067}
0 commit comments