Repository navigation
transformObjectKeys: true causes TypeError: Cannot read property 'call' of undefined #498
Description
Raw Script:
console.log('test');
Script after build with webpack:
/******/ (function(modules) { // webpackBootstrap
/******/ // The module cache
/******/ var installedModules = {};
/******/
/******/ // The require function
/******/ function __webpack_require__(moduleId) {
/******/
/******/ // Check if module is in cache
/******/ if(installedModules[moduleId]) {
/******/ return installedModules[moduleId].exports;
/******/ }
/******/ // Create a new module (and put it into the cache)
/******/ var module = installedModules[moduleId] = {
/******/ i: moduleId,
/******/ l: false,
/******/ exports: {}
/******/ };
/******/
/******/ // Execute the module function
/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
/******/
/******/ // Flag the module as loaded
/******/ module.l = true;
/******/
/******/ // Return the exports of the module
/******/ return module.exports;
/******/ }
/******/
/******/
/******/ // expose the modules object (__webpack_modules__)
/******/ __webpack_require__.m = modules;
/******/
/******/ // expose the module cache
/******/ __webpack_require__.c = installedModules;
/******/
/******/ // define getter function for harmony exports
/******/ __webpack_require__.d = function(exports, name, getter) {
/******/ if(!__webpack_require__.o(exports, name)) {
/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
/******/ }
/******/ };
/******/
/******/ // define __esModule on exports
/******/ __webpack_require__.r = function(exports) {
/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
/******/ }
/******/ Object.defineProperty(exports, '__esModule', { value: true });
/******/ };
/******/
/******/ // create a fake namespace object
/******/ // mode & 1: value is a module id, require it
/******/ // mode & 2: merge all properties of value into the ns
/******/ // mode & 4: return value when already ns object
/******/ // mode & 8|1: behave like require
/******/ __webpack_require__.t = function(value, mode) {
/******/ if(mode & 1) value = __webpack_require__(value);
/******/ if(mode & 8) return value;
/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
/******/ var ns = Object.create(null);
/******/ __webpack_require__.r(ns);
/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
/******/ return ns;
/******/ };
/******/
/******/ // getDefaultExport function for compatibility with non-harmony modules
/******/ __webpack_require__.n = function(module) {
/******/ var getter = module && module.__esModule ?
/******/ function getDefault() { return module['default']; } :
/******/ function getModuleExports() { return module; };
/******/ __webpack_require__.d(getter, 'a', getter);
/******/ return getter;
/******/ };
/******/
/******/ // Object.prototype.hasOwnProperty.call
/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
/******/
/******/ // __webpack_public_path__
/******/ __webpack_require__.p = "/";
/******/
/******/
/******/ // Load entry module and return exports
/******/ return __webpack_require__(__webpack_require__.s = 0);
/******/ })
/************************************************************************/
/******/ ({
/***/ "./resources/js/loader.js":
/*!********************************!*\
!*** ./resources/js/loader.js ***!
\********************************/
/*! no static exports found */
/***/ (function(module, exports) {
console.log('test');
/***/ }),
/***/ 0:
/*!**************************************!*\
!*** multi ./resources/js/loader.js ***!
\**************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
module.exports = __webpack_require__(/*! /Users/zobov/Desktop/projects/test/resources/js/loader.js */"./resources/js/loader.js");
/***/ })
/******/ });
Obfuscator Config:
{
transformObjectKeys: true
}
After build with obfuscator:
var _0x37ba=['value','Module','defineProperty','object','__esModule','default','hasOwnProperty','call','test','exports','enumerable','get','undefined','toStringTag'];(function(_0x5a6433,_0x3dd879){var _0x2da372=function(_0x283e2e){while(--_0x283e2e){_0x5a6433['push'](_0x5a6433['shift']());}};_0x2da372(++_0x3dd879);}(_0x37ba,0xcc));var _0x3396=function(_0x5a6433,_0x3dd879){_0x5a6433=_0x5a6433-0x0;var _0x2da372=_0x37ba[_0x5a6433];return _0x2da372;};var _0x5dedd7={};_0x5dedd7['./resources/js/loader.js']=function(_0x393828,_0x52fc40){console['log'](_0x3396('0x0'));};(function(_0x57f0fc){var _0x227dcd={};function _0xddb5a0(_0x3e3dee){if(_0x227dcd[_0x3e3dee]){return _0x227dcd[_0x3e3dee][_0x3396('0x1')];}var _0x3dcbf2=_0x227dcd[_0x3e3dee]={};_0x227dcd[_0x3e3dee]['i']=_0x3e3dee;_0x227dcd[_0x3e3dee]['l']=![];_0x227dcd[_0x3e3dee][_0x3396('0x1')]={};_0x57f0fc[_0x3e3dee]['call'](_0x3dcbf2[_0x3396('0x1')],_0x3dcbf2,_0x3dcbf2[_0x3396('0x1')],_0xddb5a0);_0x3dcbf2['l']=!![];return _0x3dcbf2[_0x3396('0x1')];}_0xddb5a0['m']=_0x57f0fc;_0xddb5a0['c']=_0x227dcd;_0xddb5a0['d']=function(_0x16380c,_0x248174,_0x356b08){if(!_0xddb5a0['o'](_0x16380c,_0x248174)){var _0x38e7ab={};_0x38e7ab[_0x3396('0x2')]=!![];_0x38e7ab[_0x3396('0x3')]=_0x356b08;Object['defineProperty'](_0x16380c,_0x248174,_0x38e7ab);}};_0xddb5a0['r']=function(_0x59b0c4){if(typeof Symbol!==_0x3396('0x4')&&Symbol[_0x3396('0x5')]){var _0x29215d={};_0x29215d[_0x3396('0x6')]=_0x3396('0x7');Object['defineProperty'](_0x59b0c4,Symbol[_0x3396('0x5')],_0x29215d);}var _0x4df37a={};_0x4df37a[_0x3396('0x6')]=!![];Object[_0x3396('0x8')](_0x59b0c4,'__esModule',_0x4df37a);};_0xddb5a0['t']=function(_0x56e782,_0xbe6a9c){if(_0xbe6a9c&0x1)_0x56e782=_0xddb5a0(_0x56e782);if(_0xbe6a9c&0x8)return _0x56e782;if(_0xbe6a9c&0x4&&typeof _0x56e782===_0x3396('0x9')&&_0x56e782&&_0x56e782[_0x3396('0xa')])return _0x56e782;var _0x249096=Object['create'](null);_0xddb5a0['r'](_0x249096);var _0x48fc31={};_0x48fc31[_0x3396('0x2')]=!![];_0x48fc31[_0x3396('0x6')]=_0x56e782;Object[_0x3396('0x8')](_0x249096,'default',_0x48fc31);if(_0xbe6a9c&0x2&&typeof _0x56e782!='string')for(var _0x528be5 in _0x56e782)_0xddb5a0['d'](_0x249096,_0x528be5,function(_0x528be5){return _0x56e782[_0x528be5];}['bind'](null,_0x528be5));return _0x249096;};_0xddb5a0['n']=function(_0x12db92){var _0x47d618=_0x12db92&&_0x12db92[_0x3396('0xa')]?function getDefault(){return _0x12db92[_0x3396('0xb')];}:function getModuleExports(){return _0x12db92;};_0xddb5a0['d'](_0x47d618,'a',_0x47d618);return _0x47d618;};_0xddb5a0['o']=function(_0xd22169,_0x583027){return Object['prototype'][_0x3396('0xc')][_0x3396('0xd')](_0xd22169,_0x583027);};_0xddb5a0['p']='/';return _0xddb5a0(_0xddb5a0['s']=0x0);}(_0x5dedd7));
In versions up to 0.20.4 error not appears.
Your Environment
- Obfuscator version used: > 0.20.4
- Node version used: 10.18.0
Stack trace
/Users/zobov/Desktop/projects/test/public/js/loader.js:1
var _0x37ba=['value','Module','defineProperty','object','__esModule','default','hasOwnProperty','call','test','exports','enumerable','get','undefined','toStringTag'];(function(_0x5a6433,_0x3dd879){var _0x2da372=function(_0x283e2e){while(--_0x283e2e){_0x5a6433['push'](_0x5a6433['shift']());}};_0x2da372(++_0x3dd879);}(_0x37ba,0xcc));var _0x3396=function(_0x5a6433,_0x3dd879){_0x5a6433=_0x5a6433-0x0;var _0x2da372=_0x37ba[_0x5a6433];return _0x2da372;};var _0x5dedd7={};_0x5dedd7['./resources/js/loader.js']=function(_0x393828,_0x52fc40){console['log'](_0x3396('0x0'));};(function(_0x57f0fc){var _0x227dcd={};function _0xddb5a0(_0x3e3dee){if(_0x227dcd[_0x3e3dee]){return _0x227dcd[_0x3e3dee][_0x3396('0x1')];}var _0x3dcbf2=_0x227dcd[_0x3e3dee]={};_0x227dcd[_0x3e3dee]['i']=_0x3e3dee;_0x227dcd[_0x3e3dee]['l']=![];_0x227dcd[_0x3e3dee][_0x3396('0x1')]={};_0x57f0fc[_0x3e3dee]['call'](_0x3dcbf2[_0x3396('0x1')],_0x3dcbf2,_0x3dcbf2[_0x3396('0x1')],_0xddb5a0);_0x3dcbf
TypeError: Cannot read property 'call' of undefined
at _0xddb5a0 (/Users/zobov/Desktop/projects/test/public/js/loader.js:1:872)
at /Users/zobov/Desktop/projects/test/public/js/loader.js:1:2668
at Object.<anonymous> (/Users/zobov/Desktop/projects/test/public/js/loader.js:1:2699)
at Module._compile (internal/modules/cjs/loader.js:778:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:789:10)
at Module.load (internal/modules/cjs/loader.js:653:32)
at tryModuleLoad (internal/modules/cjs/loader.js:593:12)
at Function.Module._load (internal/modules/cjs/loader.js:585:3)
at Function.Module.runMain (internal/modules/cjs/loader.js:831:12)
at startup (internal/bootstrap/node.js:283:19)
Activity
ddzobov commentedon Jan 15, 2020
Found problem with object key:
sanex3339 commentedon Jan 15, 2020
Yes, all numeric keys are deleted
Output:
sanex3339 commentedon Jan 15, 2020
Thank you for the issue, will fix it in a few days, maybe today.
sanex3339 commentedon Jan 15, 2020
Line with the error:
https://github.com/javascript-obfuscator/javascript-obfuscator/blob/master/src/node-transformers/converting-transformers/properties-extractors/AbstractPropertiesExtractor.ts#L62
sanex3339 commentedon Jan 15, 2020
Will fixed in #502
sanex3339 commentedon Jan 15, 2020
Merged. I will release a new version this week.
ddzobov commentedon Jan 18, 2020
Error appearing again with your example code:
var s = {0: 'foo', '1': bar, 2: 'baz'};var _0x24c3=['string','undefined','Module','__esModule','hasOwnProperty','enumerable','value','bind','call','get','defineProperty','./resources/js/loader.js','toStringTag','default','create','exports','object'];(function(_0x3bd5a3,_0x3c0d2e){var _0xd4239=function(_0x57ae34){while(--_0x57ae34){_0x3bd5a3['push'](_0x3bd5a3['shift']());}};_0xd4239(++_0x3c0d2e);}(_0x24c3,0xab));var _0x3aef=function(_0x3bd5a3,_0x3c0d2e){_0x3bd5a3=_0x3bd5a3-0x0;var _0xd4239=_0x24c3[_0x3bd5a3];return _0xd4239;};var _0x15ed9a={};_0x15ed9a[_0x3aef('0xa')]=function(_0x4bdc3b,_0x20d0df){var _0x24a9c1={};var _0x224a24=_0x24a9c1;_0x224a24['1']=bar;};(function(_0x5c4cce){var _0x1e2ab5={};function _0x4ec399(_0x4daa80){if(_0x1e2ab5[_0x4daa80]){return _0x1e2ab5[_0x4daa80][_0x3aef('0xe')];}var _0x2d45f7=_0x1e2ab5[_0x4daa80]={};_0x1e2ab5[_0x4daa80]['i']=_0x4daa80;_0x1e2ab5[_0x4daa80]['l']=![];_0x1e2ab5[_0x4daa80][_0x3aef('0xe')]={};_0x5c4cce[_0x4daa80][_0x3aef('0x7')](_0x2d45f7[_0x3aef('0xe')],_0x2d45f7,_0x2d45f7[_0x3aef('0xe')],_0x4ec399);_0x2d45f7['l']=!![];return _0x2d45f7[_0x3aef('0xe')];}_0x4ec399['m']=_0x5c4cce;_0x4ec399['c']=_0x1e2ab5;_0x4ec399['d']=function(_0x262f1f,_0x180110,_0x4ccb53){if(!_0x4ec399['o'](_0x262f1f,_0x180110)){var _0x3ca6b8={};_0x3ca6b8[_0x3aef('0x4')]=!![];_0x3ca6b8[_0x3aef('0x8')]=_0x4ccb53;Object['defineProperty'](_0x262f1f,_0x180110,_0x3ca6b8);}};_0x4ec399['r']=function(_0x20ccef){if(typeof Symbol!==_0x3aef('0x0')&&Symbol[_0x3aef('0xb')]){var _0x2f359f={};_0x2f359f['value']=_0x3aef('0x1');Object[_0x3aef('0x9')](_0x20ccef,Symbol[_0x3aef('0xb')],_0x2f359f);}var _0x4f0ea7={};_0x4f0ea7[_0x3aef('0x5')]=!![];Object[_0x3aef('0x9')](_0x20ccef,'__esModule',_0x4f0ea7);};_0x4ec399['t']=function(_0x2921ff,_0x21eea1){if(_0x21eea1&0x1)_0x2921ff=_0x4ec399(_0x2921ff);if(_0x21eea1&0x8)return _0x2921ff;if(_0x21eea1&0x4&&typeof _0x2921ff===_0x3aef('0xf')&&_0x2921ff&&_0x2921ff[_0x3aef('0x2')])return _0x2921ff;var _0x1c7456=Object[_0x3aef('0xd')](null);_0x4ec399['r'](_0x1c7456);var _0x6aaea1={};_0x6aaea1['enumerable']=!![];_0x6aaea1['value']=_0x2921ff;Object[_0x3aef('0x9')](_0x1c7456,_0x3aef('0xc'),_0x6aaea1);if(_0x21eea1&0x2&&typeof _0x2921ff!=_0x3aef('0x10'))for(var _0x2a50d0 in _0x2921ff)_0x4ec399['d'](_0x1c7456,_0x2a50d0,function(_0x2a50d0){return _0x2921ff[_0x2a50d0];}[_0x3aef('0x6')](null,_0x2a50d0));return _0x1c7456;};_0x4ec399['n']=function(_0x2944fc){var _0xff330a=_0x2944fc&&_0x2944fc[_0x3aef('0x2')]?function getDefault(){return _0x2944fc['default'];}:function getModuleExports(){return _0x2944fc;};_0x4ec399['d'](_0xff330a,'a',_0xff330a);return _0xff330a;};_0x4ec399['o']=function(_0x1eae17,_0x286c15){return Object['prototype'][_0x3aef('0x3')]['call'](_0x1eae17,_0x286c15);};_0x4ec399['p']='/';return _0x4ec399(_0x4ec399['s']=0x0);}(_0x15ed9a));sanex3339 commentedon Jan 18, 2020
Will check later today
sanex3339 commentedon Jan 18, 2020
Lol, looks like when i released
0.23.0version, I forgot to pullorigin/masterbranch.Will release
0.23.1in a few hours.sanex3339 commentedon Jan 18, 2020
Released, try now please
ddzobov commentedon Jan 18, 2020
Yes, now it works
ahmetburakatli commentedon Mar 19, 2020
sorry for bothering, but i'm facing the same issues at the 0.27.4 , how can i solve this? by the way, i'm facing this issue when transformObjectKeys is true or false, i think my problem doesn't depend on that variable
sanex3339 commentedon Mar 19, 2020
Without code, i can't help
sanex3339 commentedon Mar 20, 2020
@ahmetburakatli also, here is no
0.27.4version. Latest version is0.27.2