summaryrefslogtreecommitdiffstats
path: root/chromium/third_party/libxslt/libxslt/variables.c
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/third_party/libxslt/libxslt/variables.c')
-rw-r--r--chromium/third_party/libxslt/libxslt/variables.c40
1 files changed, 27 insertions, 13 deletions
diff --git a/chromium/third_party/libxslt/libxslt/variables.c b/chromium/third_party/libxslt/libxslt/variables.c
index 3224116a137..345123d6ac1 100644
--- a/chromium/third_party/libxslt/libxslt/variables.c
+++ b/chromium/third_party/libxslt/libxslt/variables.c
@@ -1445,21 +1445,35 @@ xsltProcessUserParamInternal(xsltTransformContextPtr ctxt,
/*
* Name lookup
*/
-
- name = xsltSplitQName(ctxt->dict, name, &prefix);
href = NULL;
- if (prefix != NULL) {
- xmlNsPtr ns;
- ns = xmlSearchNs(style->doc, xmlDocGetRootElement(style->doc),
- prefix);
- if (ns == NULL) {
- xsltTransformError(ctxt, style, NULL,
- "user param : no namespace bound to prefix %s\n", prefix);
- href = NULL;
- } else {
- href = ns->href;
- }
+ 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;
+
+ ns = xmlSearchNs(style->doc, xmlDocGetRootElement(style->doc),
+ prefix);
+ if (ns == NULL) {
+ xsltTransformError(ctxt, style, NULL,
+ "user param : no namespace bound to prefix %s\n", prefix);
+ href = NULL;
+ } else {
+ href = ns->href;
+ }
+ }
}
if (name == NULL)