以安全,生锈的方式切片XML字符串

问题描述 投票:1回答:1

我正在解析XML,我们发现XML解析器花了很多时间来不必要地检查UTF兼容性。例如,假设我正在解析类似于:

<root><ß❤></ß❤></root>

在火焰图中,我们花了大量时间检查rootß❤是有效的UTF。

避免此检查的一种方法是先决条件,即XML输入是有效的Rust &str。因为是这样,并且分隔符是基于ASCII的,所以从理论上讲,在任意两个ASCII分隔符之间进行切片应产生有效的&str,我们将不对其进行检查。

这是一个安全的假设吗?甚至更好的是,是否有一个箱子做类似的事情(例如CSV)?

xml unicode rust unsafe
1个回答
0
投票

[我想,大多数XML解析器将在整个输入流级别上检查有效的UTF-8编码,然后在更高级别上进一步检查“ root”和“ß❤”是有效的XML名称。 。您肯定会发现这些检查的成本很高并且有进行优化的机会,这是正确的。并且这些机会之一可能是利用以下事实:UTF-8编码原理确保八位位组x3C永远不会出现在UTF-8流中,除非以字符“ 您还可以通过完全删除一些检查来降低解析成本。不能检测到所有错误的解析器不符合W3C标准,但这并不能使它失效。但是,请注意不要以性能为代价而着迷于性能:对于95%的用户,产生良好的错误消息可能至少值得10%的性能开销。

© www.soinside.com 2019 - 2024. All rights reserved.