From 6e3fe90eb5e3ff6a4642385301932a6e0ff01cbc Mon Sep 17 00:00:00 2001 From: Pepe Rivera Date: Mon, 3 Jun 2019 13:58:37 -0700 Subject: [PATCH] Wrap json parsing in try/catch (#534) --- .../DataLoaders/CurrencyDataLoader.cpp | 34 +++++++++++++++++-- 1 file changed, 32 insertions(+), 2 deletions(-) diff --git a/src/CalcViewModel/DataLoaders/CurrencyDataLoader.cpp b/src/CalcViewModel/DataLoaders/CurrencyDataLoader.cpp index 286422c2..d51a1940 100644 --- a/src/CalcViewModel/DataLoaders/CurrencyDataLoader.cpp +++ b/src/CalcViewModel/DataLoaders/CurrencyDataLoader.cpp @@ -502,7 +502,22 @@ bool CurrencyDataLoader::TryParseStaticData(_In_ String ^ rawJson, _Inout_ vecto staticData.resize(size_t{ data->Size }); for (unsigned int i = 0; i < data->Size; i++) { - JsonObject ^ obj = data->GetAt(i)->GetObject(); + JsonObject ^ obj; + try + { + obj = data->GetAt(i)->GetObject(); + } + catch (COMException ^ e) + { + if (e->HResult == E_ILLEGAL_METHOD_CALL) + { + continue; + } + else + { + throw; + } + } for (size_t j = 0; j < values.size(); j++) { @@ -531,7 +546,22 @@ bool CurrencyDataLoader::TryParseAllRatiosData(_In_ String ^ rawJson, _Inout_ Cu allRatios.clear(); for (unsigned int i = 0; i < data->Size; i++) { - JsonObject ^ obj = data->GetAt(i)->GetObject(); + JsonObject ^ obj; + try + { + obj = data->GetAt(i)->GetObject(); + } + catch (COMException^ e) + { + if (e->HResult == E_ILLEGAL_METHOD_CALL) + { + continue; + } + else + { + throw; + } + } // Rt is ratio, An is target currency ISO code. double relativeRatio = obj->GetNamedNumber(StringReference(RATIO_KEY));