From d8925f71cbbfd07d475619f5984ecd67cce3fa3e Mon Sep 17 00:00:00 2001 From: Jacob Quant Date: Wed, 27 Jun 2018 10:30:14 -0500 Subject: [PATCH 1/2] Add guards for unsafe dereferencing (ref #2687) * In drawData * In supplyDefaultsUpdateCalc --- src/plot_api/subroutines.js | 14 ++++++++++---- src/plots/plots.js | 2 +- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/src/plot_api/subroutines.js b/src/plot_api/subroutines.js index 252d78250e7..47118230af1 100644 --- a/src/plot_api/subroutines.js +++ b/src/plot_api/subroutines.js @@ -542,12 +542,18 @@ exports.drawData = function(gd) { var i; // remove old colorbars explicitly - for(i = 0; i < calcdata.length; i++) { - var trace = calcdata[i][0].trace; - if(trace.visible !== true || !trace._module.colorbar) { - fullLayout._infolayer.select('.cb' + trace.uid).remove(); + if(calcdata && calcdata.length) { + for(i = 0; i < calcdata.length; i++) { + var trace = calcdata[i][0].trace; + if(trace.visible !== true || !trace._module.colorbar) { + fullLayout._infolayer.select('.cb' + trace.uid).remove(); + } } } + else { + // Abort / reject + return Promise.reject('drawData aborting due to receiving invalid calcdata'); + } clearGlCanvases(gd); diff --git a/src/plots/plots.js b/src/plots/plots.js index 404e347ed6e..192384a4887 100644 --- a/src/plots/plots.js +++ b/src/plots/plots.js @@ -484,7 +484,7 @@ plots.supplyDefaults = function(gd, opts) { plots.supplyDefaultsUpdateCalc = function(oldCalcdata, newFullData) { for(var i = 0; i < newFullData.length; i++) { var newTrace = newFullData[i]; - var cd0 = oldCalcdata[i][0]; + var cd0 = oldCalcdata && oldCalcdata[i] && !oldCalcdata[i][0]; if(cd0 && cd0.trace) { var oldTrace = cd0.trace; if(oldTrace._hasCalcTransform) { From 26d0a9aa087d35e19e6bac8235b57b5fd97cae4a Mon Sep 17 00:00:00 2001 From: Jacob Quant Date: Thu, 28 Jun 2018 09:46:18 -0500 Subject: [PATCH 2/2] Fix typo from last commit: no '!' --- src/plots/plots.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plots/plots.js b/src/plots/plots.js index 192384a4887..8f3c97ff378 100644 --- a/src/plots/plots.js +++ b/src/plots/plots.js @@ -484,7 +484,7 @@ plots.supplyDefaults = function(gd, opts) { plots.supplyDefaultsUpdateCalc = function(oldCalcdata, newFullData) { for(var i = 0; i < newFullData.length; i++) { var newTrace = newFullData[i]; - var cd0 = oldCalcdata && oldCalcdata[i] && !oldCalcdata[i][0]; + var cd0 = oldCalcdata && oldCalcdata[i] && oldCalcdata[i][0]; if(cd0 && cd0.trace) { var oldTrace = cd0.trace; if(oldTrace._hasCalcTransform) {