Wrap picojson::parse with exception clause to catch JSON parsing error.

This commit is contained in:
Syoyo Fujita 2017-08-01 20:12:08 +09:00
parent 2b0307f397
commit cdf849061c

View File

@ -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,7 +2285,9 @@ bool TinyGLTF::LoadFromString(Model *model, std::string *err, const char *str,
return false;
}
// TODO(syoyo): Add feature not using exception handling.
picojson::value v;
try {
std::string perr = picojson::parse(v, str, str + length);
if (!perr.empty()) {
@ -2295,6 +2296,12 @@ bool TinyGLTF::LoadFromString(Model *model, std::string *err, const char *str,
}
return false;
}
} catch (std::exception e) {
if (err) {
(*err) = e.what();
}
return false;
}
if (!v.is<picojson::object>()) {
// root is not an object.
@ -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