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
This commit is contained in:
Vlad Hnatiuk
2022-05-25 03:29:17 -07:00
committed by Facebook GitHub Bot
parent c006722e6c
commit a70968807b
+11 -4
View File
@@ -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;
}