我刚刚在重新整理我的Encoding::FixLatin Perl模块,以处理超长的UTF-8字节序列,并将其转换为最短的标准格式。
我的问题很简单:“这是个坏主意吗?”
许多来源(包括this RFC)建议将任何超长的UTF-8都视为错误并予以拒绝。他们告诫不要“幼稚的实现”,并给我留下这些东西本来就不安全的印象。
由于我的模块的整个目的是使用混合编码来清理混乱的数据文件,并将其转换为干净的utf8,这似乎又是我可以清理的一件事,因此应用程序层不必处理它。我的代码本身不关心结果字符可能具有的任何语义含义,它只是将它们转换为规范化形式。
我错过了什么吗?我有没有考虑过隐藏的危险?
最佳答案
是的,这是一个坏主意。
也许检查了这些混乱数据文件之一中的某些数据,以确保其中不包含危险的ASCII字符序列。
导致许多问题的规范示例:'\xC0\xBCscript>'
。将超长序列“修复”为纯ASCII <
,您不小心创建了一个安全漏洞。
从未有工具出于任何合法目的而产生加长。如果您要修复混合编码文件,则应考虑碰到一个文件,以为您误解了编码。