Use for..of Object.keys instead of for..in (#9518)

In https://github.com/babel/babel/issues/9511 (and #9495 is another symptom), @PavelKastornyy reported a node crash becaue the JavaScript heap run out of memory. The problem was that their code was adding enumerable properties to `Object.prototype`: it is something that shouldn't be done, but Babel shouldn't make node crash if someone adds them.
I reduced down the problem to `for...in` loops in `@babel/traverse` that grew the memory consumption exponentially because of that unexpected properties.
This commit is contained in:
Nicolò Ribaudo
2019-02-26 20:09:02 +01:00
committed by GitHub
parent f1ab6120d2
commit 0345c1bc1d
24 changed files with 60 additions and 55 deletions

View File

@@ -61,7 +61,7 @@ export const defaultOptions: Options = {
export function getOptions(opts: ?Options): Options {
const options: any = {};
for (const key in defaultOptions) {
for (const key of Object.keys(defaultOptions)) {
options[key] = opts && opts[key] != null ? opts[key] : defaultOptions[key];
}
return options;