4 个版本
0.0.4 | 2024年6月18日 |
---|---|
0.0.3 | 2024年6月14日 |
0.0.2 | 2024年6月13日 |
0.0.1 | 2024年6月12日 |
#561 in 解析实现
185KB
3.5K SLoC
cbor-edn
处理 CBOR 诊断符号(EDN)的工具
该包使用的解析器是一个由 ABNF(在 EDN 规范中使用的 ABNF)构建的 PEG(解析表达式语法)解析器。
该包的主要类型不仅表示解析项,还包括所有不影响 CBOR 转换的部分(空白字符、注释和可选的尾部逗号)以及可能或可能影响 CBOR 的选择(编码指示器)。这允许进行详细操作(例如在注释内部)和延迟处理面向应用的字面量。
解析的值在序列化后应来回转换到相同的表示形式。大多数对值的操作将确保它们的序列化输出也可以从内部格式来回转换到 EDN 序列化并再次回到内部格式,但并非所有操作都能提供这种功能。(例如,删除所有可选的逗号同时保留注释将使注释是在逗号之前还是之后之前的区别变得无法区分)。
正确的解析不能保证值也可以编码到 CBOR 中。虽然有些方面可以在解析时处理而没有处理(例如标签数字超过可编码数字空间),但有些情况在没有进一步上下文或权限的情况下无法由库处理(例如需要应用上下文的 e'' 面向应用的字面量或需要相对文件引用的 ref'' 面向应用的字面量,访问这些文件可能涉及文件或网络访问)。因此,通过各种 .to_cbor()
方法将值转换为 CBOR 是固有的有风险的。
完整性
已知的限制包括
-
对检查和构造 CBOR 项的支持不完整。最常见类型可以构造;通过解析手工制作的 EDN/CBOR 和使用生成的序列化,可以构造或检查更特殊的项。
-
附加注释和空白字符的选项有限;[
Item::set_comment()
] 目前是获取数据的唯一方式(除了再次解析手工制作的 EDN 外)。 -
缩进 EDN 在简单情况下有效,但在更复杂的情况下(如溢出有限的宽度、长键或哈希注释)很容易破坏视觉结果。
安全
此库不会以令人惊讶的方式访问网络或文件系统,并且其自身不会危及内存安全。使用它的主要威胁不是资源限制:即使没有压缩的CBOR,过深的嵌套也容易导致栈溢出,浮点数转换在时间上也很昂贵。除非限制每个用户的资源使用量,否则建议限制不受信任的用户输入长度,以避免栈溢出。
该库尚未进行内部或外部审计。根据许可协议 状态,软件按“原样”提供。
命令行应用程序
一些功能可通过此库包含的二进制文件访问
$ echo "[1, 2, 'x', ip'2001:db1::/64']" | cbor-edn diag2diag
[1, 2, 'x', ip'2001:db1::/64']
许可证:MIT OR Apache-2.0
依赖关系
~6–18MB
~264K SLoC