mirror of
https://github.com/javascript-obfuscator/javascript-obfuscator
synced 2026-08-09 12:42:29 +00:00
Added ignoring of all object members previous to SpreadElement when transformObjectKeys option is enabled
Fixed https://github.com/javascript-obfuscator/javascript-obfuscator/issues/797
This commit is contained in:
@@ -41,6 +41,7 @@ export enum NodeType {
|
||||
RestElement = 'RestElement',
|
||||
ReturnStatement = 'ReturnStatement',
|
||||
SequenceExpression = 'SequenceExpression',
|
||||
SpreadElement = 'SpreadElement',
|
||||
Super = 'Super',
|
||||
SwitchCase = 'SwitchCase',
|
||||
SwitchStatement = 'SwitchStatement',
|
||||
|
||||
+10
-5
@@ -152,11 +152,16 @@ export class BasePropertiesExtractor implements IObjectExpressionExtractor {
|
||||
const expressionStatements: ESTree.ExpressionStatement[] = [];
|
||||
const removablePropertyIds: number[] = [];
|
||||
|
||||
for (let i: number = 0; i < propertiesLength; i++) {
|
||||
// have to iterate in the reversed order to fast check spread elements and break iteration on them
|
||||
for (let i: number = propertiesLength - 1; i >= 0; i--) {
|
||||
const property: (ESTree.Property | ESTree.SpreadElement) = properties[i];
|
||||
|
||||
// invalid property node
|
||||
if (!NodeGuards.isPropertyNode(property) || BasePropertiesExtractor.isProhibitedPropertyNode(property)) {
|
||||
// spread element
|
||||
if (NodeGuards.isSpreadElementNode(property)) {
|
||||
break;
|
||||
}
|
||||
|
||||
if (BasePropertiesExtractor.isProhibitedPropertyNode(property)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
@@ -199,8 +204,8 @@ export class BasePropertiesExtractor implements IObjectExpressionExtractor {
|
||||
/**
|
||||
* Stage 4: filling arrays
|
||||
*/
|
||||
expressionStatements.push(expressionStatementNode);
|
||||
removablePropertyIds.push(i);
|
||||
expressionStatements.unshift(expressionStatementNode);
|
||||
removablePropertyIds.unshift(i);
|
||||
}
|
||||
|
||||
return [expressionStatements, removablePropertyIds];
|
||||
|
||||
@@ -374,6 +374,14 @@ export class NodeGuards {
|
||||
return node.type === NodeType.SequenceExpression;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {Node} node
|
||||
* @returns {boolean}
|
||||
*/
|
||||
public static isSpreadElementNode (node: ESTree.Node): node is ESTree.SpreadElement {
|
||||
return node.type === NodeType.SpreadElement;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {Node} node
|
||||
* @returns {boolean}
|
||||
|
||||
Reference in New Issue
Block a user