Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(89)

Side by Side Diff: third_party/libxslt/libexslt/functions.c

Issue 1193533007: Upgrade to libxml 2.9.2 and libxslt 1.1.28 (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: remove suppressions, have landed in blink now Created 5 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 #define IN_LIBEXSLT 1 #define IN_LIBEXSLT
2 #include "libexslt/libexslt.h" 2 #include "libexslt/libexslt.h"
3 3
4 #if defined(WIN32) && !defined (__CYGWIN__) && (!__MINGW32__) 4 #if defined(WIN32) && !defined (__CYGWIN__) && (!__MINGW32__)
5 #include <win32config.h> 5 #include <win32config.h>
6 #else 6 #else
7 #include "config.h" 7 #include "config.h"
8 #endif 8 #endif
9 9
10 #include <string.h> 10 #include <string.h>
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
99 exsltFuncRegisterImportFunc (exsltFuncFunctionData *data, 99 exsltFuncRegisterImportFunc (exsltFuncFunctionData *data,
100 exsltFuncImportRegData *ch, 100 exsltFuncImportRegData *ch,
101 const xmlChar *URI, const xmlChar *name, 101 const xmlChar *URI, const xmlChar *name,
102 ATTRIBUTE_UNUSED const xmlChar *ignored) { 102 ATTRIBUTE_UNUSED const xmlChar *ignored) {
103 exsltFuncFunctionData *func=NULL; 103 exsltFuncFunctionData *func=NULL;
104 104
105 if ((data == NULL) || (ch == NULL) || (URI == NULL) || (name == NULL)) 105 if ((data == NULL) || (ch == NULL) || (URI == NULL) || (name == NULL))
106 return; 106 return;
107 107
108 if (ch->ctxt == NULL || ch->hash == NULL) 108 if (ch->ctxt == NULL || ch->hash == NULL)
109 » return; 109 » return;
110 110
111 /* Check if already present */ 111 /* Check if already present */
112 func = (exsltFuncFunctionData*)xmlHashLookup2(ch->hash, URI, name); 112 func = (exsltFuncFunctionData*)xmlHashLookup2(ch->hash, URI, name);
113 if (func == NULL) { /* Not yet present - copy it in */ 113 if (func == NULL) { /* Not yet present - copy it in */
114 » func = exsltFuncNewFunctionData(); 114 » func = exsltFuncNewFunctionData();
115 if (func == NULL)
116 return;
115 memcpy(func, data, sizeof(exsltFuncFunctionData)); 117 memcpy(func, data, sizeof(exsltFuncFunctionData));
116 if (xmlHashAddEntry2(ch->hash, URI, name, func) < 0) { 118 if (xmlHashAddEntry2(ch->hash, URI, name, func) < 0) {
117 xsltGenericError(xsltGenericErrorContext, 119 xsltGenericError(xsltGenericErrorContext,
118 » » "Failed to register function {%s}%s\n", 120 » » "Failed to register function {%s}%s\n",
119 URI, name); 121 URI, name);
120 } else { /* Do the registration */ 122 } else { /* Do the registration */
121 xsltGenericDebug(xsltGenericDebugContext, 123 xsltGenericDebug(xsltGenericDebugContext,
122 "exsltFuncRegisterImportFunc: register {%s}%s\n", 124 "exsltFuncRegisterImportFunc: register {%s}%s\n",
123 URI, name); 125 URI, name);
124 xsltRegisterExtFunction(ch->ctxt, name, URI, 126 xsltRegisterExtFunction(ch->ctxt, name, URI,
125 exsltFuncFunctionFunction); 127 exsltFuncFunctionFunction);
126 } 128 }
127 } 129 }
128 } 130 }
(...skipping 10 matching lines...) Expand all
139 * functions with lower import precedence. 141 * functions with lower import precedence.
140 * 142 *
141 * Returns the data for this transformation 143 * Returns the data for this transformation
142 */ 144 */
143 static exsltFuncData * 145 static exsltFuncData *
144 exsltFuncInit (xsltTransformContextPtr ctxt, const xmlChar *URI) { 146 exsltFuncInit (xsltTransformContextPtr ctxt, const xmlChar *URI) {
145 exsltFuncData *ret; 147 exsltFuncData *ret;
146 xsltStylesheetPtr tmp; 148 xsltStylesheetPtr tmp;
147 exsltFuncImportRegData ch; 149 exsltFuncImportRegData ch;
148 xmlHashTablePtr hash; 150 xmlHashTablePtr hash;
149 151
150 ret = (exsltFuncData *) xmlMalloc (sizeof(exsltFuncData)); 152 ret = (exsltFuncData *) xmlMalloc (sizeof(exsltFuncData));
151 if (ret == NULL) { 153 if (ret == NULL) {
152 xsltGenericError(xsltGenericErrorContext, 154 xsltGenericError(xsltGenericErrorContext,
153 "exsltFuncInit: not enough memory\n"); 155 "exsltFuncInit: not enough memory\n");
154 return(NULL); 156 return(NULL);
155 } 157 }
156 memset(ret, 0, sizeof(exsltFuncData)); 158 memset(ret, 0, sizeof(exsltFuncData));
157 159
158 ret->result = NULL; 160 ret->result = NULL;
159 ret->error = 0; 161 ret->error = 0;
160 162
161 ch.hash = (xmlHashTablePtr) xsltStyleGetExtData(ctxt->style, URI); 163 ch.hash = (xmlHashTablePtr) xsltStyleGetExtData(ctxt->style, URI);
162 ret->funcs = ch.hash; 164 ret->funcs = ch.hash;
163 xmlHashScanFull(ch.hash, (xmlHashScannerFull) exsltFuncRegisterFunc, ctxt); 165 xmlHashScanFull(ch.hash, (xmlHashScannerFull) exsltFuncRegisterFunc, ctxt);
164 tmp = ctxt->style; 166 tmp = ctxt->style;
165 ch.ctxt = ctxt; 167 ch.ctxt = ctxt;
166 while ((tmp=xsltNextImport(tmp))!=NULL) { 168 while ((tmp=xsltNextImport(tmp))!=NULL) {
167 hash = xsltGetExtInfo(tmp, URI); 169 hash = xsltGetExtInfo(tmp, URI);
168 if (hash != NULL) { 170 if (hash != NULL) {
169 » xmlHashScanFull(hash, 171 » xmlHashScanFull(hash,
170 (xmlHashScannerFull) exsltFuncRegisterImportFunc, &ch); 172 (xmlHashScannerFull) exsltFuncRegisterImportFunc, &ch);
171 } 173 }
172 } 174 }
173 175
174 return(ret); 176 return(ret);
175 } 177 }
176 178
177 /** 179 /**
178 * exsltFuncShutdown: 180 * exsltFuncShutdown:
179 * @ctxt: an XSLT transformation context 181 * @ctxt: an XSLT transformation context
180 * @URI: the namespace URI for the extension 182 * @URI: the namespace URI for the extension
181 * @data: the module data to free up 183 * @data: the module data to free up
182 * 184 *
183 * Shutdown the EXSLT - Functions module 185 * Shutdown the EXSLT - Functions module
184 * Called at transformation-time. 186 * Called at transformation-time.
185 */ 187 */
186 static void 188 static void
187 exsltFuncShutdown (xsltTransformContextPtr ctxt ATTRIBUTE_UNUSED, 189 exsltFuncShutdown (xsltTransformContextPtr ctxt ATTRIBUTE_UNUSED,
188 const xmlChar *URI ATTRIBUTE_UNUSED, 190 const xmlChar *URI ATTRIBUTE_UNUSED,
189 exsltFuncData *data) { 191 exsltFuncData *data) {
190 if (data->result != NULL) 192 if (data->result != NULL)
191 xmlXPathFreeObject(data->result); 193 xmlXPathFreeObject(data->result);
192 xmlFree(data); 194 xmlFree(data);
(...skipping 12 matching lines...) Expand all
205 static xmlHashTablePtr 207 static xmlHashTablePtr
206 exsltFuncStyleInit (xsltStylesheetPtr style ATTRIBUTE_UNUSED, 208 exsltFuncStyleInit (xsltStylesheetPtr style ATTRIBUTE_UNUSED,
207 const xmlChar *URI ATTRIBUTE_UNUSED) { 209 const xmlChar *URI ATTRIBUTE_UNUSED) {
208 return xmlHashCreate(1); 210 return xmlHashCreate(1);
209 } 211 }
210 212
211 /** 213 /**
212 * exsltFuncStyleShutdown: 214 * exsltFuncStyleShutdown:
213 * @style: an XSLT stylesheet 215 * @style: an XSLT stylesheet
214 * @URI: the namespace URI for the extension 216 * @URI: the namespace URI for the extension
215 * @data: the stylesheet data to free up 217 * @data: the stylesheet data to free up
216 * 218 *
217 * Shutdown the EXSLT - Function module 219 * Shutdown the EXSLT - Function module
218 * Called at compile-time. 220 * Called at compile-time.
219 */ 221 */
220 static void 222 static void
221 exsltFuncStyleShutdown (xsltStylesheetPtr style ATTRIBUTE_UNUSED, 223 exsltFuncStyleShutdown (xsltStylesheetPtr style ATTRIBUTE_UNUSED,
222 const xmlChar *URI ATTRIBUTE_UNUSED, 224 const xmlChar *URI ATTRIBUTE_UNUSED,
223 xmlHashTablePtr data) { 225 xmlHashTablePtr data) {
224 xmlHashFree(data, (xmlHashDeallocator) xmlFree); 226 xmlHashFree(data, (xmlHashDeallocator) xmlFree);
225 } 227 }
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after
343 * order (since a variable is "in scope" as soon as it is declared). 345 * order (since a variable is "in scope" as soon as it is declared).
344 * However, on entry to this routine, the values (from the caller) are 346 * However, on entry to this routine, the values (from the caller) are
345 * in reverse order (held on the XPath context variable stack). To 347 * in reverse order (held on the XPath context variable stack). To
346 * accomplish what is required, I have added code to pop the XPath 348 * accomplish what is required, I have added code to pop the XPath
347 * objects off of the stack at the beginning and save them, then use 349 * objects off of the stack at the beginning and save them, then use
348 * them (in the reverse order) as the params are evaluated. This 350 * them (in the reverse order) as the params are evaluated. This
349 * requires an xmlMalloc/xmlFree for each param set by the caller, 351 * requires an xmlMalloc/xmlFree for each param set by the caller,
350 * which is not very nice. There is probably a much better solution 352 * which is not very nice. There is probably a much better solution
351 * (like change other code to delay the evaluation). 353 * (like change other code to delay the evaluation).
352 */ 354 */
353 /* 355 /*
354 * In order to give the function params and variables a new 'scope' 356 * In order to give the function params and variables a new 'scope'
355 * we change varsBase in the context. 357 * we change varsBase in the context.
356 */ 358 */
357 oldBase = tctxt->varsBase; 359 oldBase = tctxt->varsBase;
358 tctxt->varsBase = tctxt->varsNr; 360 tctxt->varsBase = tctxt->varsNr;
359 /* If there are any parameters */ 361 /* If there are any parameters */
360 if (paramNode != NULL) { 362 if (paramNode != NULL) {
361 /* Fetch the stored argument values from the caller */ 363 /* Fetch the stored argument values from the caller */
362 for (i = 0; i < nargs; i++) { 364 for (i = 0; i < nargs; i++) {
363 savedObj = xmlMalloc(sizeof(struct objChain)); 365 savedObj = xmlMalloc(sizeof(struct objChain));
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
404 fake = xmlNewDocNode(tctxt->output, NULL, 406 fake = xmlNewDocNode(tctxt->output, NULL,
405 (const xmlChar *)"fake", NULL); 407 (const xmlChar *)"fake", NULL);
406 oldInsert = tctxt->insert; 408 oldInsert = tctxt->insert;
407 tctxt->insert = fake; 409 tctxt->insert = fake;
408 xsltApplyOneTemplate (tctxt, xmlXPathGetContextNode(ctxt), 410 xsltApplyOneTemplate (tctxt, xmlXPathGetContextNode(ctxt),
409 func->content, NULL, NULL); 411 func->content, NULL, NULL);
410 xsltLocalVariablePop(tctxt, tctxt->varsBase, -2); 412 xsltLocalVariablePop(tctxt, tctxt->varsBase, -2);
411 tctxt->insert = oldInsert; 413 tctxt->insert = oldInsert;
412 tctxt->varsBase = oldBase; /* restore original scope */ 414 tctxt->varsBase = oldBase; /* restore original scope */
413 if (params != NULL) 415 if (params != NULL)
414 » xsltFreeStackElemList(params); 416 » xsltFreeStackElemList(params);
415 417
416 if (data->error != 0) 418 if (data->error != 0)
417 goto error; 419 goto error;
418 420
419 if (data->result != NULL) { 421 if (data->result != NULL) {
420 ret = data->result; 422 ret = data->result;
421 } else 423 } else
422 ret = xmlXPathNewCString(""); 424 ret = xmlXPathNewCString("");
423 425
424 data->result = oldResult; 426 data->result = oldResult;
(...skipping 27 matching lines...) Expand all
452 } 454 }
453 455
454 456
455 static void 457 static void
456 exsltFuncFunctionComp (xsltStylesheetPtr style, xmlNodePtr inst) { 458 exsltFuncFunctionComp (xsltStylesheetPtr style, xmlNodePtr inst) {
457 xmlChar *name, *prefix; 459 xmlChar *name, *prefix;
458 xmlNsPtr ns; 460 xmlNsPtr ns;
459 xmlHashTablePtr data; 461 xmlHashTablePtr data;
460 exsltFuncFunctionData *func; 462 exsltFuncFunctionData *func;
461 463
462 if ((style == NULL) || (inst == NULL)) 464 if ((style == NULL) || (inst == NULL) || (inst->type != XML_ELEMENT_NODE))
463 return; 465 return;
464 466
465
466 { 467 {
467 xmlChar *qname; 468 xmlChar *qname;
468 469
469 qname = xmlGetProp(inst, (const xmlChar *) "name"); 470 qname = xmlGetProp(inst, (const xmlChar *) "name");
470 name = xmlSplitQName2 (qname, &prefix); 471 name = xmlSplitQName2 (qname, &prefix);
471 xmlFree(qname); 472 xmlFree(qname);
472 } 473 }
473 if ((name == NULL) || (prefix == NULL)) { 474 if ((name == NULL) || (prefix == NULL)) {
474 xsltGenericError(xsltGenericErrorContext, 475 xsltGenericError(xsltGenericErrorContext,
475 "func:function: not a QName\n"); 476 "func:function: not a QName\n");
476 if (name != NULL) 477 if (name != NULL)
477 xmlFree(name); 478 xmlFree(name);
478 return; 479 return;
479 } 480 }
480 /* namespace lookup */ 481 /* namespace lookup */
481 ns = xmlSearchNs (inst->doc, inst, prefix); 482 ns = xmlSearchNs (inst->doc, inst, prefix);
482 if (ns == NULL) { 483 if (ns == NULL) {
483 xsltGenericError(xsltGenericErrorContext, 484 xsltGenericError(xsltGenericErrorContext,
484 "func:function: undeclared prefix %s\n", 485 "func:function: undeclared prefix %s\n",
485 prefix); 486 prefix);
486 xmlFree(name); 487 xmlFree(name);
487 xmlFree(prefix); 488 xmlFree(prefix);
488 return; 489 return;
489 } 490 }
490 xmlFree(prefix); 491 xmlFree(prefix);
491 492
493 xsltParseTemplateContent(style, inst);
494
492 /* 495 /*
493 * Create function data 496 * Create function data
494 */ 497 */
495 func = exsltFuncNewFunctionData(); 498 func = exsltFuncNewFunctionData();
499 if (func == NULL) {
500 xmlFree(name);
501 return;
502 }
496 func->content = inst->children; 503 func->content = inst->children;
497 while (IS_XSLT_ELEM(func->content) && 504 while (IS_XSLT_ELEM(func->content) &&
498 IS_XSLT_NAME(func->content, "param")) { 505 IS_XSLT_NAME(func->content, "param")) {
499 func->content = func->content->next; 506 func->content = func->content->next;
500 func->nargs++; 507 func->nargs++;
501 } 508 }
502 509
503 xsltParseTemplateContent(style, inst);
504
505 /* 510 /*
506 * Register the function data such that it can be retrieved 511 * Register the function data such that it can be retrieved
507 * by exslFuncFunctionFunction 512 * by exslFuncFunctionFunction
508 */ 513 */
509 #ifdef XSLT_REFACTORED 514 #ifdef XSLT_REFACTORED
510 /* 515 /*
511 * Ensure that the hash table will be stored in the *current* 516 * Ensure that the hash table will be stored in the *current*
512 * stylesheet level in order to correctly evaluate the 517 * stylesheet level in order to correctly evaluate the
513 * import precedence. 518 * import precedence.
514 */ 519 */
(...skipping 24 matching lines...) Expand all
539 xmlFree(name); 544 xmlFree(name);
540 } 545 }
541 546
542 static xsltElemPreCompPtr 547 static xsltElemPreCompPtr
543 exsltFuncResultComp (xsltStylesheetPtr style, xmlNodePtr inst, 548 exsltFuncResultComp (xsltStylesheetPtr style, xmlNodePtr inst,
544 xsltTransformFunction function) { 549 xsltTransformFunction function) {
545 xmlNodePtr test; 550 xmlNodePtr test;
546 xmlChar *sel; 551 xmlChar *sel;
547 exsltFuncResultPreComp *ret; 552 exsltFuncResultPreComp *ret;
548 553
554 if ((style == NULL) || (inst == NULL) || (inst->type != XML_ELEMENT_NODE))
555 return (NULL);
556
549 /* 557 /*
550 * "Validity" checking 558 * "Validity" checking
551 */ 559 */
552 /* it is an error to have any following sibling elements aside 560 /* it is an error to have any following sibling elements aside
553 * from the xsl:fallback element. 561 * from the xsl:fallback element.
554 */ 562 */
555 for (test = inst->next; test != NULL; test = test->next) { 563 for (test = inst->next; test != NULL; test = test->next) {
556 if (test->type != XML_ELEMENT_NODE) 564 if (test->type != XML_ELEMENT_NODE)
557 continue; 565 continue;
558 if (IS_XSLT_ELEM(test) && IS_XSLT_NAME(test, "fallback")) 566 if (IS_XSLT_ELEM(test) && IS_XSLT_NAME(test, "fallback"))
559 continue; 567 continue;
560 xsltGenericError(xsltGenericErrorContext, 568 xsltGenericError(xsltGenericErrorContext,
561 "exsltFuncResultElem: only xsl:fallback is " 569 "exsltFuncResultElem: only xsl:fallback is "
562 "allowed to follow func:result\n"); 570 "allowed to follow func:result\n");
571 style->errors++;
563 return (NULL); 572 return (NULL);
564 } 573 }
565 /* it is an error for a func:result element to not be a descendant 574 /* it is an error for a func:result element to not be a descendant
566 * of func:function. 575 * of func:function.
567 * it is an error if a func:result occurs within a func:result 576 * it is an error if a func:result occurs within a func:result
568 * element. 577 * element.
569 * it is an error if instanciating the content of a variable 578 * it is an error if instanciating the content of a variable
570 * binding element (i.e. xsl:variable, xsl:param) results in the 579 * binding element (i.e. xsl:variable, xsl:param) results in the
571 * instanciation of a func:result element. 580 * instanciation of a func:result element.
572 */ 581 */
573 for (test = inst->parent; test != NULL; test = test->parent) { 582 for (test = inst->parent; test != NULL; test = test->parent) {
574 if (IS_XSLT_ELEM(test) && 583 if (IS_XSLT_ELEM(test) &&
575 IS_XSLT_NAME(test, "stylesheet")) { 584 IS_XSLT_NAME(test, "stylesheet")) {
576 xsltGenericError(xsltGenericErrorContext, 585 xsltGenericError(xsltGenericErrorContext,
577 "func:result element not a descendant " 586 "func:result element not a descendant "
578 "of a func:function\n"); 587 "of a func:function\n");
588 style->errors++;
579 return (NULL); 589 return (NULL);
580 } 590 }
581 if ((test->ns != NULL) && 591 if ((test->ns != NULL) &&
582 (xmlStrEqual(test->ns->href, EXSLT_FUNCTIONS_NAMESPACE))) { 592 (xmlStrEqual(test->ns->href, EXSLT_FUNCTIONS_NAMESPACE))) {
583 if (xmlStrEqual(test->name, (const xmlChar *) "function")) { 593 if (xmlStrEqual(test->name, (const xmlChar *) "function")) {
584 break; 594 break;
585 } 595 }
586 if (xmlStrEqual(test->name, (const xmlChar *) "result")) { 596 if (xmlStrEqual(test->name, (const xmlChar *) "result")) {
587 xsltGenericError(xsltGenericErrorContext, 597 xsltGenericError(xsltGenericErrorContext,
588 "func:result element not allowed within" 598 "func:result element not allowed within"
589 " another func:result element\n"); 599 " another func:result element\n");
600 style->errors++;
590 return (NULL); 601 return (NULL);
591 } 602 }
592 } 603 }
593 if (IS_XSLT_ELEM(test) && 604 if (IS_XSLT_ELEM(test) &&
594 (IS_XSLT_NAME(test, "variable") || 605 (IS_XSLT_NAME(test, "variable") ||
595 IS_XSLT_NAME(test, "param"))) { 606 IS_XSLT_NAME(test, "param"))) {
596 xsltGenericError(xsltGenericErrorContext, 607 xsltGenericError(xsltGenericErrorContext,
597 "func:result element not allowed within" 608 "func:result element not allowed within"
598 " a variable binding element\n"); 609 " a variable binding element\n");
610 style->errors++;
599 return (NULL); 611 return (NULL);
600 } 612 }
601 } 613 }
602 614
603 /* 615 /*
604 * Precomputation 616 * Precomputation
605 */ 617 */
606 ret = (exsltFuncResultPreComp *) 618 ret = (exsltFuncResultPreComp *)
607 xmlMalloc (sizeof(exsltFuncResultPreComp)); 619 xmlMalloc (sizeof(exsltFuncResultPreComp));
608 if (ret == NULL) { 620 if (ret == NULL) {
609 xsltPrintErrorContext(NULL, NULL, NULL); 621 xsltPrintErrorContext(NULL, NULL, NULL);
610 xsltGenericError(xsltGenericErrorContext, 622 xsltGenericError(xsltGenericErrorContext,
611 "exsltFuncResultComp : malloc failed\n"); 623 "exsltFuncResultComp : malloc failed\n");
624 style->errors++;
612 return (NULL); 625 return (NULL);
613 } 626 }
614 memset(ret, 0, sizeof(exsltFuncResultPreComp)); 627 memset(ret, 0, sizeof(exsltFuncResultPreComp));
615 628
616 xsltInitElemPreComp ((xsltElemPreCompPtr) ret, style, inst, function, 629 xsltInitElemPreComp ((xsltElemPreCompPtr) ret, style, inst, function,
617 (xsltElemPreCompDeallocator) exsltFreeFuncResultPreComp); 630 (xsltElemPreCompDeallocator) exsltFreeFuncResultPreComp);
618 ret->select = NULL; 631 ret->select = NULL;
619 632
620 /* 633 /*
621 * Precompute the select attribute 634 * Precompute the select attribute
(...skipping 15 matching lines...) Expand all
637 } 650 }
638 return ((xsltElemPreCompPtr) ret); 651 return ((xsltElemPreCompPtr) ret);
639 } 652 }
640 653
641 static void 654 static void
642 exsltFuncResultElem (xsltTransformContextPtr ctxt, 655 exsltFuncResultElem (xsltTransformContextPtr ctxt,
643 xmlNodePtr node ATTRIBUTE_UNUSED, xmlNodePtr inst, 656 xmlNodePtr node ATTRIBUTE_UNUSED, xmlNodePtr inst,
644 exsltFuncResultPreComp *comp) { 657 exsltFuncResultPreComp *comp) {
645 exsltFuncData *data; 658 exsltFuncData *data;
646 xmlXPathObjectPtr ret; 659 xmlXPathObjectPtr ret;
647 660
648 661
649 /* It is an error if instantiating the content of the 662 /* It is an error if instantiating the content of the
650 * func:function element results in the instantiation of more than 663 * func:function element results in the instantiation of more than
651 * one func:result elements. 664 * one func:result elements.
652 */ 665 */
653 data = (exsltFuncData *) xsltGetExtData (ctxt, EXSLT_FUNCTIONS_NAMESPACE); 666 data = (exsltFuncData *) xsltGetExtData (ctxt, EXSLT_FUNCTIONS_NAMESPACE);
654 if (data == NULL) { 667 if (data == NULL) {
655 xsltGenericError(xsltGenericErrorContext, 668 xsltGenericError(xsltGenericErrorContext,
656 "exsltFuncReturnElem: data == NULL\n"); 669 "exsltFuncReturnElem: data == NULL\n");
657 return; 670 return;
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
713 xmlNodePtr oldInsert; 726 xmlNodePtr oldInsert;
714 xmlDocPtr container; 727 xmlDocPtr container;
715 728
716 container = xsltCreateRVT(ctxt); 729 container = xsltCreateRVT(ctxt);
717 if (container == NULL) { 730 if (container == NULL) {
718 xsltGenericError(xsltGenericErrorContext, 731 xsltGenericError(xsltGenericErrorContext,
719 "exsltFuncResultElem: out of memory\n"); 732 "exsltFuncResultElem: out of memory\n");
720 data->error = 1; 733 data->error = 1;
721 return; 734 return;
722 } 735 }
723 » xsltRegisterLocalRVT(ctxt, container);» 736 » xsltRegisterLocalRVT(ctxt, container);
724 737
725 oldInsert = ctxt->insert; 738 oldInsert = ctxt->insert;
726 ctxt->insert = (xmlNodePtr) container; 739 ctxt->insert = (xmlNodePtr) container;
727 xsltApplyOneTemplate (ctxt, ctxt->xpathCtxt->node, 740 xsltApplyOneTemplate (ctxt, ctxt->xpathCtxt->node,
728 inst->children, NULL, NULL); 741 inst->children, NULL, NULL);
729 ctxt->insert = oldInsert; 742 ctxt->insert = oldInsert;
730 743
731 ret = xmlXPathNewValueTree((xmlNodePtr) container); 744 ret = xmlXPathNewValueTree((xmlNodePtr) container);
732 if (ret == NULL) { 745 if (ret == NULL) {
733 xsltGenericError(xsltGenericErrorContext, 746 xsltGenericError(xsltGenericErrorContext,
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
765 (xsltStyleExtShutdownFunction) exsltFuncStyleShutdown); 778 (xsltStyleExtShutdownFunction) exsltFuncStyleShutdown);
766 779
767 xsltRegisterExtModuleTopLevel ((const xmlChar *) "function", 780 xsltRegisterExtModuleTopLevel ((const xmlChar *) "function",
768 EXSLT_FUNCTIONS_NAMESPACE, 781 EXSLT_FUNCTIONS_NAMESPACE,
769 exsltFuncFunctionComp); 782 exsltFuncFunctionComp);
770 xsltRegisterExtModuleElement ((const xmlChar *) "result", 783 xsltRegisterExtModuleElement ((const xmlChar *) "result",
771 EXSLT_FUNCTIONS_NAMESPACE, 784 EXSLT_FUNCTIONS_NAMESPACE,
772 (xsltPreComputeFunction)exsltFuncResultComp, 785 (xsltPreComputeFunction)exsltFuncResultComp,
773 (xsltTransformFunction) exsltFuncResultElem); 786 (xsltTransformFunction) exsltFuncResultElem);
774 } 787 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698