1
0
mirror of https://gitlab.gnome.org/GNOME/libxslt synced 2025-07-31 02:43:06 +03:00

Allow {URI}NCName syntax for user parameters

Thanks to Richard Smith <richard@ex-parrot.com> for the patch. Applied
with minor changes.

Fixes bug #764195.

https://bugzilla.gnome.org/show_bug.cgi?id=764195
This commit is contained in:
Nick Wellnhofer
2016-03-28 16:02:18 +02:00
parent 8137d94d1a
commit 891681e3e9
2 changed files with 28 additions and 13 deletions

View File

@ -1445,9 +1445,22 @@ xsltProcessUserParamInternal(xsltTransformContextPtr ctxt,
/*
* Name lookup
*/
name = xsltSplitQName(ctxt->dict, name, &prefix);
href = NULL;
if (name[0] == '{') {
int len = 0;
while ((name[len] != 0) && (name[len] != '}')) len++;
if (name[len] == 0) {
xsltTransformError(ctxt, style, NULL,
"user param : malformed parameter name : %s\n", name);
} else {
href = xmlDictLookup(ctxt->dict, &name[1], len-1);
name = xmlDictLookup(ctxt->dict, &name[len + 1], -1);
}
}
else {
name = xsltSplitQName(ctxt->dict, name, &prefix);
if (prefix != NULL) {
xmlNsPtr ns;
@ -1461,6 +1474,7 @@ xsltProcessUserParamInternal(xsltTransformContextPtr ctxt,
href = ns->href;
}
}
}
if (name == NULL)
return (-1);

View File

@ -523,6 +523,7 @@ static void usage(const char *name) {
#endif
printf("\t--encoding: the input document character encoding\n");
printf("\t--param name value : pass a (parameter,value) pair\n");
printf("\t name is a QName or a string of the form {URI}NCName.\n");
printf("\t value is an UTF8 XPath expression.\n");
printf("\t string values must be quoted like \"'string'\"\n or");
printf("\t use stringparam to avoid it\n");