kisshang1993 / NGA-BBS-Script

NGA论坛增强脚本,给你完全不一样的浏览体验
MIT License
331 stars 31 forks source link

[Bug] 脚本导入设置功能序列化错误 #20

Closed Chigusa0w0 closed 3 years ago

Chigusa0w0 commented 3 years ago

摘要: 本脚本在用户导入设置时未能正确序列化黑名单列表和标签列表数据。本问题将导致不合法的序列化数据存入设置 LocalStorage,进而在用户重载页面后引发脚本全局错误,使脚本完全失效。

版本: 3.5

环境: Edge 86 on Windows 10 64-bit, Tampermonkey v4.11

详情: 在存入经解析的导入设置时,脚本会先解析设置字符串再将内容存入对应的 LocalStorage 条目内。脚本 https://github.com/kisshang1993/NGA-BBS-Script/blob/350d80ebacfe3dd4a4c274bb7a44f5466ed987c9/Script.js#L1118-L1119https://github.com/kisshang1993/NGA-BBS-Script/blob/350d80ebacfe3dd4a4c274bb7a44f5466ed987c9/Script.js#L1122-L1123 均使用了 join 函数序列化数据数据,该数据在未经验证的情况下被立即写入 LocalStorage 条目。这可能导致序列化结果为逗号分隔的 "[object Object]" 的字符串覆盖现有设置。

由于上述字符串并不为合法的 Json 数据,在用户重载页面后,使用 JSON.parse 功能解析该数据将引发 Json 处理异常。特别地,对于标签列表,https://github.com/kisshang1993/NGA-BBS-Script/blob/350d80ebacfe3dd4a4c274bb7a44f5466ed987c9/Script.js#L159-L162 及后续回落流程也无法正确处理该无效数据,这会导致进一步的异常抛出。从而使脚本出现全局错误完全失效。只有在用户手动删除 LocalStorage 中对应的问题条目后脚本方可恢复正常使用。

附: https://github.com/kisshang1993/NGA-BBS-Script/blob/350d80ebacfe3dd4a4c274bb7a44f5466ed987c9/Script.js#L149-L150 可能存在逻辑错误(漏写_bakhttps://github.com/kisshang1993/NGA-BBS-Script/blob/350d80ebacfe3dd4a4c274bb7a44f5466ed987c9/Script.js#L443-L446 未验证用户输入

以上两处可能的问题在本 Issue 对应的 PR 中修复

kisshang1993 commented 3 years ago

感谢问题反馈 问题已确认, 是由于3.3数据结构变化而遗漏了导入部分的数据处理而导致的问题, 此问题将在下个版本修复 _bak的确是逻辑错误, 是3.3升级版本时备份一份配置防止自动转换数据格式失败, 不过此行代码已经无效, 故下个版本一并删除