javascript-obfuscator / javascript-obfuscator-ui

A web UI to the JavaScript Obfuscator node.js package.
https://obfuscator.io
BSD 2-Clause "Simplified" License
230 stars 130 forks source link

JavaScript setTimeout infinite loop without recursion #25

Closed odykyi closed 4 years ago

odykyi commented 6 years ago

https://stackoverflow.com/questions/51953379/javascript-settimeout-infinite-loop-without-recursion/52100787

I cannot use Obfuscator.io(https://obfuscator.io/) to uglify my JS script because it contains a setTimeout within a function that calls itself. MCVE:

function repeater() {
    // DO SOME STUFF...
    setTimeout(repeater, 100);
}
repeater();

Custom obfuscation settings required to reproduce:

Obfuscator.io's error message:

Error: @postConstruct error in class t: @postConstruct error in class t: Maximum call stack size exceeded

I've read a few other Stack Overflow questions about this. I understand that calling setTimeout(func) inside func is not actually recursion.

But still, Obfuscator.io's algorithm can't handle a self-invoking setTimeout delay.

How do I make a repeatedly-executing function using setTimeout without calling it in the function itself? I don't want to use setInterval because I want the delay to begin each time after the function's code has run. setInterval ignores that.

sanex3339 commented 4 years ago

Cannot reproduce. Fell free to create a new issue if this problem still exists.