From 4ba8c4d57e9d4684bd8a71717b2c1c0327a03c69 Mon Sep 17 00:00:00 2001 From: alisdair sullivan Date: Tue, 26 Jul 2011 13:46:24 -0700 Subject: [PATCH] stricter rejection of unicode non-characters --- src/jsx_decoder.hrl | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/src/jsx_decoder.hrl b/src/jsx_decoder.hrl index 5f19f6b..1bb8331 100644 --- a/src/jsx_decoder.hrl +++ b/src/jsx_decoder.hrl @@ -540,14 +540,16 @@ low_surrogate(<>, Stack, Opts, String, [C, B, A], High) when ?is_hex(D) -> case erlang:list_to_integer([A, B, C, D], 16) of X when X >= 16#dc00, X =< 16#dfff -> - string(Rest, - Stack, - Opts, - <> - ) + V = surrogate_to_codepoint(High, X), + case V rem 16#10000 of + X when X == 16#fffe; X == 16#ffff -> + {error, {badjson, <>}} + ; _ -> + string(Rest, Stack, Opts, <>) + end %% not a low surrogate, bad bad bad - ; X -> - {error, {badjson, <>}} + ; _ -> + {error, {badjson, <>}} end; low_surrogate(<>, Stack, Opts, String, Acc, High) when ?is_hex(S) ->