Skip to content

Commit 09fbbc1

Browse files
committed
netsurf: node's attributes can be null
1 parent 88f7687 commit 09fbbc1

File tree

3 files changed

+16
-15
lines changed

3 files changed

+16
-15
lines changed

src/browser/dom/element.zig

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,8 @@ pub const Element = struct {
9999
}
100100

101101
pub fn get_attributes(self: *parser.Element) !*parser.NamedNodeMap {
102-
return try parser.nodeGetAttributes(parser.elementToNode(self));
102+
// An element must have non-nil attributes.
103+
return try parser.nodeGetAttributes(parser.elementToNode(self)) orelse unreachable;
103104
}
104105

105106
pub fn get_innerHTML(self: *parser.Element, state: *SessionState) ![]const u8 {

src/browser/dump.zig

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -38,18 +38,18 @@ pub fn writeNode(node: *parser.Node, writer: anytype) anyerror!void {
3838
try writer.writeAll(tag);
3939

4040
// write the attributes
41-
const map = try parser.nodeGetAttributes(node);
42-
const ln = try parser.namedNodeMapGetLength(map);
43-
var i: u32 = 0;
44-
while (i < ln) {
45-
const attr = try parser.namedNodeMapItem(map, i) orelse break;
46-
try writer.writeAll(" ");
47-
try writer.writeAll(try parser.attributeGetName(attr));
48-
try writer.writeAll("=\"");
49-
const attribute_value = try parser.attributeGetValue(attr) orelse "";
50-
try writeEscapedAttributeValue(writer, attribute_value);
51-
try writer.writeAll("\"");
52-
i += 1;
41+
const _map = try parser.nodeGetAttributes(node);
42+
if (_map) |map| {
43+
const ln = try parser.namedNodeMapGetLength(map);
44+
for (0..ln) |i| {
45+
const attr = try parser.namedNodeMapItem(map, @intCast(i)) orelse break;
46+
try writer.writeAll(" ");
47+
try writer.writeAll(try parser.attributeGetName(attr));
48+
try writer.writeAll("=\"");
49+
const attribute_value = try parser.attributeGetValue(attr) orelse "";
50+
try writeEscapedAttributeValue(writer, attribute_value);
51+
try writer.writeAll("\"");
52+
}
5353
}
5454

5555
try writer.writeAll(">");

src/browser/netsurf.zig

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1338,11 +1338,11 @@ pub fn nodeHasAttributes(node: *Node) !bool {
13381338
return res;
13391339
}
13401340

1341-
pub fn nodeGetAttributes(node: *Node) !*NamedNodeMap {
1341+
pub fn nodeGetAttributes(node: *Node) !?*NamedNodeMap {
13421342
var res: ?*NamedNodeMap = undefined;
13431343
const err = nodeVtable(node).dom_node_get_attributes.?(node, &res);
13441344
try DOMErr(err);
1345-
return res.?;
1345+
return res;
13461346
}
13471347

13481348
pub fn nodeGetNamespace(node: *Node) !?[]const u8 {

0 commit comments

Comments
 (0)