From a70968807bd0f4f59a311d6a2eefec36d31ff72c Mon Sep 17 00:00:00 2001 From: Vlad Hnatiuk Date: Wed, 25 May 2022 03:29:17 -0700 Subject: [PATCH] Fix crash in folly object conversion Summary: Due to invalid utf-8 data NSString may return nil during initialisation and this leads to crash when nil goes to NSDictionary or NSArray Changelog: [Internal] Differential Revision: D36623628 fbshipit-source-id: 23efad87cc9fe4a23c5e90dad63e0d74036b62fa --- React/CxxUtils/RCTFollyConvert.mm | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/React/CxxUtils/RCTFollyConvert.mm b/React/CxxUtils/RCTFollyConvert.mm index 4efcdcd3d8b..f890c86ab4f 100644 --- a/React/CxxUtils/RCTFollyConvert.mm +++ b/React/CxxUtils/RCTFollyConvert.mm @@ -31,15 +31,22 @@ id convertFollyDynamicToId(const folly::dynamic &dyn) return [[NSString alloc] initWithBytes:dyn.c_str() length:dyn.size() encoding:NSUTF8StringEncoding]; case folly::dynamic::ARRAY: { NSMutableArray *array = [[NSMutableArray alloc] initWithCapacity:dyn.size()]; - for (auto &elem : dyn) { - [array addObject:convertFollyDynamicToId(elem)]; + for (const auto &elem : dyn) { + id value = convertFollyDynamicToId(elem); + if (value) { + [array addObject:value]; + } } return array; } case folly::dynamic::OBJECT: { NSMutableDictionary *dict = [[NSMutableDictionary alloc] initWithCapacity:dyn.size()]; - for (auto &elem : dyn.items()) { - dict[convertFollyDynamicToId(elem.first)] = convertFollyDynamicToId(elem.second); + for (const auto &elem : dyn.items()) { + id key = convertFollyDynamicToId(elem.first); + id value = convertFollyDynamicToId(elem.second); + if (key && value) { + dict[key] = value; + } } return dict; }