當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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}。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。