From d91bec08c37144a97531c1bb2e1a7d356d75b158 Mon Sep 17 00:00:00 2001 From: Karl Seguin Date: Fri, 13 Feb 2026 13:47:26 +0800 Subject: [PATCH 1/2] Add missing validation to range setStart and setEnd Fixes the remaining failing cases (400!) of WPT dom/ranges/Range-set.html --- src/browser/webapi/Range.zig | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/browser/webapi/Range.zig b/src/browser/webapi/Range.zig index 1d1f6442..85d2ee70 100644 --- a/src/browser/webapi/Range.zig +++ b/src/browser/webapi/Range.zig @@ -37,6 +37,10 @@ pub fn init(page: *Page) !*Range { } pub fn setStart(self: *Range, node: *Node, offset: u32) !void { + if (node._type == .document_type) { + return error.InvalidNodeType; + } + if (offset > node.getLength()) { return error.IndexSizeError; } @@ -54,6 +58,10 @@ pub fn setStart(self: *Range, node: *Node, offset: u32) !void { } pub fn setEnd(self: *Range, node: *Node, offset: u32) !void { + if (node._type == .document_type) { + return error.InvalidNodeType; + } + // Validate offset if (offset > node.getLength()) { return error.IndexSizeError; From da1eb71ad0ba1fb074137eed87a29c25d6bfdd59 Mon Sep 17 00:00:00 2001 From: Karl Seguin Date: Fri, 13 Feb 2026 14:54:43 +0800 Subject: [PATCH 2/2] Add missing validation to Range.comparePoint Also re-order the validation to match what WPT expects. Fixes all cases in dom/ranges/Range-comparePoint.html --- src/browser/webapi/Range.zig | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/browser/webapi/Range.zig b/src/browser/webapi/Range.zig index 85d2ee70..48b72ae9 100644 --- a/src/browser/webapi/Range.zig +++ b/src/browser/webapi/Range.zig @@ -186,10 +186,6 @@ pub fn compareBoundaryPoints(self: *const Range, how_raw: i32, source_range: *co } pub fn comparePoint(self: *const Range, node: *Node, offset: u32) !i16 { - if (offset > node.getLength()) { - return error.IndexSizeError; - } - // Check if node is in a different tree than the range const node_root = node.getRootNode(null); const start_root = self._proto._start_container.getRootNode(null); @@ -197,6 +193,14 @@ pub fn comparePoint(self: *const Range, node: *Node, offset: u32) !i16 { return error.WrongDocument; } + if (node._type == .document_type) { + return error.InvalidNodeType; + } + + if (offset > node.getLength()) { + return error.IndexSizeError; + } + // Compare point with start boundary const cmp_start = AbstractRange.compareBoundaryPoints( node,