From 22f47de4fcd8cd7ecc2a89fbb25f94efb1b3f743 Mon Sep 17 00:00:00 2001 From: Sude Date: Fri, 20 Jan 2017 00:15:50 +0200 Subject: [PATCH] Fix crash in Website::getGames JSON value for updates can be null in some cases. For example when user owns a dlc but not the base game. This caused a crash due to std::stoi throwing std::invalid_argument exception --- src/website.cpp | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/src/website.cpp b/src/website.cpp index 0803432..8ca4c8c 100644 --- a/src/website.cpp +++ b/src/website.cpp @@ -163,7 +163,31 @@ std::vector Website::getGames() gameItem game; game.name = product["slug"].asString(); game.id = product["id"].isInt() ? std::to_string(product["id"].asInt()) : product["id"].asString(); - game.updates = product["updates"].isInt() ? product["updates"].asInt() : std::stoi(product["updates"].asString()); + + if (product.isMember("updates")) + { + if (product["updates"].isNull()) + { + /* In some cases the value can be null. + * For example when user owns a dlc but not the base game + * https://github.com/Sude-/lgogdownloader/issues/101 + * Assume that there are no updates in this case */ + game.updates = 0; + } + else if (product["updates"].isInt()) + game.updates = product["updates"].asInt(); + else + { + try + { + game.updates = std::stoi(product["updates"].asString()); + } + catch (std::invalid_argument& e) + { + game.updates = 0; // Assume no updates + } + } + } unsigned int platform = 0; if (product["worksOn"]["Windows"].asBool())