Skip to content

Commit d8925f7

Browse files
committed
Add guards for unsafe dereferencing (ref #2687)
* In drawData * In supplyDefaultsUpdateCalc
1 parent edc166f commit d8925f7

File tree

2 files changed

+11
-5
lines changed

2 files changed

+11
-5
lines changed

Diff for: src/plot_api/subroutines.js

+10-4
Original file line numberDiff line numberDiff line change
@@ -542,12 +542,18 @@ exports.drawData = function(gd) {
542542
var i;
543543

544544
// remove old colorbars explicitly
545-
for(i = 0; i < calcdata.length; i++) {
546-
var trace = calcdata[i][0].trace;
547-
if(trace.visible !== true || !trace._module.colorbar) {
548-
fullLayout._infolayer.select('.cb' + trace.uid).remove();
545+
if(calcdata && calcdata.length) {
546+
for(i = 0; i < calcdata.length; i++) {
547+
var trace = calcdata[i][0].trace;
548+
if(trace.visible !== true || !trace._module.colorbar) {
549+
fullLayout._infolayer.select('.cb' + trace.uid).remove();
550+
}
549551
}
550552
}
553+
else {
554+
// Abort / reject
555+
return Promise.reject('drawData aborting due to receiving invalid calcdata');
556+
}
551557

552558
clearGlCanvases(gd);
553559

Diff for: src/plots/plots.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -484,7 +484,7 @@ plots.supplyDefaults = function(gd, opts) {
484484
plots.supplyDefaultsUpdateCalc = function(oldCalcdata, newFullData) {
485485
for(var i = 0; i < newFullData.length; i++) {
486486
var newTrace = newFullData[i];
487-
var cd0 = oldCalcdata[i][0];
487+
var cd0 = oldCalcdata && oldCalcdata[i] && !oldCalcdata[i][0];
488488
if(cd0 && cd0.trace) {
489489
var oldTrace = cd0.trace;
490490
if(oldTrace._hasCalcTransform) {

0 commit comments

Comments
 (0)