Skip to content

Commit f497820

Browse files
committed
Sanitize u, v with isNumeric
1 parent 8d627ea commit f497820

2 files changed

Lines changed: 10 additions & 6 deletions

File tree

src/traces/quiver/calc.js

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -47,8 +47,11 @@ module.exports = function calc(gd, trace) {
4747
cdi.y = BADNUM;
4848
}
4949

50-
var ui = uArr[i] || 0;
51-
var vi = vArr[i] || 0;
50+
// Sanitize u/v the same way as x/y: anything non-numeric (bad strings,
51+
// Infinity, NaN, null, undefined) becomes a zero-length vector component
52+
// so it can't poison norm/geometry downstream. Numeric strings are cast.
53+
var ui = cdi.u = isNumeric(uArr[i]) ? +uArr[i] : 0;
54+
var vi = cdi.v = isNumeric(vArr[i]) ? +vArr[i] : 0;
5255
var norm = Math.sqrt(ui * ui + vi * vi);
5356

5457
if(isFinite(norm)) {
@@ -99,8 +102,8 @@ module.exports = function calc(gd, trace) {
99102
for(var k = 0; k < len; k++) {
100103
var xk = xVals[k];
101104
var yk = yVals[k];
102-
var uk = uArr[k] || 0;
103-
var vk = vArr[k] || 0;
105+
var uk = cd[k].u;
106+
var vk = cd[k].v;
104107
var nk = Math.sqrt(uk * uk + vk * vk);
105108

106109
var baseLen;

src/traces/quiver/plot.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -119,8 +119,9 @@ function plotOne(gd, idx, plotinfo, cdscatter, cdscatterAll, element, transition
119119
// relative angle of the point of the arrowhead
120120
const headAngle = Math.PI / 12;
121121

122-
const u = (trace.u && trace.u[cdi.i]) || 0;
123-
const v = (trace.v && trace.v[cdi.i]) || 0;
122+
// u/v were sanitized in calc (non-numeric -> 0); reuse those values.
123+
const u = cdi.u || 0;
124+
const v = cdi.v || 0;
124125

125126
const norm = Math.sqrt(u * u + v * v);
126127
const unitx = norm ? (u / norm) : 0;

0 commit comments

Comments
 (0)