我刚刚在重新整理我的Encoding::FixLatin Perl模块,以处理超长的UTF-8字节序列,并将其转换为最短的标准格式。

我的问题很简单:“这是个坏主意吗?”

许多来源(包括this RFC)建议将任何超长的UTF-8都视为错误并予以拒绝。他们告诫不要“幼稚的实现”,并给我留下这些东西本来就不安全的印象。

由于我的模块的整个目的是使用混合编码来清理混乱的数据文件,并将其转换为干净的utf8,这似乎又是我可以清理的一件事,因此应用程序层不必处理它。我的代码本身不关心结果字符可能具有的任何语义含义,它只是将它们转换为规范化形式。

我错过了什么吗?我有没有考虑过隐藏的危险?

最佳答案

是的,这是一个坏主意。

也许检查了这些混乱数据文件之一中的某些数据,以确保其中不包含危险的ASCII字符序列。

导致许多问题的规范示例:'\xC0\xBCscript>'。将超长序列“修复”为纯ASCII <,您不小心创建了一个安全漏洞。

从未有工具出于任何合法目的而产生加长。如果您要修复混合编码文件,则应考虑碰到一个文件,以为您误解了编码。

08-03 18:43