From c2d4dbebc2046db0217fc6cd9039206751e1ace0 Mon Sep 17 00:00:00 2001
From: Karl Seguin
Date: Sat, 11 Jul 2026 07:20:58 +0800
Subject: [PATCH] fix: When mutating attributes, use element's owner frame
Currently, we use the calling frame when mutating an element's attributes (e.g.
add/delete). This commit changes it to the element's owning frame. This should
fix both some errors and potential uaf.
---
src/browser/Frame.zig | 2 +-
.../tests/frames/cross_realm_attributes.html | 31 ++++++++++++++++
.../support/cross_realm_attributes.html | 18 ++++++++-
src/browser/webapi/Element.zig | 4 ++
src/browser/webapi/element/Attribute.zig | 37 +++++++++++--------
src/browser/webapi/element/html/Button.zig | 2 +-
src/browser/webapi/element/html/Form.zig | 2 +-
src/browser/webapi/element/html/Input.zig | 2 +-
8 files changed, 76 insertions(+), 22 deletions(-)
diff --git a/src/browser/Frame.zig b/src/browser/Frame.zig
index 23c2047c8..abe8642b9 100644
--- a/src/browser/Frame.zig
+++ b/src/browser/Frame.zig
@@ -3164,7 +3164,7 @@ pub fn submitForm(self: *Frame, submitter_: ?*Element, form_: ?*Element.Html.For
const target_frame = blk: {
const target_name = target_name_ orelse {
- break :blk form_element.asNode().ownerFrame(self);
+ break :blk form_element.ownerFrame(self);
};
break :blk self.resolveTargetFrame(target_name) orelse {
log.warn(.not_implemented, "target", .{ .type = self._type, .url = self.url, .target = target_name });
diff --git a/src/browser/tests/frames/cross_realm_attributes.html b/src/browser/tests/frames/cross_realm_attributes.html
index ac8722d0c..d06e5d45f 100644
--- a/src/browser/tests/frames/cross_realm_attributes.html
+++ b/src/browser/tests/frames/cross_realm_attributes.html
@@ -49,4 +49,35 @@ reads of iframe data-* returned null (WPT encoding/*).
testing.expectEqual(null, iwin.readAttr('data-parentset'));
});
+
+
- x
+ x