Skip to content

Commit c15ccf0

Browse files
authored
Merge pull request #98 from plotly/table-safe-mode
Add 'table' safeMode specs
2 parents c02c36f + 2b5cf94 commit c15ccf0

2 files changed

Lines changed: 31 additions & 2 deletions

File tree

src/component/plotly-graph/parse.js

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -152,14 +152,23 @@ function findMaxArrayLength (cont) {
152152
}
153153

154154
function estimateDataLength (trace) {
155+
const topLevel = findMaxArrayLength(trace)
156+
let dimLevel = 0
157+
let cellLevel = 0
158+
155159
// special case for e.g. parcoords and splom traces
156160
if (Array.isArray(trace.dimensions)) {
157-
return trace.dimensions
161+
dimLevel = trace.dimensions
158162
.map(findMaxArrayLength)
159163
.reduce((a, v) => a + v)
160164
}
161165

162-
return findMaxArrayLength(trace)
166+
// special case for e.g. table traces
167+
if (isPlainObj(trace.cells)) {
168+
cellLevel = findMaxArrayLength(trace.cells)
169+
}
170+
171+
return Math.max(topLevel, dimLevel, cellLevel)
163172
}
164173

165174
function maxPtsPerTrace (trace) {
@@ -169,6 +178,7 @@ function maxPtsPerTrace (trace) {
169178
case 'scattergl':
170179
case 'splom':
171180
case 'pointcloud':
181+
case 'table':
172182
return 1e7
173183

174184
case 'scatterpolargl':

test/unit/plotly-graph_test.js

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -395,6 +395,25 @@ tap.test('parse:', t => {
395395
})
396396
})
397397

398+
t.test('failing table case', t => {
399+
fn({
400+
data: [{
401+
type: 'table',
402+
cells: {
403+
values: [
404+
new Array(5e6),
405+
new Array(5e6),
406+
new Array(5e6)
407+
]
408+
}
409+
}]
410+
}, {safeMode: true}, (errorCode, result) => {
411+
t.equal(errorCode, 400, 'code')
412+
t.type(result.msg, 'string', 'msg type')
413+
t.end()
414+
})
415+
})
416+
398417
t.test('failing case from too many traces', t => {
399418
var data = new Array(3e3)
400419

0 commit comments

Comments
 (0)