REGRESSION (r242908): TestWebKitAPI.WebKit.AddAndRemoveDataDetectors Crashed
authortimothy@apple.com <timothy@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 14 Mar 2019 19:22:06 +0000 (19:22 +0000)
committertimothy@apple.com <timothy@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 14 Mar 2019 19:22:06 +0000 (19:22 +0000)
https://bugs.webkit.org/show_bug.cgi?id=195751

Reviewed by Wenson Hsieh.

* Shared/Cocoa/ArgumentCodersCocoa.mm:
(IPC::decodeArrayInternal): Added allowedClasses, pass to internal decodeObject for values.
(IPC::decodeDictionaryInternal): Ditto for keys and values.
(IPC::decodeObject): Pass allowedClasses to array and dictionary decoders.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@242953 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/WebKit/ChangeLog
Source/WebKit/Shared/Cocoa/ArgumentCodersCocoa.mm

index 305e22a..c7b272c 100644 (file)
@@ -1,3 +1,15 @@
+2019-03-14  Timothy Hatcher  <timothy@apple.com>
+
+        REGRESSION (r242908): TestWebKitAPI.WebKit.AddAndRemoveDataDetectors Crashed
+        https://bugs.webkit.org/show_bug.cgi?id=195751
+
+        Reviewed by Wenson Hsieh.
+
+        * Shared/Cocoa/ArgumentCodersCocoa.mm:
+        (IPC::decodeArrayInternal): Added allowedClasses, pass to internal decodeObject for values.
+        (IPC::decodeDictionaryInternal): Ditto for keys and values.
+        (IPC::decodeObject): Pass allowedClasses to array and dictionary decoders.
+
 2019-03-14  Chris Dumez  <cdumez@apple.com>
 
         [PSON] Make sure the WebProcessCache is leverage when relaunching a process after termination
index be1bc09..80e8e55 100644 (file)
@@ -153,7 +153,7 @@ static void encodeArrayInternal(Encoder& encoder, NSArray *array)
     }
 }
 
-static Optional<RetainPtr<id>> decodeArrayInternal(Decoder& decoder)
+static Optional<RetainPtr<id>> decodeArrayInternal(Decoder& decoder, NSArray<Class> *allowedClasses)
 {
     uint64_t size;
     if (!decoder.decode(size))
@@ -161,7 +161,7 @@ static Optional<RetainPtr<id>> decodeArrayInternal(Decoder& decoder)
 
     RetainPtr<NSMutableArray> array = adoptNS([[NSMutableArray alloc] initWithCapacity:size]);
     for (uint64_t i = 0; i < size; ++i) {
-        auto value = decodeObject(decoder, nil);
+        auto value = decodeObject(decoder, allowedClasses);
         if (!value)
             return WTF::nullopt;
         [array addObject:value.value().get()];
@@ -251,7 +251,7 @@ static void encodeDictionaryInternal(Encoder& encoder, NSDictionary *dictionary)
     }
 }
 
-static Optional<RetainPtr<id>> decodeDictionaryInternal(Decoder& decoder)
+static Optional<RetainPtr<id>> decodeDictionaryInternal(Decoder& decoder, NSArray<Class> *allowedClasses)
 {
     uint64_t size;
     if (!decoder.decode(size))
@@ -259,11 +259,11 @@ static Optional<RetainPtr<id>> decodeDictionaryInternal(Decoder& decoder)
 
     RetainPtr<NSMutableDictionary> dictionary = adoptNS([[NSMutableDictionary alloc] initWithCapacity:size]);
     for (uint64_t i = 0; i < size; ++i) {
-        auto key = decodeObject(decoder, nil);
+        auto key = decodeObject(decoder, allowedClasses);
         if (!key)
             return WTF::nullopt;
 
-        auto value = decodeObject(decoder, nil);
+        auto value = decodeObject(decoder, allowedClasses);
         if (!value)
             return WTF::nullopt;
 
@@ -434,13 +434,13 @@ Optional<RetainPtr<id>> decodeObject(Decoder& decoder, NSArray<Class> *allowedCl
 
     switch (type) {
     case NSType::Array:
-        return decodeArrayInternal(decoder);
+        return decodeArrayInternal(decoder, allowedClasses);
 #if USE(APPKIT)
     case NSType::Color:
         return decodeColorInternal(decoder);
 #endif
     case NSType::Dictionary:
-        return decodeDictionaryInternal(decoder);
+        return decodeDictionaryInternal(decoder, allowedClasses);
     case NSType::Font:
         return decodeFontInternal(decoder);
     case NSType::Number: