Skip to content

Commit

Permalink
fix __proto__ pollution vector in uPlot.assign()
Browse files Browse the repository at this point in the history
  • Loading branch information
leeoniya committed Feb 2, 2024
1 parent b0fd072 commit 5756e3e
Show file tree
Hide file tree
Showing 5 changed files with 49 additions and 25 deletions.
18 changes: 12 additions & 6 deletions dist/uPlot.cjs.js
Original file line number Diff line number Diff line change
Expand Up @@ -566,6 +566,8 @@ function fastIsObj(v) {

const TypedArray = Object.getPrototypeOf(Uint8Array);

const __proto__ = "__proto__";

function copy(o, _isObj = isObj) {
let out;

Expand All @@ -584,8 +586,10 @@ function copy(o, _isObj = isObj) {
out = o.slice();
else if (_isObj(o)) {
out = {};
for (let k in o)
out[k] = copy(o[k], _isObj);
for (let k in o) {
if (k != __proto__)
out[k] = copy(o[k], _isObj);
}
}
else
out = o;
Expand All @@ -600,10 +604,12 @@ function assign(targ) {
let src = args[i];

for (let key in src) {
if (isObj(targ[key]))
assign(targ[key], copy(src[key]));
else
targ[key] = copy(src[key]);
if (key != __proto__) {
if (isObj(targ[key]))
assign(targ[key], copy(src[key]));
else
targ[key] = copy(src[key]);
}
}
}

Expand Down
18 changes: 12 additions & 6 deletions dist/uPlot.esm.js
Original file line number Diff line number Diff line change
Expand Up @@ -564,6 +564,8 @@ function fastIsObj(v) {

const TypedArray = Object.getPrototypeOf(Uint8Array);

const __proto__ = "__proto__";

function copy(o, _isObj = isObj) {
let out;

Expand All @@ -582,8 +584,10 @@ function copy(o, _isObj = isObj) {
out = o.slice();
else if (_isObj(o)) {
out = {};
for (let k in o)
out[k] = copy(o[k], _isObj);
for (let k in o) {
if (k != __proto__)
out[k] = copy(o[k], _isObj);
}
}
else
out = o;
Expand All @@ -598,10 +602,12 @@ function assign(targ) {
let src = args[i];

for (let key in src) {
if (isObj(targ[key]))
assign(targ[key], copy(src[key]));
else
targ[key] = copy(src[key]);
if (key != __proto__) {
if (isObj(targ[key]))
assign(targ[key], copy(src[key]));
else
targ[key] = copy(src[key]);
}
}
}

Expand Down
18 changes: 12 additions & 6 deletions dist/uPlot.iife.js
Original file line number Diff line number Diff line change
Expand Up @@ -567,6 +567,8 @@ var uPlot = (function () {

const TypedArray = Object.getPrototypeOf(Uint8Array);

const __proto__ = "__proto__";

function copy(o, _isObj = isObj) {
let out;

Expand All @@ -585,8 +587,10 @@ var uPlot = (function () {
out = o.slice();
else if (_isObj(o)) {
out = {};
for (let k in o)
out[k] = copy(o[k], _isObj);
for (let k in o) {
if (k != __proto__)
out[k] = copy(o[k], _isObj);
}
}
else
out = o;
Expand All @@ -601,10 +605,12 @@ var uPlot = (function () {
let src = args[i];

for (let key in src) {
if (isObj(targ[key]))
assign(targ[key], copy(src[key]));
else
targ[key] = copy(src[key]);
if (key != __proto__) {
if (isObj(targ[key]))
assign(targ[key], copy(src[key]));
else
targ[key] = copy(src[key]);
}
}
}

Expand Down
2 changes: 1 addition & 1 deletion dist/uPlot.iife.min.js

Large diffs are not rendered by default.

18 changes: 12 additions & 6 deletions src/utils.js
Original file line number Diff line number Diff line change
Expand Up @@ -407,6 +407,8 @@ export function fastIsObj(v) {

const TypedArray = Object.getPrototypeOf(Uint8Array);

const __proto__ = "__proto__";

export function copy(o, _isObj = isObj) {
let out;

Expand All @@ -425,8 +427,10 @@ export function copy(o, _isObj = isObj) {
out = o.slice();
else if (_isObj(o)) {
out = {};
for (let k in o)
out[k] = copy(o[k], _isObj);
for (let k in o) {
if (k != __proto__)
out[k] = copy(o[k], _isObj);
}
}
else
out = o;
Expand All @@ -441,10 +445,12 @@ export function assign(targ) {
let src = args[i];

for (let key in src) {
if (isObj(targ[key]))
assign(targ[key], copy(src[key]));
else
targ[key] = copy(src[key]);
if (key != __proto__) {
if (isObj(targ[key]))
assign(targ[key], copy(src[key]));
else
targ[key] = copy(src[key]);
}
}
}

Expand Down

0 comments on commit 5756e3e

Please sign in to comment.