Merge pull request #13165 from ahocevar/topojson
Do not exceed maximum call stack when parsing TopoJSON
This commit is contained in:
@@ -186,7 +186,7 @@ const GEOMETRY_READERS = {
|
|||||||
function concatenateArcs(indices, arcs) {
|
function concatenateArcs(indices, arcs) {
|
||||||
/** @type {Array<import("../coordinate.js").Coordinate>} */
|
/** @type {Array<import("../coordinate.js").Coordinate>} */
|
||||||
const coordinates = [];
|
const coordinates = [];
|
||||||
let index, arc;
|
let index;
|
||||||
for (let i = 0, ii = indices.length; i < ii; ++i) {
|
for (let i = 0, ii = indices.length; i < ii; ++i) {
|
||||||
index = indices[i];
|
index = indices[i];
|
||||||
if (i > 0) {
|
if (i > 0) {
|
||||||
@@ -195,16 +195,17 @@ function concatenateArcs(indices, arcs) {
|
|||||||
}
|
}
|
||||||
if (index >= 0) {
|
if (index >= 0) {
|
||||||
// forward arc
|
// forward arc
|
||||||
arc = arcs[index];
|
const arc = arcs[index];
|
||||||
|
for (let j = 0, jj = arc.length; j < jj; ++j) {
|
||||||
|
coordinates.push(arc[j].slice(0));
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
// reverse arc
|
// reverse arc
|
||||||
arc = arcs[~index].slice().reverse();
|
const arc = arcs[~index];
|
||||||
|
for (let j = arc.length - 1; j >= 0; --j) {
|
||||||
|
coordinates.push(arc[j].slice(0));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
coordinates.push.apply(coordinates, arc);
|
|
||||||
}
|
|
||||||
// provide fresh copies of coordinate arrays
|
|
||||||
for (let j = 0, jj = coordinates.length; j < jj; ++j) {
|
|
||||||
coordinates[j] = coordinates[j].slice();
|
|
||||||
}
|
}
|
||||||
return coordinates;
|
return coordinates;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user