LibWeb: Abandon Node.replaceChild() if removal rejigs the DOM

This isn't directly in the spec, but since replaceChild is implemented
in terms of remove + insert, the removal step may cause arbitrary code
to execute, and so we have to verify that the replaceChild inputs still
make sense afterwards, before doing the insertion.

This roughly matches what WebKit does, and makes a bunch of HTML parsing
tests in WPT stop asserting.
This commit is contained in:
Andreas Kling 2024-11-24 10:23:56 +01:00 committed by Andreas Kling
parent 5c70436cb2
commit 01f4bbbba7
Notes: github-actions[bot] 2024-11-24 10:46:37 +00:00
5 changed files with 179 additions and 12 deletions

View file

@ -982,8 +982,13 @@ WebIDL::ExceptionOr<GC::Ref<Node>> Node::replace_child(GC::Ref<Node> node, GC::R
else
nodes.append(GC::make_root(*node));
// 13. Insert node into parent before referenceChild with the suppress observers flag set.
insert_before(node, reference_child, true);
// AD-HOC: Since removing the child may have executed arbitrary code, we have to verify
// the sanity of inserting `node` before `reference_child` again, as well as
// `child` not being reinserted elsewhere.
if (!reference_child || (reference_child->parent() == this && !child->parent_node())) {
// 13. Insert node into parent before referenceChild with the suppress observers flag set.
insert_before(node, reference_child, true);
}
// 14. Queue a tree mutation record for parent with nodes, removedNodes, previousSibling, and referenceChild.
queue_tree_mutation_record(move(nodes), move(removed_nodes), previous_sibling.ptr(), reference_child.ptr());

View file

@ -34,15 +34,12 @@ Text/input/wpt-import/html/rendering/pixel-length-attributes.html
; Skipped due to assertion failures
Text/input/wpt-import/html/syntax/parsing/html5lib_entities01.html
Text/input/wpt-import/html/syntax/parsing/html5lib_innerHTML_tests_innerHTML_1.html
Text/input/wpt-import/html/syntax/parsing/html5lib_plain-text-unsafe.html
Text/input/wpt-import/html/syntax/parsing/html5lib_template.html
Text/input/wpt-import/html/syntax/parsing/html5lib_tests1.html
Text/input/wpt-import/html/syntax/parsing/html5lib_tests10.html
Text/input/wpt-import/html/syntax/parsing/html5lib_tests15.html
Text/input/wpt-import/html/syntax/parsing/html5lib_tests16.html
Text/input/wpt-import/html/syntax/parsing/html5lib_tests19.html
Text/input/wpt-import/html/syntax/parsing/html5lib_tests20.html
Text/input/wpt-import/html/syntax/parsing/html5lib_tests5.html
Text/input/wpt-import/html/syntax/parsing/html5lib_webkit01.html
Text/input/wpt-import/html/syntax/parsing/named-character-references.html

View file

@ -0,0 +1,91 @@
Summary
Harness status: OK
Rerun
Found 81 tests
81 Pass
Details
Result Test Name MessagePass html5lib_innerHTML_tests_innerHTML_1.html 7a9e287595dd570e0f19b7eec0ac424228908daf
Pass html5lib_innerHTML_tests_innerHTML_1.html 6f766fa07c8697a5379c5542adbba2a42f913004
Pass html5lib_innerHTML_tests_innerHTML_1.html dbbe75ae41228f9264d56a018e620217ec87fd32
Pass html5lib_innerHTML_tests_innerHTML_1.html 32e2fea7531c0c910ac73b35665b2f8bca47a049
Pass html5lib_innerHTML_tests_innerHTML_1.html 7fc9ad33d4bc6af760883f0581cf869f96473f2e
Pass html5lib_innerHTML_tests_innerHTML_1.html 8883d04b33c7e718b0d201a5f0bf5aa6d98754e6
Pass html5lib_innerHTML_tests_innerHTML_1.html 347f73ada7ab974a081c65385444cca0b6a2d446
Pass html5lib_innerHTML_tests_innerHTML_1.html 25a03753c27ab46891e2c59665215e4657ca7177
Pass html5lib_innerHTML_tests_innerHTML_1.html 75e9c86aff595da8999673fce99bc12741552c4e
Pass html5lib_innerHTML_tests_innerHTML_1.html e35e330f7eb5bb27df1fe702843747e104a193be
Pass html5lib_innerHTML_tests_innerHTML_1.html b55e32e22980fe99bab895005a0a757a2fcb1a2b
Pass html5lib_innerHTML_tests_innerHTML_1.html ce6fc19319d2568fec9084d8d4d1cc10f20b8565
Pass html5lib_innerHTML_tests_innerHTML_1.html b600f8c7df58e42342feff051778923dbf7616af
Pass html5lib_innerHTML_tests_innerHTML_1.html 6056619333f1a780052612e1dda18112147f67fa
Pass html5lib_innerHTML_tests_innerHTML_1.html d9300c4d8d36e950490bbe5800c1a3ba4e744e2a
Pass html5lib_innerHTML_tests_innerHTML_1.html 411ebe3bea1d0508263ec17618492feaa9ca99d7
Pass html5lib_innerHTML_tests_innerHTML_1.html 6c7c85721f823ab889bcb9e035341a1fb6d6eeee
Pass html5lib_innerHTML_tests_innerHTML_1.html 973d06969d7968d200d5639ce06f7209655b1e26
Pass html5lib_innerHTML_tests_innerHTML_1.html dfb6ec1e412a6634b497151f222f4272721ae57e
Pass html5lib_innerHTML_tests_innerHTML_1.html 4916096ab7dbdd051dc96de7952ec60674d617a3
Pass html5lib_innerHTML_tests_innerHTML_1.html 58277507de4ce0df9b4eb03262e4cb04d2fcc7af
Pass html5lib_innerHTML_tests_innerHTML_1.html 8e5727f170507ba6b86c1c3bdb3a5201d3480b33
Pass html5lib_innerHTML_tests_innerHTML_1.html 61eb343f71030688ab1a26bb980b9e4409993e3d
Pass html5lib_innerHTML_tests_innerHTML_1.html 3548939a56a148b59781c5f930036c1528db1545
Pass html5lib_innerHTML_tests_innerHTML_1.html 0b88a12102fba0634b44ac9f157544faeca68df6
Pass html5lib_innerHTML_tests_innerHTML_1.html c300553f45f4ad6e5e1da9d884fafb95f36ab05a
Pass html5lib_innerHTML_tests_innerHTML_1.html 00a7ed4082183eba76af197418305b2d196ec7e6
Pass html5lib_innerHTML_tests_innerHTML_1.html 5dfd84382f85ff8343a62d6bb5028996111e5017
Pass html5lib_innerHTML_tests_innerHTML_1.html 9b1a1cd33bb3f26ec3f969f3158edf5c2db47052
Pass html5lib_innerHTML_tests_innerHTML_1.html 8ab89f758b96bf994a21d8283d27e8ae9804b924
Pass html5lib_innerHTML_tests_innerHTML_1.html 25add8314f59cdc264d7779f36ae4dffd1f9ad29
Pass html5lib_innerHTML_tests_innerHTML_1.html 7104e981f6018b18766fd95109bfbffeb878cc56
Pass html5lib_innerHTML_tests_innerHTML_1.html 28fbaa710ce3f440a56fdf909c4b8bc223a1b965
Pass html5lib_innerHTML_tests_innerHTML_1.html 3380b0143f3d1e2edb216d388acd72702e141165
Pass html5lib_innerHTML_tests_innerHTML_1.html a630fb272be6de118b728a28d6ce71b296a75694
Pass html5lib_innerHTML_tests_innerHTML_1.html 5adf8b7bd3d63a77ea1dbe6deb6741c5b92de6cd
Pass html5lib_innerHTML_tests_innerHTML_1.html 4e0312ac349a70d07f2bb1ae154740e46e8c9a6e
Pass html5lib_innerHTML_tests_innerHTML_1.html 987061379d2542e88d8a72ce6f0169a211d3ac41
Pass html5lib_innerHTML_tests_innerHTML_1.html e0798aa003863ba2be750d3e6c2e6766fea11279
Pass html5lib_innerHTML_tests_innerHTML_1.html 586ed8e0d1395198f43ee68843d654a49169f379
Pass html5lib_innerHTML_tests_innerHTML_1.html 8896feedef576c1ed768a4eb67f57c3dc5242fed
Pass html5lib_innerHTML_tests_innerHTML_1.html 89f4f0f289a23d1ebfbf499c2ecd24cd35fc10b4
Pass html5lib_innerHTML_tests_innerHTML_1.html 2c07361470533b905a7ff9a685439cad2fe35549
Pass html5lib_innerHTML_tests_innerHTML_1.html a36f27cbe53991c647055c95bfa250a0ab734b0d
Pass html5lib_innerHTML_tests_innerHTML_1.html ac28c352ae8453434e3aefb24e798a9580c1b230
Pass html5lib_innerHTML_tests_innerHTML_1.html f8770f97671a805b37277db7e42536b40c0804cb
Pass html5lib_innerHTML_tests_innerHTML_1.html 469a071b520d8436e6a0f6da6f9385f5ebd8e2f8
Pass html5lib_innerHTML_tests_innerHTML_1.html 7cf2db8c65b79da98e39b13772ed0440ff177fd7
Pass html5lib_innerHTML_tests_innerHTML_1.html 3940fdb54783cb3c42138670a17d28e77e29e900
Pass html5lib_innerHTML_tests_innerHTML_1.html 3b5ab5fbb3585d7215a5766f1e2377b7929b5cc6
Pass html5lib_innerHTML_tests_innerHTML_1.html 7c4a40203d5830d36432b0f30a09cebea6e9d2e4
Pass html5lib_innerHTML_tests_innerHTML_1.html e6d930d4239666fdc6c0722106bd2b115b4d3fd3
Pass html5lib_innerHTML_tests_innerHTML_1.html c8817b3b55a437bd153e978fc5f49fbe10bb56e2
Pass html5lib_innerHTML_tests_innerHTML_1.html 2a302c14f1983aaad9fd7abe49336d9561ed82e9
Pass html5lib_innerHTML_tests_innerHTML_1.html 28cfddd5b5875f7044b0859ba4ce88175fcbf07e
Pass html5lib_innerHTML_tests_innerHTML_1.html 887596c50809eeb809ad24d86c239130a42f5a46
Pass html5lib_innerHTML_tests_innerHTML_1.html fa3797a2d2baeb8b8b2de81f1e7f33725e6b2aad
Pass html5lib_innerHTML_tests_innerHTML_1.html dc0e2582ff83e60c0eb549dc3387562d3482e364
Pass html5lib_innerHTML_tests_innerHTML_1.html 4ea02fd705291eb2d14274ebeaa0117ba2b9b306
Pass html5lib_innerHTML_tests_innerHTML_1.html 52cc77eac9488a8bb1a2c8c695f16f8919c52044
Pass html5lib_innerHTML_tests_innerHTML_1.html c53ab7d84ae27de9f0937521c74eec2fd6c1b1ec
Pass html5lib_innerHTML_tests_innerHTML_1.html d8747a49503f3486155d77dd366e0ee8ad9512a6
Pass html5lib_innerHTML_tests_innerHTML_1.html 03e71832c254852f206f6f0ae6f4d161a276a699
Pass html5lib_innerHTML_tests_innerHTML_1.html 92786cfafa890c23f200dccea089ca52233ef395
Pass html5lib_innerHTML_tests_innerHTML_1.html 11d284c2b1e2f87d28dd06b938518361fe834855
Pass html5lib_innerHTML_tests_innerHTML_1.html bf6aebcd54d5dead9e6d56c77b41f01ea666d8b1
Pass html5lib_innerHTML_tests_innerHTML_1.html 4d448a4239cb4c465a21c04997d656e51fdd388f
Pass html5lib_innerHTML_tests_innerHTML_1.html 1e8faedc427045d59305218c1aba2f545c4eb4b7
Pass html5lib_innerHTML_tests_innerHTML_1.html 6762997c1a93b1ec65722498f3fd00f0d8129369
Pass html5lib_innerHTML_tests_innerHTML_1.html a162461c18d9b09734f6fe5d362b84edb4eed31f
Pass html5lib_innerHTML_tests_innerHTML_1.html 0befc335ffd6cace344d94a35de96af22b1313a5
Pass html5lib_innerHTML_tests_innerHTML_1.html a23b70f1f246ba08d13b570319391b4a5c3e9456
Pass html5lib_innerHTML_tests_innerHTML_1.html 9d5e0c25bfe921df9ea2897c027f42bc88950e69
Pass html5lib_innerHTML_tests_innerHTML_1.html 9210d577d6deecf5ab3505af86c501c5befa0b50
Pass html5lib_innerHTML_tests_innerHTML_1.html c34af491c0a339db6ba63fcc478108533347319b
Pass html5lib_innerHTML_tests_innerHTML_1.html 2c4284e6b2bb480daa50bca43bcbe29cfcdeeab4
Pass html5lib_innerHTML_tests_innerHTML_1.html d75277b65d0118463afeb66b478509d4e27565ab
Pass html5lib_innerHTML_tests_innerHTML_1.html b354df69dbe9b3ef0c42177648e3aace114cf8ea
Pass html5lib_innerHTML_tests_innerHTML_1.html fd3be386292ea1f411cea8e86e29595deb177d28
Pass html5lib_innerHTML_tests_innerHTML_1.html 1cfb3baf2ad29109ddd5581daa3a009029c71491
Pass html5lib_innerHTML_tests_innerHTML_1.html 2555d238e04f3d2853cfbc5f6dd366f82cf0e868

View file

@ -6,8 +6,8 @@ Rerun
Found 54 tests
45 Pass
9 Fail
50 Pass
4 Fail
Details
Result Test Name MessagePass html5lib_tests10.html 33cab27b810c8329105a4447f7767307577cb52f
Pass html5lib_tests10.html b833b22c2ce59749e320b26fbc4d277bc015f261
@ -46,8 +46,8 @@ Pass html5lib_tests10.html 6c10b9811a0d228cf26bc0b55ee12c7d99926270
Fail html5lib_tests10.html ee2de7753d6594fbf05d321b24e2c8bb6f2323c6
Fail html5lib_tests10.html 225170b3f08201a11d43f153fa3c8a041173b55f
Pass html5lib_tests10.html 716a01ee7d076876318395625e08e555065fc3b0
Fail html5lib_tests10.html 3c5cc236386d2d4a16d14e5c65da7edd26697a43
Fail html5lib_tests10.html 6c3447a16060d2805f8c969ec0a7b5c551468f25
Pass html5lib_tests10.html 3c5cc236386d2d4a16d14e5c65da7edd26697a43
Pass html5lib_tests10.html 6c3447a16060d2805f8c969ec0a7b5c551468f25
Pass html5lib_tests10.html 071f13f248eb7af8f7d512cf453b16c8ccc57483
Pass html5lib_tests10.html 0ef97c924e3e5e8ddf8a0bc74530868684685c38
Pass html5lib_tests10.html 25a94dd91d982fa75c89944ad8f066f7961c590b
@ -60,6 +60,6 @@ Pass html5lib_tests10.html d5ab79a14609f3ed214baa8e02bedb54ddcf33ec
Pass html5lib_tests10.html 4318bf46f0256426716a911e194f9bdf6185bd7c
Pass html5lib_tests10.html aa5c4b093ee603618493cff853af125b5fb0d401
Pass html5lib_tests10.html bfd98674d75ff3291d377f2a7cec3321844a0701
Fail html5lib_tests10.html 7fc99b729a6d57d28b2ad1edc33bb15167e051bb
Fail html5lib_tests10.html 8e87f0d5ca606ca162384d1bf3bb8de62bd6f398
Fail html5lib_tests10.html 6476f80f3d2a04e9c1323ffe78686188c579e9ac
Pass html5lib_tests10.html 7fc99b729a6d57d28b2ad1edc33bb15167e051bb
Pass html5lib_tests10.html 8e87f0d5ca606ca162384d1bf3bb8de62bd6f398
Pass html5lib_tests10.html 6476f80f3d2a04e9c1323ffe78686188c579e9ac

View file

@ -0,0 +1,74 @@
Summary
Harness status: OK
Rerun
Found 64 tests
64 Pass
Details
Result Test Name MessagePass html5lib_tests20.html cbb5f28bedf4361156ef3c9c37e314c6479be137
Pass html5lib_tests20.html e108a4952601b4664098344189c875934ea2f7ab
Pass html5lib_tests20.html 1ba644a7934a55e4303effe43cae1517ee723e13
Pass html5lib_tests20.html 8999351d1342a9bcf670dc27eb52aa786d916916
Pass html5lib_tests20.html 8ecd0d9e2580f78ff920821bd334bd8d04d165e5
Pass html5lib_tests20.html e6bf9f94617ae9cb7b663b2c9123a37730600e7f
Pass html5lib_tests20.html c5c9728bb5634f47780efefa09f79419db4257c0
Pass html5lib_tests20.html 5bb84e30031c925aed6eabca8c477d547d522dbb
Pass html5lib_tests20.html f1b6f41fa8856b408c3c398b420cbdc40cda555e
Pass html5lib_tests20.html d5ea955e51df6ee9c7801d28dfcd85402b8fa710
Pass html5lib_tests20.html 27f2f34d4101ac4877edf0be8c4065e240aef15c
Pass html5lib_tests20.html dcb10e242981a00dc3f6f874ec33318d6f532fff
Pass html5lib_tests20.html 49781179c56e3e0d4891dfff219a0beda3b86d24
Pass html5lib_tests20.html 86ac23e2828bb147966ee06690f6051345ce312c
Pass html5lib_tests20.html b4eda259a29352b6f8f9cd989e1a0e881793814e
Pass html5lib_tests20.html af0e7b907c6791a73f00b4421fa7fe7df6fe07ee
Pass html5lib_tests20.html 29c71813f1cd5f1ee092548211c8ffaf2d04b4a9
Pass html5lib_tests20.html 92547b083c29d3ea0ba5304953d254c357bcf11a
Pass html5lib_tests20.html ff10749b8b1aca1fba5d07ba86f49612be43caf9
Pass html5lib_tests20.html 67bcf2e6d67c89c4d5d9c605faa6e5b03e77693f
Pass html5lib_tests20.html 1e284d72f2de23e31280a0df936043340597d3d0
Pass html5lib_tests20.html 323a6d9f8d2f74e7e5b88599a87dc5673fb7a0b4
Pass html5lib_tests20.html 2dd72ef48808b29f998fdd3df6ce7ce18b8753e4
Pass html5lib_tests20.html c9e061e2d34063857d7332c66ff0d26beb2aced7
Pass html5lib_tests20.html bae8a941fceb91845187cb545c8e02b03af5570d
Pass html5lib_tests20.html bb36fb89d118b55c66f17b24ffff0ca09ccc939b
Pass html5lib_tests20.html 3fed75e1a7f46a6e2a74a078bfd955e7de05de4f
Pass html5lib_tests20.html 8cb9d8f92ba130618646d6fd1f307ca73f4e4add
Pass html5lib_tests20.html 2b9e6cb75876b4a33b77ae4b1bd3ef5e73c4a40e
Pass html5lib_tests20.html f95c6bf3f935fad9fc354f4cf6e0161d6ebfb08a
Pass html5lib_tests20.html 0b07b135bf8399742cc9e6f3d14b2ea32e3354d3
Pass html5lib_tests20.html 076d3588e85ce9566d9575d1564e72e8480fadc8
Pass html5lib_tests20.html dfad8fc515d74c19bad1ab72e7a03d59a11c7778
Pass html5lib_tests20.html 7ff774f225899091d6d64e5512ada13ce32dd72a
Pass html5lib_tests20.html 2fd8cab5e3cc4635be76e2d430ad6fe6e79b8167
Pass html5lib_tests20.html c7399a2e531694b47b436bd153823f60bba9071e
Pass html5lib_tests20.html bc4092e0e1aaa4b97464005963345b4b38e1f2a1
Pass html5lib_tests20.html d85e49fc5be07a699f3930464996d7ddb6a8e8bd
Pass html5lib_tests20.html 09cf43bae3a4d875da56c67a46cf79102b20b456
Pass html5lib_tests20.html f10ab9901d14c36846c9e6848abce19877f83094
Pass html5lib_tests20.html aa2a707a627408758a0ee845896ef088d6136013
Pass html5lib_tests20.html bb0737ce6cdbbcc055771e2400afda545d58778f
Pass html5lib_tests20.html 454bb6d0471536f7b91793ddbc786761b5733902
Pass html5lib_tests20.html 3c8ff013bf2e80392671760c8d444730b1923c0a
Pass html5lib_tests20.html 9a4f0cd0bdc672beb1c1c821599a11fc8a3d139d
Pass html5lib_tests20.html f5ca3a789b7451da3e6030443aee6fae734fc7a1
Pass html5lib_tests20.html ca8826661175c3a1ff7c6f1ebbfe646b238deb75
Pass html5lib_tests20.html 9e30ae7bbd1193deb0d3599c071960d395ca01f7
Pass html5lib_tests20.html 4417ddedee8e753fd6e911192458168d3b77d1e8
Pass html5lib_tests20.html 2de333e449ca13c462832e799e13795e2cf6e3e4
Pass html5lib_tests20.html 23d4d0aee62db4adc7381010d80776270a6db47b
Pass html5lib_tests20.html 5463426618ff46188d19595aa1c7fdd86c6909b3
Pass html5lib_tests20.html 2649b566bd2bccc59813286d647269ad251e2fdf
Pass html5lib_tests20.html 5df7907b99976e4051d1dd433e2bdbeb4ce200e3
Pass html5lib_tests20.html a7e70930137ff8338778253ac93dc66f11eef966
Pass html5lib_tests20.html b92100bddc318e13996fbe96c087c35152cbb4e3
Pass html5lib_tests20.html f55b68de8cf9ec17e0512a6caae94e0fbf151260
Pass html5lib_tests20.html 7fb0d4342e3ed3fabee650b83ce66ffb2f66c173
Pass html5lib_tests20.html 72a6100cd60dd49f780168137ed09e27a8090b34
Pass html5lib_tests20.html 09ee3f414d08c8a3923e7c72380868617d1a4554
Pass html5lib_tests20.html 3b854aa3549b6f5cac96176766fccd25c965b5fe
Pass html5lib_tests20.html bbc36dce52efacdede3cf4d94582ace2a3fca9fc
Pass html5lib_tests20.html d4b924764bf49ceb39aa4f63dc81b7c05bbda84d
Pass html5lib_tests20.html 19a6c1a25813323193c67a54904a41e389918f48