
导读:本文讲述的一个女孩子,她并没有刻意去寻找漏洞。她只是在做一件很普通和平常的事情,却意外发现了问题并解决了它。我们需要更多这样的正能量故事。
请注意,这并非 Linux 内核中的 bug,而是 Enlightenment 窗口管理器 E16 自 2006 年以来就存在的一个老问题。发现并修复它时,当事人 卡米拉·谢夫奇克(Kamila Szewczyk) 年仅21岁,而当时这个漏洞诞生时,她还不到一岁。
如今的卡米拉是德国萨尔兰大学的一名研究生。她开着辆比大多数同学都老的窗式汽车,这本身就挺有意思。但更令人印象深刻的是,她将 Linux 作为日常系统,并且深入到几十年前的代码库中,发现并修复了这个沉睡近二十年的错误。
Enlightenment E16 是什么来头?

对于不熟悉的用户来说,Enlightenment 是 Linux 上一个历史悠久的窗口管理器,负责绘制和管理屏幕上的窗口界面。它于 1997 年首次发布,比当今大部分 Linux 用户都要“年长”。卡米拉使用的 E16 版本于 1999 年推出,曾以其高度可定制性和出色的视觉效果闻名,而当时大多数 Linux 桌面环境都更加注重实用性。
Enlightenment 的知名度不如 KDE 或 GNOME,但它拥有一小群忠实用户,并在一些小众发行版如 Bodhi Linux(其默认桌面 Moksha 正是 Enlightenment 的分支)中得以延续。后来,团队使用名为 EFL 的新框架对项目进行了全面重写,演变为功能更全的 E17。但一部分社区成员,包括卡米拉,依然选择并维护着经典的 E16。
一次意外的桌面死机与漏洞发现
她当时并非在查找漏洞,而是在做一件很普通的事:准备研究生课程的讲义幻灯片。当她用 Atril 文档查看器打开一个由 LaTeX 排版的 PDF 文件时,整个电脑桌面突然卡死了。

这并非偶然故障。问题可以稳定复现,这对开发者来说既是挑战也是线索。于是,她开始了调查。
通过深入分析代码,卡米拉发现问题根源在于 E16 处理过长文件名(具体是窗口标题)的方式。她通过调试工具获取了调用栈信息:
#0 __strcmp_evex ()
#1 __imlib_hash_find (hash=0x55bc9c111420, key="\001\001\001\001\001") object.c:172
#2 __imlib_font_cache_glyph_get (fn=..., index=0) font_draw.c:30
#3 __imlib_font_get_next_glyph (... utf8="Kickoff.pdf — Introduction...") font_main.c:218
#4 __imlib_font_query_advance (...) font_query.c:89
#5 imlib_get_text_advance (...) api_text.c:231
#6 Efont_extents (...) text_ift.c:87
#7 _ift_TextSize (...) text_ift.c:156
#8 TextstateTextFitMB (ts=..., textwidth_limit=291) text.c:350
#9 TextstateTextFit (...) text.c:559
#10 TextstateTextDraw (... text="Kickoff.pdf — Introduction...") text.c:638
#11 ITApply (...) iclass.c:930
#12 ITApply (...) iclass.c:884
#13 _BorderWinpartITclassApply (ewin=..., i=2, force=1) borders.c:179
#14 EwinBorderUpdateInfo (ewin=...) borders.c:300
#15 EwinChangesProcess (...) ewins.c:2141
#16 EwinEventPropertyNotify (ewin=..., ev=...) ewins.c:1438
...
#21 main (...) main.c:320
她发现,当窗口标题过长、需要被截断显示时,负责截断的算法缺少迭代次数限制。这导致了一个无限循环,最终使整个桌面失去响应。这个漏洞自 2006 年起便潜伏在代码中,等待特定的条件触发。
卡米拉随后修复了这个问题,并将修复方案和详细分析发布在了自己的博客上,后续也计划向原代码库提交合并请求。
为什么这个故事很重要?
表面上看,这只是关于一个鲜为人知的窗口管理器的小众故事。但仔细想想,它蕴含的意义远不止于此。
卡米拉出生于 2004 年。她修复的那个漏洞在她一两岁时就已经存在。她长大、读大学、成为研究生和教师,而那个漏洞一直静静地躺在由少数爱好者维护的代码库里。最终,是一位真正将 E16 作为日常工具的用户偶然发现了它,并出于责任心将其修复。
这其实体现了真正的 开源精神。它不涉及大公司、漏洞赏金或复杂的 CVE 申报流程,而仅仅是一个人、一台电脑、一个死机的桌面,以及想要弄明白原因的好奇心。有些人已经维护这个代码库几十年,而他们的用户中,总会有人发现一些被忽视的问题,默默改进软件,然后继续自己的工作。
这不是一件小事,这正是开源协作文化中至关重要、充满人情味的一环。如果你想了解更多这样充满极客精神的故事和技术讨论,欢迎来到 云栈社区 交流分享。
作者:场长
参考:
https://iczelia.net/posts/e16-20-year-old-bug
https://www.theregister.com/2026/04/15/enlightenment_e16_bug_patched