From edb2c97b1a74b62fe32c54152e64b26ae7978b3e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=B2=20Balzarotti?= Date: Tue, 28 Nov 2017 10:28:58 +0100 Subject: [PATCH] Int parsing - Proposed fix for issue#41 --- src/constructor.jl | 20 ++++++++++++++------ test/issue41.data | 3 +++ test/issue41.expected | 1 + test/runtests.jl | 3 +++ 4 files changed, 21 insertions(+), 6 deletions(-) create mode 100644 test/issue41.data create mode 100644 test/issue41.expected diff --git a/src/constructor.jl b/src/constructor.jl index c398462..72035cc 100644 --- a/src/constructor.jl +++ b/src/constructor.jl @@ -193,12 +193,20 @@ function construct_yaml_int(constructor::Constructor, node::Node) return value end - if length(value) > 2 && value[1] == '0' && (value[2] == 'x' || value[2] == 'X') - return parse(Int, value[3:end], 16) - elseif length(value) > 1 && value[1] == '0' - return parse(Int, value, 8) - else - return parse(Int, value, 10) + try + if length(value) > 2 && value[1] == '0' && (value[2] == 'x' || value[2] == 'X') + return parse(Int, value[3:end], 16) + elseif length(value) > 1 && value[1] == '0' + return parse(Int, value, 8) + else + return parse(Int, value, 10) + end + catch y + if isa(y, ArgumentError) + return value + else + error("Could not decode int, failed with error $(y)") + end end end diff --git a/test/issue41.data b/test/issue41.data new file mode 100644 index 0000000..d69dcc2 --- /dev/null +++ b/test/issue41.data @@ -0,0 +1,3 @@ +ISSBN: 0189123 +dec: 189123 +oct: 01123 diff --git a/test/issue41.expected b/test/issue41.expected new file mode 100644 index 0000000..d43567c --- /dev/null +++ b/test/issue41.expected @@ -0,0 +1 @@ +Dict{Any,Any}("ISSBN" => "0189123", "dec" => 189123, "oct" => 595) diff --git a/test/runtests.jl b/test/runtests.jl index 87902ca..8084f4b 100755 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -35,6 +35,9 @@ const tests = [ "escape_sequences", "issue15", "issue30", + "issue36", + "issue39", + "issue41" "cartesian", "ar1", "ar1_cartesian"