当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


erlang binary_to_term(Binary, Opts)用法及代码示例


binary_to_term(Binary, Opts) -> term() | {term(), Used}
OTP R13B04
类型:
Binary = ext_binary()
Opt = safe | used
Opts = [Opt]
Used = integer() >= 1

binary_to_term/1 相同,但采用以下选项:


safe

从不受信任的来源接收二进制文件时,请使用此选项。

启用后,它可以防止解码可用于攻击 Erlang 运行时的数据。如果接收到不安全数据,解码将失败并出现 badarg 错误。

这可以防止直接创建新原子、间接创建新原子(因为它们嵌入到某些结构中,例如进程标识符、refs 和 funs)以及创建新的外部函数引用。这些资源都不会被垃圾回收,因此未经检查的创建它们可能会耗尽可用内存。

> binary_to_term(<<131,100,0,5,"hello">>, [safe]).
** exception error: bad argument
> hello.
hello
> binary_to_term(<<131,100,0,5,"hello">>, [safe]).
hello
警告

safe 选项确保 Erlang 运行时安全地处理数据,但不能保证数据对您的应用程序是安全的。您必须始终验证来自不受信任来源的数据。如果二进制文件通过不受信任的来源存储或传输,您还应该考虑对其进行加密签名。


used

将返回值更改为 {Term, Used},其中 Used 是从 Binary 实际读取的字节数。

> Input = <<131,100,0,5,"hello","world">>.
<<131,100,0,5,104,101,108,108,111,119,111,114,108,100>>
> {Term, Used} = binary_to_term(Input, [used]).
{hello, 9}
> split_binary(Input, Used).
{<<131,100,0,5,104,101,108,108,111>>, <<"world">>}

失败:badarg(如果指定了 safe 并且解码了不安全数据)。

也可以看看term_to_binary/1, binary_to_term/1, 和 list_to_existing_atom/1.

相关用法


注:本文由纯净天空筛选整理自erlang.org大神的英文原创作品 binary_to_term(Binary, Opts) -> term() | {term(), Used}。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。