Merge pull request #1534 from sasensi/Fix_#1493_Path#add_crashes_whith_1000000_segments

Fix #1493 Path#add crashes whith 1000000 segments
This commit is contained in:
Jürg Lehni 2018-10-03 10:18:15 +02:00 committed by GitHub
commit a148e61129
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 18 additions and 2 deletions

View file

@ -404,8 +404,15 @@ var Path = PathItem.extend(/** @lends Path# */{
this._updateSelection(segment, 0, segment._selection); this._updateSelection(segment, 0, segment._selection);
} }
if (append) { if (append) {
// Append them all at the end by using push // Append them all at the end.
segments.push.apply(segments, segs); // Use a loop as the best way to handle big arrays (see #1493).
// Set future array length before the loop for better performances.
var originalLength = segments.length;
var offsetLength = segs.length;
segments.length += offsetLength;
for (var i = 0; i < offsetLength; i++) {
segments[originalLength + i] = segs[i];
}
} else { } else {
// Insert somewhere else // Insert somewhere else
segments.splice.apply(segments, [index, 0].concat(segs)); segments.splice.apply(segments, [index, 0].concat(segs));

View file

@ -611,3 +611,12 @@ test('Path#arcTo(from, through, to); where from, through and to all share the sa
} }
equals(error != null, true, 'We expect this arcTo() command to throw an error'); equals(error != null, true, 'We expect this arcTo() command to throw an error');
}); });
test('#1493 Path#add with 1000000 segments', function() {
var path = new Path();
for (var i = 0; i < 1000000; i++) {
path.add(new Point(0, 0));
}
path.clone();
expect(0);
});