From 94f03f182b44bb658217ee38071702e375436883 Mon Sep 17 00:00:00 2001 From: John Knox Date: Wed, 20 Jun 2018 08:36:41 -0700 Subject: [PATCH] Add nullifyNanAndInf parameter to FBCxxUtils Summary: There was an issue with syncing our internal files to github. A change was made in the utils that wasn't synced out, despite the sonar code using the new API. This brings the util update to github, while I fix the syncing issue. After that there will be a single source of truth so no more sync issues like this can occur. Reviewed By: priteshrnandgaonkar Differential Revision: D8541128 fbshipit-source-id: d8509b65035569c4ee9707e5d7eab99fa325da88 --- .../FBCxxUtils/FBCxxFollyDynamicConvert.h | 2 +- .../FBCxxUtils/FBCxxFollyDynamicConvert.mm | 32 +++++++++++++------ 2 files changed, 24 insertions(+), 10 deletions(-) diff --git a/iOS/SonarKit/FBCxxUtils/FBCxxFollyDynamicConvert.h b/iOS/SonarKit/FBCxxUtils/FBCxxFollyDynamicConvert.h index 1cc1bd1ed..88412eac2 100644 --- a/iOS/SonarKit/FBCxxUtils/FBCxxFollyDynamicConvert.h +++ b/iOS/SonarKit/FBCxxUtils/FBCxxFollyDynamicConvert.h @@ -14,7 +14,7 @@ namespace facebook { namespace cxxutils { -folly::dynamic convertIdToFollyDynamic(id json); +folly::dynamic convertIdToFollyDynamic(id json, bool nullifyNanAndInf = false); id convertFollyDynamicToId(const folly::dynamic &dyn); } } diff --git a/iOS/SonarKit/FBCxxUtils/FBCxxFollyDynamicConvert.mm b/iOS/SonarKit/FBCxxUtils/FBCxxFollyDynamicConvert.mm index b19405511..3cae66d43 100644 --- a/iOS/SonarKit/FBCxxUtils/FBCxxFollyDynamicConvert.mm +++ b/iOS/SonarKit/FBCxxUtils/FBCxxFollyDynamicConvert.mm @@ -45,7 +45,7 @@ id convertFollyDynamicToId(const folly::dynamic &dyn) { } } -folly::dynamic convertIdToFollyDynamic(id json) +folly::dynamic convertIdToFollyDynamic(id json, bool nullifyNanAndInf) { if (json == nil || json == (id)kCFNull) { return nullptr; @@ -63,7 +63,11 @@ folly::dynamic convertIdToFollyDynamic(id json) if ([json isKindOfClass:[@YES class]]) { return (bool) [json boolValue]; } else { - return [json longLongValue]; + const auto value = [json longLongValue]; + if (nullifyNanAndInf && (isnan(value) || isinf(value))) { + return nullptr; + } + return value; } case _C_UCHR: case _C_SHT: @@ -73,12 +77,22 @@ folly::dynamic convertIdToFollyDynamic(id json) case _C_LNG: case _C_ULNG: case _C_LNG_LNG: - case _C_ULNG_LNG: - return [json longLongValue]; + case _C_ULNG_LNG: { + const auto value = [json longLongValue]; + if (nullifyNanAndInf && (isnan(value) || isinf(value))) { + return nullptr; + } + return value; + } case _C_FLT: - case _C_DBL: - return [json doubleValue]; + case _C_DBL: { + const auto value = [json doubleValue]; + if (nullifyNanAndInf && (isnan(value) || isinf(value))) { + return nullptr; + } + return value; + } // default: // fall through @@ -90,15 +104,15 @@ folly::dynamic convertIdToFollyDynamic(id json) } else if ([json isKindOfClass:[NSArray class]]) { folly::dynamic array = folly::dynamic::array; for (id element in json) { - array.push_back(convertIdToFollyDynamic(element)); + array.push_back(convertIdToFollyDynamic(element, nullifyNanAndInf)); } return array; } else if ([json isKindOfClass:[NSDictionary class]]) { __block folly::dynamic object = folly::dynamic::object(); [json enumerateKeysAndObjectsUsingBlock:^(NSString *key, NSString *value, __unused BOOL *stop) { - object.insert(convertIdToFollyDynamic(key), - convertIdToFollyDynamic(value)); + object.insert(convertIdToFollyDynamic(key, nullifyNanAndInf), + convertIdToFollyDynamic(value, nullifyNanAndInf)); }]; return object;