javascript-obfuscator / javascript-obfuscator/gulp-javascript-obfuscator

Bug in obfuscate js code.

Ouverte
#24 3 commentaires 0 réactions 0 personnes assignées Voir sur GitHub
bug cannot reproduce
Langage dominant
JavaScript
Étoiles
103
Forks
37
Métriques de merge des PR
Aucune PR mergée en 30 j

Description

First at all, sorry for my english, i will try to explain it as better as possible.

I have the following js code:

```javascript
export const Painter = function (elements, data) {
let title = elements.title;
let container = elements.container;
this.prePaint = () => { };
this.paint = () => { };
this.postPaint = () => { };
let finalPaint = () => {
this.prePaint = () => { };
this.paint = () => { };
this.postPaint = () => { };
createPromise();
};

let createPromise = () => {
return new Promise((resolve, reject) => {
this.paint = () => { resolve() }
}).then(() => {
this.prePaint(elements, data);
title.innerHTML = data.title;
container.innerHTML = data.html;
this.postPaint(elements, data);
finalPaint();
});
}

createPromise();
};
```

When i obfuscate this code, it seems like this (it was minimized and formatted by the browser):
```javascript
5: [function(a, b, c) {
"use strict";
Object[_0x56ae("0x6")](c, _0x56ae("0x6e"), {
value: !0
});
c[_0x56ae("0xb5")] = function(a, b) {
var c = this
, d = a[_0x56ae("0xb6")]
, e = a[_0x56ae("0xb7")];
this.prePaint = function() {} //// THIS LINE
,
this[_0x56ae("0xb8")] = function() {}
,
this[_0x56ae("0xb9")] = function() {}
;
var f = function() {
c[_0x56ae("0xba")] = function() {}
,
c.paint = function() {} ///// THIS LINE TOO
,
c.postPaint = function() {} ///// AND THIS LINE TOO
,
g()
}
, g = function() {
return new Promise(function(a) {
c.paint = function() {
a()
}
}
)[_0x56ae("0x24")](function() {
c[_0x56ae("0xba")](a, b),
d.innerHTML = b[_0x56ae("0xb6")],
e.innerHTML = b[_0x56ae("0x34")],
c.postPaint(a, b),
f()
})
};
g()
}
}
, {}]
```

You can see, how the fisrt this.prePaint has not transformed to this[_0x56ae("0xba")] and when this is called, it said undefined function.
But if i insert breaklines between all this "problematic" lines, it work. Like this:

```javascript

export const Painter = function (elements, data) {
let title = elements.title;
let container = elements.container;

this.prePaint = () => { };

this.paint = () => { };

this.postPaint = () => { };

let finalPaint = () => {

this.prePaint = () => { };

this.paint = () => { };

this.postPaint = () => { };

createPromise();
};

let createPromise = () => {
return new Promise((resolve, reject) => {

this.paint = () => { resolve() }

}).then(() => {
this.prePaint(elements, data);

title.innerHTML = data.title;
container.innerHTML = data.html;

this.postPaint(elements, data);

finalPaint();

});
}

createPromise();
};
```

I did fix this issue with this partial solution, but i don't know where more places of my code, will appear the same issue.

Thank you

Guide de contribution

Aucun guide de contribution indexé pour ce dépôt

Piste de recherche

Aucun fichier du dépôt, test, version ou configuration n’est indiqué. Commencez par reproduire l’exemple Painter fourni via le pipeline d’obfuscation gulp et comparez les références générées pour this.prePaint, this.paint et this.postPaint. C’est terminé lorsque le code obfusqué conserve les références de propriétés appelables sans nécessiter l’insertion de sauts de ligne.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Évaluation

Stack technique
javascript
Domaine
build-system, tooling
Type d'issue
Bug
Difficulté
3/5
Temps estimé
1-2 jours
Activité
À l'abandon
Clarté
Plutôt claire
Accessibilité débutants
35/100

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.