mirror of
https://github.com/javascript-obfuscator/javascript-obfuscator
synced 2026-08-09 12:42:29 +00:00
Prevent properties with get and set kinds from extraction with transformObjectKeys option. Fixed https://github.com/javascript-obfuscator/javascript-obfuscator/issues/707
This commit is contained in:
+21
-4
@@ -39,6 +39,14 @@ export class BasePropertiesExtractor implements IObjectExpressionExtractor {
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {Property} node
|
||||
* @returns {boolean}
|
||||
*/
|
||||
private static isProhibitedPropertyNode (node: ESTree.Property): boolean {
|
||||
return node.kind !== 'init';
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {Node} node
|
||||
* @returns {propertyValueNode is Pattern}
|
||||
@@ -51,6 +59,15 @@ export class BasePropertiesExtractor implements IObjectExpressionExtractor {
|
||||
|| NodeGuards.isRestElementNode(node);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {Property} property
|
||||
* @returns {boolean}
|
||||
*/
|
||||
private static shouldCreateLiteralNode (property: ESTree.Property): boolean {
|
||||
return !property.computed
|
||||
|| (property.computed && !!property.key && NodeGuards.isLiteralNode(property.key));
|
||||
}
|
||||
|
||||
/**
|
||||
* extracts object expression properties:
|
||||
* var _0xabc123 = {
|
||||
@@ -138,13 +155,14 @@ export class BasePropertiesExtractor implements IObjectExpressionExtractor {
|
||||
for (let i: number = 0; i < propertiesLength; i++) {
|
||||
const property: (ESTree.Property | ESTree.SpreadElement) = properties[i];
|
||||
|
||||
if (!NodeGuards.isPropertyNode(property)) {
|
||||
// invalid property node
|
||||
if (!NodeGuards.isPropertyNode(property) || BasePropertiesExtractor.isProhibitedPropertyNode(property)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
const propertyValue: ESTree.Expression | ESTree.Pattern = property.value;
|
||||
|
||||
// invalid property nodes
|
||||
// invalid property node value
|
||||
if (BasePropertiesExtractor.isProhibitedPattern(propertyValue)) {
|
||||
continue;
|
||||
}
|
||||
@@ -161,8 +179,7 @@ export class BasePropertiesExtractor implements IObjectExpressionExtractor {
|
||||
/**
|
||||
* Stage 2: creating new expression statement node with member expression based on removed property
|
||||
*/
|
||||
const shouldCreateLiteralNode: boolean = !property.computed
|
||||
|| (property.computed && !!property.key && NodeGuards.isLiteralNode(property.key));
|
||||
const shouldCreateLiteralNode: boolean = BasePropertiesExtractor.shouldCreateLiteralNode(property);
|
||||
const memberExpressionProperty: ESTree.Expression = shouldCreateLiteralNode
|
||||
? NodeFactory.literalNode(propertyKeyName)
|
||||
: NodeFactory.identifierNode(propertyKeyName);
|
||||
|
||||
Reference in New Issue
Block a user