diff options
author | Evgeniy Khramtsov <ekhramtsov@process-one.net> | 2017-05-23 10:43:26 +0300 |
---|---|---|
committer | Evgeniy Khramtsov <ekhramtsov@process-one.net> | 2017-05-23 10:43:26 +0300 |
commit | e93762a720ee7b29d918e92e36b0ca640ed29821 (patch) | |
tree | c9b049f461f3da3bff6b072d6e74c633191e3cc7 /src/misc.erl | |
parent | Validate all certfiles on startup (diff) |
Deprecate misc:encode_base64/1 and misc:decode_base64/1
Diffstat (limited to 'src/misc.erl')
-rw-r--r-- | src/misc.erl | 86 |
1 files changed, 14 insertions, 72 deletions
diff --git a/src/misc.erl b/src/misc.erl index b8bbe0e48..604a458af 100644 --- a/src/misc.erl +++ b/src/misc.erl @@ -28,14 +28,18 @@ -module(misc). %% API --export([tolower/1, term_to_base64/1, base64_to_term/1, - decode_base64/1, encode_base64/1, ip_to_list/1, +-export([tolower/1, term_to_base64/1, base64_to_term/1, ip_to_list/1, hex_to_bin/1, hex_to_base64/1, expand_keyword/3, atom_to_binary/1, binary_to_atom/1, tuple_to_binary/1, l2i/1, i2l/1, i2l/2, expr_to_term/1, term_to_expr/1, encode_pid/1, decode_pid/2, compile_exprs/2, join_atoms/2, try_read_file/1]). +%% Deprecated functions +-export([decode_base64/1, encode_base64/1]). +-deprecated([{decode_base64, 1}, + {encode_base64, 1}]). + -include("logger.hrl"). -include_lib("kernel/include/file.hrl"). @@ -58,83 +62,21 @@ term_to_base64(Term) -> -spec base64_to_term(binary()) -> {term, term()} | error. base64_to_term(Base64) -> - case catch binary_to_term(decode_base64(Base64), [safe]) of - {'EXIT', _} -> - error; - Term -> - {term, Term} + try binary_to_term(base64:decode(Base64), [safe]) of + Term -> {term, Term} + catch _:badarg -> + error end. -spec decode_base64(binary()) -> binary(). decode_base64(S) -> - case catch binary:last(S) of - C when C == $\n; C == $\s -> - decode_base64(binary:part(S, 0, byte_size(S) - 1)); - _ -> - decode_base64_bin(S, <<>>) - end. - -take_without_spaces(Bin, Count) -> - take_without_spaces(Bin, Count, <<>>). - -take_without_spaces(Bin, 0, Acc) -> - {Acc, Bin}; -take_without_spaces(<<>>, _, Acc) -> - {Acc, <<>>}; -take_without_spaces(<<$\s, Tail/binary>>, Count, Acc) -> - take_without_spaces(Tail, Count, Acc); -take_without_spaces(<<$\t, Tail/binary>>, Count, Acc) -> - take_without_spaces(Tail, Count, Acc); -take_without_spaces(<<$\n, Tail/binary>>, Count, Acc) -> - take_without_spaces(Tail, Count, Acc); -take_without_spaces(<<$\r, Tail/binary>>, Count, Acc) -> - take_without_spaces(Tail, Count, Acc); -take_without_spaces(<<Char:8, Tail/binary>>, Count, Acc) -> - take_without_spaces(Tail, Count-1, <<Acc/binary, Char:8>>). - -decode_base64_bin(<<>>, Acc) -> - Acc; -decode_base64_bin(Bin, Acc) -> - case take_without_spaces(Bin, 4) of - {<<A, B, $=, $=>>, _} -> - <<Acc/binary, (d(A)):6, (d(B) bsr 4):2>>; - {<<A, B, C, $=>>, _} -> - <<Acc/binary, (d(A)):6, (d(B)):6, (d(C) bsr 2):4>>; - {<<A, B, C, D>>, Tail} -> - Acc2 = <<Acc/binary, (d(A)):6, (d(B)):6, (d(C)):6, (d(D)):6>>, - decode_base64_bin(Tail, Acc2); - _ -> - <<"">> + try base64:mime_decode(S) + catch _:badarg -> <<>> end. -d(X) when X >= $A, X =< $Z -> X - 65; -d(X) when X >= $a, X =< $z -> X - 71; -d(X) when X >= $0, X =< $9 -> X + 4; -d($+) -> 62; -d($/) -> 63; -d(_) -> 63. - - -%% Convert Erlang inet IP to list -spec encode_base64(binary()) -> binary(). encode_base64(Data) -> - encode_base64_bin(Data, <<>>). - -encode_base64_bin(<<A:6, B:6, C:6, D:6, Tail/binary>>, Acc) -> - encode_base64_bin(Tail, <<Acc/binary, (e(A)):8, (e(B)):8, (e(C)):8, (e(D)):8>>); -encode_base64_bin(<<A:6, B:6, C:4>>, Acc) -> - <<Acc/binary, (e(A)):8, (e(B)):8, (e(C bsl 2)):8, $=>>; -encode_base64_bin(<<A:6, B:2>>, Acc) -> - <<Acc/binary, (e(A)):8, (e(B bsl 4)):8, $=, $=>>; -encode_base64_bin(<<>>, Acc) -> - Acc. - -e(X) when X >= 0, X < 26 -> X + 65; -e(X) when X > 25, X < 52 -> X + 71; -e(X) when X > 51, X < 62 -> X - 4; -e(62) -> $+; -e(63) -> $/; -e(X) -> exit({bad_encode_base64_token, X}). + base64:encode(Data). -spec ip_to_list(inet:ip_address() | undefined | {inet:ip_address(), inet:port_number()}) -> binary(). @@ -160,7 +102,7 @@ hex_to_bin([H1, H2 | T], Acc) -> -spec hex_to_base64(binary()) -> binary(). hex_to_base64(Hex) -> - encode_base64(hex_to_bin(Hex)). + base64:encode(hex_to_bin(Hex)). -spec expand_keyword(binary(), binary(), binary()) -> binary(). expand_keyword(Keyword, Input, Replacement) -> |