From cdf849061c7e6097591e46d60efb1a5b605c7d61 Mon Sep 17 00:00:00 2001 From: Syoyo Fujita Date: Tue, 1 Aug 2017 20:12:08 +0900 Subject: [PATCH] Wrap picojson::parse with exception clause to catch JSON parsing error. --- tiny_gltf.h | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/tiny_gltf.h b/tiny_gltf.h index bb012e9..629c791 100644 --- a/tiny_gltf.h +++ b/tiny_gltf.h @@ -2278,7 +2278,6 @@ static bool ParseCamera(Camera *camera, std::string *err, bool TinyGLTF::LoadFromString(Model *model, std::string *err, const char *str, unsigned int length, const std::string &base_dir, unsigned int check_sections) { - if (length < 4) { if (err) { (*err) = "JSON string too short.\n"; @@ -2286,12 +2285,20 @@ bool TinyGLTF::LoadFromString(Model *model, std::string *err, const char *str, return false; } + // TODO(syoyo): Add feature not using exception handling. picojson::value v; - std::string perr = picojson::parse(v, str, str + length); + try { + std::string perr = picojson::parse(v, str, str + length); - if (!perr.empty()) { + if (!perr.empty()) { + if (err) { + (*err) = "JSON parsing error: " + perr; + } + return false; + } + } catch (std::exception e) { if (err) { - (*err) = "JSON parsing error: " + perr; + (*err) = e.what(); } return false; } @@ -2304,7 +2311,6 @@ bool TinyGLTF::LoadFromString(Model *model, std::string *err, const char *str, return false; } - // scene is not mandatory. // FIXME Maybe a better way to handle it than removing the code