LiteLDev / LeviLamina

A lightweight, modular and versatile mod loader for Minecraft Bedrock Edition, formerly known as LiteLoaderBDS
https://levimc.org/software/levilamina
GNU Lesser General Public License v3.0
1.14k stars 117 forks source link

LLSE在nodejs插件加载的有关JavaScript代码内意外的组合形成JavaScript中的反转义字符 #1232

Closed harry-xi closed 1 year ago

harry-xi commented 1 year ago

异常模块

ScriptEngine (脚本引擎)

操作系统

Windows 10

LiteLoader 版本

LiteLoaderBDS 2.12.4

BDS 版本

1.19.73.02(ProtocolVersion 575)

发生了什么?

image 在该部分代码中 若entryScriptPath变量等内部组成的意外出现的JavaScript转义字符串,可能带来意外的运行结果。 下面的复现步骤等针对的是在该代码部分的entryScriptPath变量内出现“无效的Unicode转义序列”。

复现此问题的步骤

在nodejs文件夹下创建一个可与\构成“无效的Unicode转义序列”(如此处测试使用的uuuu)为名称的nodejs插件,然后启动bds,这个插件应该会在加载时发生异常:[SyntaxError: Invalid Unicode escape sequence]

下附的压缩包是下面日志和插件列表所对应的nodejs文件夹 nodejs.zip

JavaScritp中 \uXXXX格式的转义字符串来表示U+0000 和 U+FFFF 之间的 Unicode 码位 当此处路径中的文件夹名以u作为开始并且后续字符串不能作为合法\uXXXX中的XXXX时 此处的部分会引发异常:[SyntaxError: Invalid Unicode escape sequence]

有关的日志/输出

19:40:24 INFO [LiteLoader] 加载 Node.js 插件...
test
19:40:24 INFO [LiteLoader] Node.js 插件 <test> 已加载。
test
19:40:24 INFO [LiteLoader] Node.js 插件 <u004c> 已加载。
node:embedder_main_2:2
})({}, __LLSE_PublicRequire, __LLSE_PublicModule, 'D:\Docu.Haiyue\Minecraft\Server\LLforTest\plugins\nodejs\uuuu\index.js', 'plugins/nodejs/uuuu/');
                                                                                                           ^^^^^^

[SyntaxError: Invalid Unicode escape sequence]
19:40:24 INFO [LiteLoader] NodeJs plugin uuuu exited.
19:40:24 ERROR [LiteLoader] Fail to load plugins\nodejs\uuuu!
19:40:24 INFO [LiteLoader] 2 个 Node.js 插件已加载。

插件列表

ll list
19:40:51 INFO [Server] 插件列表 [7]
19:40:51 INFO [Server] - PermissionAPI [v2.9.0] (PermissionAPI.dll)
19:40:51 INFO [Server]   Builtin & Powerful permission API for LiteLoaderBDS
19:40:51 INFO [Server] - ScriptEngine-QuickJs [v2.12.4] (LiteLoader.Js.dll)
19:40:51 INFO [Server]   Javascript ScriptEngine for LiteLoaderBDS
19:40:51 INFO [Server] - ScriptEngine-Python [v2.12.4] (LiteLoader.Python.dll)
19:40:51 INFO [Server]   Python ScriptEngine for LiteLoaderBDS
19:40:51 INFO [Server] - ScriptEngine-NodeJs [v2.12.4] (LiteLoader.NodeJs.dll)
19:40:51 INFO [Server]   Node.js ScriptEngine for LiteLoaderBDS
19:40:51 INFO [Server] - test [v1.0.0] (test)
19:40:51 INFO [Server]
19:40:51 INFO [Server] - u004c [v1.0.0] (u004C)
19:40:51 INFO [Server]
19:40:51 INFO [Server] - ScriptEngine-Lua [v2.12.4] (LiteLoader.Lua.dll)
19:40:51 INFO [Server]   Lua ScriptEngine for LiteLoaderBDS
harry-xi commented 1 year ago

简单的对entryScriptPath内的\进行替换有效,但是不确定是否有其他副作用

    entryScriptPath = ReplaceStr(entryScriptPath, "\\", "/");