From 663fba1d7d4cf3242343fe5327ee5147d73a76a3 Mon Sep 17 00:00:00 2001 From: John Benediktsson Date: Tue, 28 Jul 2015 18:10:24 -0700 Subject: [PATCH] json.reader: fix segfault when parsing non-JSON documents. --- basis/json/reader/reader-tests.factor | 7 +++++-- basis/json/reader/reader.factor | 16 ++++++++++------ 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/basis/json/reader/reader-tests.factor b/basis/json/reader/reader-tests.factor index 798acbec8a..3bef14e9d3 100644 --- a/basis/json/reader/reader-tests.factor +++ b/basis/json/reader/reader-tests.factor @@ -1,5 +1,5 @@ -USING: hashtables io.streams.string json json.reader kernel -literals math strings tools.test ; +USING: hashtables io.streams.string json json.reader +json.reader.private kernel literals math strings tools.test ; IN: json.reader.tests { f } [ "false" json> ] unit-test @@ -76,3 +76,6 @@ ${ { 0xabcd } >string } [ " \"\\uaBCd\" " json> ] unit-test { 1/0. } [ "Infinity" json> ] unit-test { -1/0. } [ "-Infinity" json> ] unit-test { t } [ "NaN" json> fp-nan? ] unit-test + +[ "\n\n\n " json> ] +[ not-a-json-number? ] must-fail-with diff --git a/basis/json/reader/reader.factor b/basis/json/reader/reader.factor index 8028b507c8..5a8fe895a9 100644 --- a/basis/json/reader/reader.factor +++ b/basis/json/reader/reader.factor @@ -9,14 +9,18 @@ IN: json.reader number ] - } case ] dip ; + [ + append { + { "Infinity" [ 1/0. ] } + { "-Infinity" [ -1/0. ] } + { "NaN" [ 0/0. ] } + [ dup string>number [ nip ] [ not-a-json-number ] if* ] + } case + ] dip ; : json-expect ( token stream -- ) [ dup length ] [ stream-read ] bi* = [ json-error ] unless ; inline