summaryrefslogtreecommitdiffstats
path: root/src/xplist.c
diff options
context:
space:
mode:
authorGravatar Nikias Bassen2026-11-07 12:29:06 +0100
committerGravatar Nikias Bassen2026-11-07 12:29:06 +0100
commit3cfe22475244cc1e924b6fd189234c130d6c5914 (patch)
tree46e0e4af9d761e3183bccbedc956cf58396dad4c /src/xplist.c
parent678b1a34693b86ae1787fa470dcb7203ffd0ef3f (diff)
downloadlibplist-3cfe22475244cc1e924b6fd189234c130d6c5914.tar.gz
libplist-3cfe22475244cc1e924b6fd189234c130d6c5914.tar.bz2
xplist: accept a self-closing <key/> as an empty keyHEADmaster
Diffstat (limited to 'src/xplist.c')
-rw-r--r--src/xplist.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/src/xplist.c b/src/xplist.c
index adf3f40..92ca15d 100644
--- a/src/xplist.c
+++ b/src/xplist.c
@@ -1405,6 +1405,17 @@ static plist_err_t node_from_xml(parse_ctx ctx, plist_t *plist)
data->length = length;
}
} else {
+ if (!strcmp(tag, XPLIST_KEY) && !keyname && parent && (plist_get_node_type(parent) == PLIST_DICT)) {
+ keyname = strdup("");
+ if (!keyname) {
+ PLIST_XML_ERR("failed to allocate key name\n");
+ ctx->err = PLIST_ERR_NO_MEM;
+ goto err_out;
+ }
+ plist_free(subnode);
+ subnode = NULL;
+ continue;
+ }
data->strval = strdup("");
data->length = 0;
}