Selaa lähdekoodia

LibWeb: Throw TypeError if WebCrypto algorithm doesn't have "name" field

Andreas Kling 8 kuukautta sitten
vanhempi
commit
7b678d3e1f

+ 4 - 0
Libraries/LibWeb/Crypto/SubtleCrypto.cpp

@@ -88,6 +88,10 @@ WebIDL::ExceptionOr<NormalizedAlgorithmAndParameter> normalize_an_algorithm(JS::
     //       fetch the actual algorithm factory from the registeredAlgorithms map.
     auto initial_algorithm = TRY(algorithm.get<GC::Root<JS::Object>>()->get("name"));
 
+    if (initial_algorithm.is_undefined()) {
+        return vm.throw_completion<JS::TypeError>(JS::ErrorType::NotAnObjectOfType, "Algorithm");
+    }
+
     // 4. Let algName be the value of the name attribute of initialAlg.
     auto algorithm_name = TRY(initial_algorithm.to_string(vm));
 

+ 38 - 38
Tests/LibWeb/Text/expected/wpt-import/WebCryptoAPI/generateKey/failures_ECDH.https.any.txt

@@ -6,8 +6,8 @@ Rerun
 
 Found 476 tests
 
-410 Pass
-66 Fail
+446 Pass
+30 Fail
 Details
 Result	Test Name	MessagePass	Bad algorithm: generateKey(AES, false, [decrypt])	
 Pass	Bad algorithm: generateKey(AES, true, [decrypt])	
@@ -333,42 +333,42 @@ Pass	Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [decrypt, s
 Pass	Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits])	
 Pass	Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits])	
 Pass	Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits])	
-Fail	Empty algorithm: generateKey({}, false, [decrypt])	
-Fail	Empty algorithm: generateKey({}, true, [decrypt])	
-Fail	Empty algorithm: generateKey({}, RED, [decrypt])	
-Fail	Empty algorithm: generateKey({}, 7, [decrypt])	
-Fail	Empty algorithm: generateKey({}, false, [sign, decrypt])	
-Fail	Empty algorithm: generateKey({}, true, [sign, decrypt])	
-Fail	Empty algorithm: generateKey({}, RED, [sign, decrypt])	
-Fail	Empty algorithm: generateKey({}, 7, [sign, decrypt])	
-Fail	Empty algorithm: generateKey({}, false, [deriveBits, sign, decrypt])	
-Fail	Empty algorithm: generateKey({}, true, [deriveBits, sign, decrypt])	
-Fail	Empty algorithm: generateKey({}, RED, [deriveBits, sign, decrypt])	
-Fail	Empty algorithm: generateKey({}, 7, [deriveBits, sign, decrypt])	
-Fail	Empty algorithm: generateKey({}, false, [deriveBits, decrypt])	
-Fail	Empty algorithm: generateKey({}, true, [deriveBits, decrypt])	
-Fail	Empty algorithm: generateKey({}, RED, [deriveBits, decrypt])	
-Fail	Empty algorithm: generateKey({}, 7, [deriveBits, decrypt])	
-Fail	Empty algorithm: generateKey({}, false, [sign])	
-Fail	Empty algorithm: generateKey({}, true, [sign])	
-Fail	Empty algorithm: generateKey({}, RED, [sign])	
-Fail	Empty algorithm: generateKey({}, 7, [sign])	
-Fail	Empty algorithm: generateKey({}, false, [deriveBits, sign])	
-Fail	Empty algorithm: generateKey({}, true, [deriveBits, sign])	
-Fail	Empty algorithm: generateKey({}, RED, [deriveBits, sign])	
-Fail	Empty algorithm: generateKey({}, 7, [deriveBits, sign])	
-Fail	Empty algorithm: generateKey({}, false, [deriveBits])	
-Fail	Empty algorithm: generateKey({}, true, [deriveBits])	
-Fail	Empty algorithm: generateKey({}, RED, [deriveBits])	
-Fail	Empty algorithm: generateKey({}, 7, [deriveBits])	
-Fail	Empty algorithm: generateKey({}, false, [])	
-Fail	Empty algorithm: generateKey({}, true, [])	
-Fail	Empty algorithm: generateKey({}, RED, [])	
-Fail	Empty algorithm: generateKey({}, 7, [])	
-Fail	Empty algorithm: generateKey({}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits])	
-Fail	Empty algorithm: generateKey({}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits])	
-Fail	Empty algorithm: generateKey({}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits])	
-Fail	Empty algorithm: generateKey({}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits])	
+Pass	Empty algorithm: generateKey({}, false, [decrypt])	
+Pass	Empty algorithm: generateKey({}, true, [decrypt])	
+Pass	Empty algorithm: generateKey({}, RED, [decrypt])	
+Pass	Empty algorithm: generateKey({}, 7, [decrypt])	
+Pass	Empty algorithm: generateKey({}, false, [sign, decrypt])	
+Pass	Empty algorithm: generateKey({}, true, [sign, decrypt])	
+Pass	Empty algorithm: generateKey({}, RED, [sign, decrypt])	
+Pass	Empty algorithm: generateKey({}, 7, [sign, decrypt])	
+Pass	Empty algorithm: generateKey({}, false, [deriveBits, sign, decrypt])	
+Pass	Empty algorithm: generateKey({}, true, [deriveBits, sign, decrypt])	
+Pass	Empty algorithm: generateKey({}, RED, [deriveBits, sign, decrypt])	
+Pass	Empty algorithm: generateKey({}, 7, [deriveBits, sign, decrypt])	
+Pass	Empty algorithm: generateKey({}, false, [deriveBits, decrypt])	
+Pass	Empty algorithm: generateKey({}, true, [deriveBits, decrypt])	
+Pass	Empty algorithm: generateKey({}, RED, [deriveBits, decrypt])	
+Pass	Empty algorithm: generateKey({}, 7, [deriveBits, decrypt])	
+Pass	Empty algorithm: generateKey({}, false, [sign])	
+Pass	Empty algorithm: generateKey({}, true, [sign])	
+Pass	Empty algorithm: generateKey({}, RED, [sign])	
+Pass	Empty algorithm: generateKey({}, 7, [sign])	
+Pass	Empty algorithm: generateKey({}, false, [deriveBits, sign])	
+Pass	Empty algorithm: generateKey({}, true, [deriveBits, sign])	
+Pass	Empty algorithm: generateKey({}, RED, [deriveBits, sign])	
+Pass	Empty algorithm: generateKey({}, 7, [deriveBits, sign])	
+Pass	Empty algorithm: generateKey({}, false, [deriveBits])	
+Pass	Empty algorithm: generateKey({}, true, [deriveBits])	
+Pass	Empty algorithm: generateKey({}, RED, [deriveBits])	
+Pass	Empty algorithm: generateKey({}, 7, [deriveBits])	
+Pass	Empty algorithm: generateKey({}, false, [])	
+Pass	Empty algorithm: generateKey({}, true, [])	
+Pass	Empty algorithm: generateKey({}, RED, [])	
+Pass	Empty algorithm: generateKey({}, 7, [])	
+Pass	Empty algorithm: generateKey({}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits])	
+Pass	Empty algorithm: generateKey({}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits])	
+Pass	Empty algorithm: generateKey({}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits])	
+Pass	Empty algorithm: generateKey({}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits])	
 Pass	Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [encrypt])	
 Pass	Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveKey, encrypt])	
 Pass	Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveBits, deriveKey, encrypt])