Index: third_party/WebKit/Source/bindings/modules/v8/serialization/V8ScriptValueSerializerForModulesTest.cpp |
diff --git a/third_party/WebKit/Source/bindings/modules/v8/serialization/V8ScriptValueSerializerForModulesTest.cpp b/third_party/WebKit/Source/bindings/modules/v8/serialization/V8ScriptValueSerializerForModulesTest.cpp |
index 366d6984052d4d4fe11a4d02f1fcfe4495192b00..c61fc75e9fb7cbed497ce85782a42d1bb5b1bd45 100644 |
--- a/third_party/WebKit/Source/bindings/modules/v8/serialization/V8ScriptValueSerializerForModulesTest.cpp |
+++ b/third_party/WebKit/Source/bindings/modules/v8/serialization/V8ScriptValueSerializerForModulesTest.cpp |
@@ -155,6 +155,7 @@ TEST(V8ScriptValueSerializerForModulesTest, RoundTripRTCCertificate) { |
certificateGenerator->fromPEM( |
WebString::fromUTF8(kEcdsaPrivateKey, sizeof(kEcdsaPrivateKey)), |
WebString::fromUTF8(kEcdsaCertificate, sizeof(kEcdsaCertificate))); |
+ ASSERT_TRUE(webCertificate); |
RTCCertificate* certificate = new RTCCertificate(std::move(webCertificate)); |
// Round trip test. |
@@ -191,6 +192,24 @@ TEST(V8ScriptValueSerializerForModulesTest, DecodeRTCCertificate) { |
EXPECT_EQ(kEcdsaCertificate, pem.certificate()); |
} |
+TEST(V8ScriptValueSerializerForModulesTest, DecodeInvalidRTCCertificate) { |
+ ScopedEnableV8BasedStructuredClone enable; |
+ V8TestingScope scope; |
+ |
+ // This is valid, except that "private" is not a valid private key PEM and |
+ // "certificate" is not a valid certificate PEM. This checks what happens if |
+ // these fail validation inside WebRTC. |
+ ScriptState* scriptState = scope.getScriptState(); |
+ RefPtr<SerializedScriptValue> input = serializedValue( |
+ {0xff, 0x09, 0x3f, 0x00, 0x6b, 0x07, 'p', 'r', 'i', 'v', 'a', 't', 'e', |
+ 0x0b, 'c', 'e', 'r', 't', 'i', 'f', 'i', 'c', 'a', 't', 'e', 0x00}); |
+ |
+ // Decode test. |
+ v8::Local<v8::Value> result = |
+ V8ScriptValueDeserializerForModules(scriptState, input).deserialize(); |
+ EXPECT_TRUE(result->IsNull()); |
+} |
+ |
// A bunch of voodoo which allows the asynchronous WebCrypto operations to be |
// called synchronously, with the resulting JavaScript values extracted. |