netsurf: node's attributes can be null

This commit is contained in:
Pierre Tachoire
2025-04-30 15:55:34 +02:00
parent 88f7687646
commit 09fbbc1e17
3 changed files with 16 additions and 15 deletions

View File

@@ -99,7 +99,8 @@ pub const Element = struct {
}
pub fn get_attributes(self: *parser.Element) !*parser.NamedNodeMap {
return try parser.nodeGetAttributes(parser.elementToNode(self));
// An element must have non-nil attributes.
return try parser.nodeGetAttributes(parser.elementToNode(self)) orelse unreachable;
}
pub fn get_innerHTML(self: *parser.Element, state: *SessionState) ![]const u8 {

View File

@@ -38,18 +38,18 @@ pub fn writeNode(node: *parser.Node, writer: anytype) anyerror!void {
try writer.writeAll(tag);
// write the attributes
const map = try parser.nodeGetAttributes(node);
const _map = try parser.nodeGetAttributes(node);
if (_map) |map| {
const ln = try parser.namedNodeMapGetLength(map);
var i: u32 = 0;
while (i < ln) {
const attr = try parser.namedNodeMapItem(map, i) orelse break;
for (0..ln) |i| {
const attr = try parser.namedNodeMapItem(map, @intCast(i)) orelse break;
try writer.writeAll(" ");
try writer.writeAll(try parser.attributeGetName(attr));
try writer.writeAll("=\"");
const attribute_value = try parser.attributeGetValue(attr) orelse "";
try writeEscapedAttributeValue(writer, attribute_value);
try writer.writeAll("\"");
i += 1;
}
}
try writer.writeAll(">");

View File

@@ -1338,11 +1338,11 @@ pub fn nodeHasAttributes(node: *Node) !bool {
return res;
}
pub fn nodeGetAttributes(node: *Node) !*NamedNodeMap {
pub fn nodeGetAttributes(node: *Node) !?*NamedNodeMap {
var res: ?*NamedNodeMap = undefined;
const err = nodeVtable(node).dom_node_get_attributes.?(node, &res);
try DOMErr(err);
return res.?;
return res;
}
pub fn nodeGetNamespace(node: *Node) !?[]const u8 {