From d8599806c451413aec13da16a1c54edfa0840882 Mon Sep 17 00:00:00 2001 From: "Paulo F. Oliveira" Date: Tue, 11 Feb 2020 10:19:01 +0000 Subject: [PATCH] Fix error detected by dialyzer Issued under OTP 22.2 This is a "double" fix: 1. it seems to me that ?error (in this case) requires string as first arg. 2. F (from the arguments) was clashing with F from the ?error macro, which caused a Guard test ... can never succeed dialyzer warning --- src/jsx_decoder.erl | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/jsx_decoder.erl b/src/jsx_decoder.erl index b4e97be..9e0d205 100644 --- a/src/jsx_decoder.erl +++ b/src/jsx_decoder.erl @@ -695,13 +695,13 @@ unescape(<<$u, F, A, B, C, ?rsolidus, $u, G, X, Y, Z, Rest/binary>>, Handler, Ac Low = erlang:list_to_integer([$d, X, Y, Z], 16), Codepoint = (High - 16#d800) * 16#400 + (Low - 16#dc00) + 16#10000, string(Rest, Handler, [Acc, <>], Stack, Config); -unescape(<<$u, F, A, B, C, ?rsolidus, $u, W, X, Y, Z, Rest/binary>>, Handler, Acc, Stack, Config) +unescape(<<$u, F0, A, B, C, ?rsolidus, $u, W, X, Y, Z, Rest/binary>>, Handler, Acc, Stack, Config) when (A == $8 orelse A == $9 orelse A == $a orelse A == $b orelse A == $A orelse A == $B), - (F == $d orelse F == $D), + (F0 == $d orelse F0 == $D), ?is_hex(B), ?is_hex(C), ?is_hex(W), ?is_hex(X), ?is_hex(Y), ?is_hex(Z) -> case Config#config.strict_utf8 of - true -> ?error(<<$u, $d, A, B, C, ?rsolidus, $u, W, X, Y, Z, Rest/binary>>, Handler, Acc, Stack, Config); + true -> ?error(string, <<$u, $d, A, B, C, ?rsolidus, $u, W, X, Y, Z, Rest/binary>>, Handler, Acc, Stack, Config); false -> string(Rest, Handler, [Acc, <<16#fffd/utf8>>, <<16#fffd/utf8>>], Stack, Config) end; unescape(<<$u, F, A, B, C, ?rsolidus, Rest/binary>>, Handler, Acc, Stack, Config)