这次更新没有新功能。只是一次发布前的角落清扫。
我们攒了九个已知漏洞,每次路过都假装没看见。大部分都很小,不值一提。但有一个不小——它藏在一个按钮背后。
场景是这样的:当你导入一个编辑器里已经存在的文件——完全相同的字节——系统会问你,是共用已有文件,还是创建一份独立副本,让你可以随意编辑。选“独立副本”时,你的预期很明确:拿到属于自己的那份文件,改它、删它,不影响任何其他东西。
大部分时候它确实按预期运行。但副本的内部命名方式埋了一颗雷。系统通过计算已有副本数量来取名——“副本2”“副本3”,依次往后排。问题出在删除操作之后。
假设你创建了三份副本,删掉了中间那份,然后又创建了一份新的。系统一数:目前存在两份,那我就是第三号。可惜三号名字已经被占用了。编辑器检测到命名冲突后,静静地保留了旧文件,然后把你新创建的场景指向了这个旧文件。你以为自己拿到了一份干干净净的副本,实际上你在和原始文件共享同一份内容。而你真正创建的那份新副本,被遗弃在磁盘上,没有任何东西指向它。
事后你编辑“自己的”副本,其实连原始文件一起改了。
没有崩溃。没有任何警告。这才是最可怕的那类漏洞。
修复方案很简单:别再数数了。直接检查哪些名字已经被占用,挑出第一个可用的。这样一来,哪怕中间删过文件,新副本永远能拿到一个属于自己的、独一无二的身份。此外我们还做了一件事:让编辑器在日志里大声喊出来——万一将来又有两个文件撞车,它会扯着嗓子嚷嚷,而不是悄无声息地丢掉其中一个。
吵闹的漏洞,比沉默的漏洞好一万倍。
剩下的问题就小多了。有个菜单元素在被拖拽的那一帧里会跳一下——拖拽起点记录的是元素保存时的位置,而不是屏幕显示的位置。还有个倒计时数字,在跳出来之前空白了整整一帧。结束画面留了一段根本没人看得见的计时延迟,我们也顺手修掉了——反正那个画面从头到尾都是漆黑一片。货真价实的漏洞,只是肉眼完全看不出来。
至于那份被我们标记为最高优先级的问题?我们正准备动手,赫然发现两周前的一次重新编译已经把它悄悄修好了。我们换了三种方式反复确认,才敢相信这是真的。从清单上划掉一项,原因是它真的彻底消失了——那种满足感,几乎和亲手修掉一个漏洞不相上下。
这些都不是开发工具过程中光鲜亮丽的部分。但一个工具“到底能不能用”,本质上就取决于这些细节。我们宁愿花整整一周去夯实地基,也不想在一张满是窟窿的地板上继续往上堆功能。
下一篇开发日志,我们会回到让故事诞生的那个模块。如果你在使用中碰到了任何不对劲的地方——尤其是那种沉默的、让你隐隐发毛却说不出哪里怪的问题——来X上告诉我们,Discord也行,或者直接发邮件。更多内容,很快回来。
热门跟贴