sml2h3 / ast_tools

ast基础框架-基于babel

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

TypeError: Cannot read properties of null (reading 'left')

HenryWu01 opened this issue · comments

大佬您好,ast_tools 似乎对某里的 !226 脚本无法进行还原,出现如下错误:

PS C:\Users\Henry\ast_tools> node .\main.js   
发现存在控制流混淆的代码片段
C:\Users\Henry\ast_tools\libs\demo1\ControlFlowFix.js:48
            let args = types.isIdentifier(first_line.declarations[0].init.left) ? first_line.declarations[0].init.left : types.isIdentifier(first_line.declarations[0].init.right) ? first_line.declarations[0].init.right : null;
                                                                          ^

TypeError: Cannot read properties of null (reading 'left')
    at fix (C:\Users\Henry\ast_tools\libs\demo1\ControlFlowFix.js:48:75)
    at ForStatement (C:\Users\Henry\ast_tools\libs\demo1\ControlFlowFix.js:15:9)
    at NodePath._call (C:\Users\Henry\ast_tools\node_modules\@babel\traverse\lib\path\context.js:46:20)
    at NodePath.call (C:\Users\Henry\ast_tools\node_modules\@babel\traverse\lib\path\context.js:36:17)
    at NodePath.visit (C:\Users\Henry\ast_tools\node_modules\@babel\traverse\lib\path\context.js:82:31)
    at TraversalContext.visitQueue (C:\Users\Henry\ast_tools\node_modules\@babel\traverse\lib\context.js:86:16)
    at TraversalContext.visitMultiple (C:\Users\Henry\ast_tools\node_modules\@babel\traverse\lib\context.js:61:17)
    at TraversalContext.visit (C:\Users\Henry\ast_tools\node_modules\@babel\traverse\lib\context.js:107:19)
    at traverseNode (C:\Users\Henry\ast_tools\node_modules\@babel\traverse\lib\traverse-node.js:18:17)
    at NodePath.visit (C:\Users\Henry\ast_tools\node_modules\@babel\traverse\lib\path\context.js:88:52)

Node.js v18.13.0

是的,这里有问题
image
1.对于图中的代码,ast_tools 没有考虑到第一个变量申明没有赋值的情况,这种情况下 first_line.declarations[0].init 是空。
image

2.对于switch 的条件表达,如果不是变量,而是表达式,这个判别式是没有 name 属性的,这种情况也没有考虑到
image

楼上的兄弟,226搞定了吗?