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

Side by Side Diff: third_party/libxml/src/testC14N.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: no iconv 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
« no previous file with comments | « third_party/libxml/src/testAutomata.c ('k') | third_party/libxml/src/testHTML.c » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Canonical XML implementation test program 2 * Canonical XML implementation test program
3 * (http://www.w3.org/TR/2001/REC-xml-c14n-20010315) 3 * (http://www.w3.org/TR/2001/REC-xml-c14n-20010315)
4 * 4 *
5 * See Copyright for the status of this software. 5 * See Copyright for the status of this software.
6 * 6 *
7 * Author: Aleksey Sanin <aleksey@aleksey.com> 7 * Author: Aleksey Sanin <aleksey@aleksey.com>
8 */ 8 */
9 #include "libxml.h" 9 #include "libxml.h"
10 #if defined(LIBXML_C14N_ENABLED) && defined(LIBXML_OUTPUT_ENABLED) 10 #if defined(LIBXML_C14N_ENABLED) && defined(LIBXML_OUTPUT_ENABLED)
11 11
12 #include <stdio.h> 12 #include <stdio.h>
13 #include <string.h> 13 #include <string.h>
14 #ifndef STDOUT_FILENO
14 #ifdef HAVE_UNISTD_H 15 #ifdef HAVE_UNISTD_H
15 #include <unistd.h> 16 #include <unistd.h>
17 #else
18 #define STDOUT_FILENO fileno(stdout)
19 #endif /* HAVE_UNISTD_H */
16 #endif 20 #endif
17 #ifdef HAVE_STDLIB_H 21 #ifdef HAVE_STDLIB_H
18 #include <stdlib.h> 22 #include <stdlib.h>
19 #endif 23 #endif
20 24
21 #include <libxml/xmlmemory.h> 25 #include <libxml/xmlmemory.h>
22 #include <libxml/parser.h> 26 #include <libxml/parser.h>
23 #include <libxml/xpath.h> 27 #include <libxml/xpath.h>
24 #include <libxml/xpathInternals.h> 28 #include <libxml/xpathInternals.h>
25 29
(...skipping 19 matching lines...) Expand all
45 "--exc-without-comments\t Exclusive XML file canonicalization v1.0 w/o comme nts\n"); 49 "--exc-without-comments\t Exclusive XML file canonicalization v1.0 w/o comme nts\n");
46 } 50 }
47 51
48 static xmlXPathObjectPtr 52 static xmlXPathObjectPtr
49 load_xpath_expr (xmlDocPtr parent_doc, const char* filename); 53 load_xpath_expr (xmlDocPtr parent_doc, const char* filename);
50 54
51 static xmlChar **parse_list(xmlChar *str); 55 static xmlChar **parse_list(xmlChar *str);
52 56
53 /* static void print_xpath_nodes(xmlNodeSetPtr nodes); */ 57 /* static void print_xpath_nodes(xmlNodeSetPtr nodes); */
54 58
55 static int 59 static int
56 test_c14n(const char* xml_filename, int with_comments, int mode, 60 test_c14n(const char* xml_filename, int with_comments, int mode,
57 const char* xpath_filename, xmlChar **inclusive_namespaces) { 61 const char* xpath_filename, xmlChar **inclusive_namespaces) {
58 xmlDocPtr doc; 62 xmlDocPtr doc;
59 xmlXPathObjectPtr xpath = NULL; 63 xmlXPathObjectPtr xpath = NULL;
60 xmlChar *result = NULL; 64 xmlChar *result = NULL;
61 int ret; 65 int ret;
62 66
63 /* 67 /*
64 * build an XML tree from a the file; we need to add default 68 * build an XML tree from a the file; we need to add default
65 * attributes and resolve all character and entities references 69 * attributes and resolve all character and entities references
66 */ 70 */
67 xmlLoadExtDtdDefaultValue = XML_DETECT_IDS | XML_COMPLETE_ATTRS; 71 xmlLoadExtDtdDefaultValue = XML_DETECT_IDS | XML_COMPLETE_ATTRS;
68 xmlSubstituteEntitiesDefault(1); 72 xmlSubstituteEntitiesDefault(1);
69 73
70 doc = xmlReadFile(xml_filename, NULL, XML_PARSE_DTDATTR | XML_PARSE_NOENT); 74 doc = xmlReadFile(xml_filename, NULL, XML_PARSE_DTDATTR | XML_PARSE_NOENT);
71 if (doc == NULL) { 75 if (doc == NULL) {
72 fprintf(stderr, "Error: unable to parse file \"%s\"\n", xml_filename); 76 fprintf(stderr, "Error: unable to parse file \"%s\"\n", xml_filename);
73 return(-1); 77 return(-1);
74 } 78 }
75 79
76 /* 80 /*
77 * Check the document is of the right kind 81 * Check the document is of the right kind
78 */ 82 */
79 if(xmlDocGetRootElement(doc) == NULL) { 83 if(xmlDocGetRootElement(doc) == NULL) {
80 fprintf(stderr,"Error: empty document for file \"%s\"\n", xml_filename); 84 fprintf(stderr,"Error: empty document for file \"%s\"\n", xml_filename);
81 xmlFreeDoc(doc); 85 xmlFreeDoc(doc);
82 return(-1); 86 return(-1);
83 } 87 }
84 88
85 /* 89 /*
86 * load xpath file if specified 90 * load xpath file if specified
87 */ 91 */
88 if(xpath_filename) { 92 if(xpath_filename) {
89 xpath = load_xpath_expr(doc, xpath_filename); 93 xpath = load_xpath_expr(doc, xpath_filename);
90 if(xpath == NULL) { 94 if(xpath == NULL) {
91 fprintf(stderr,"Error: unable to evaluate xpath expression\n"); 95 fprintf(stderr,"Error: unable to evaluate xpath expression\n");
92 » xmlFreeDoc(doc); 96 » xmlFreeDoc(doc);
93 return(-1); 97 return(-1);
94 } 98 }
95 } 99 }
96 100
97 /* 101 /*
98 * Canonical form 102 * Canonical form
99 */ 103 */
100 /* fprintf(stderr,"File \"%s\" loaded: start canonization\n", xml_filename); */ 104 /* fprintf(stderr,"File \"%s\" loaded: start canonization\n", xml_filename); */
101 ret = xmlC14NDocDumpMemory(doc, 105 ret = xmlC14NDocDumpMemory(doc,
102 » (xpath) ? xpath->nodesetval : NULL, 106 » (xpath) ? xpath->nodesetval : NULL,
103 mode, inclusive_namespaces, 107 mode, inclusive_namespaces,
104 with_comments, &result); 108 with_comments, &result);
105 if(ret >= 0) { 109 if(ret >= 0) {
106 if(result != NULL) { 110 if(result != NULL) {
107 » write(1, result, ret); 111 » if (write(STDOUT_FILENO, result, ret) == -1) {
108 » xmlFree(result); 112 » » fprintf(stderr, "Can't write data\n");
113 » }
114 » xmlFree(result);
109 } 115 }
110 } else { 116 } else {
111 fprintf(stderr,"Error: failed to canonicalize XML file \"%s\" (ret=%d)\n ", xml_filename, ret); 117 fprintf(stderr,"Error: failed to canonicalize XML file \"%s\" (ret=%d)\n ", xml_filename, ret);
112 if(result != NULL) xmlFree(result); 118 if(result != NULL) xmlFree(result);
113 » xmlFreeDoc(doc); 119 » xmlFreeDoc(doc);
114 return(-1); 120 return(-1);
115 } 121 }
116 122
117 /* 123 /*
118 * Cleanup 124 * Cleanup
119 */ 125 */
120 if(xpath != NULL) xmlXPathFreeObject(xpath); 126 if(xpath != NULL) xmlXPathFreeObject(xpath);
121 xmlFreeDoc(doc); 127 xmlFreeDoc(doc);
122 128
123 return(ret); 129 return(ret);
124 } 130 }
125 131
126 int main(int argc, char **argv) { 132 int main(int argc, char **argv) {
127 int ret = -1; 133 int ret = -1;
128 134
129 /* 135 /*
130 * Init libxml 136 * Init libxml
131 */ 137 */
132 xmlInitParser(); 138 xmlInitParser();
133 LIBXML_TEST_VERSION 139 LIBXML_TEST_VERSION
134 140
135 /* 141 /*
136 * Parse command line and process file 142 * Parse command line and process file
137 */ 143 */
138 if( argc < 3 ) { 144 if( argc < 3 ) {
139 fprintf(stderr, "Error: wrong number of arguments.\n"); 145 fprintf(stderr, "Error: wrong number of arguments.\n");
140 usage(argv[0]); 146 usage(argv[0]);
141 } else if(strcmp(argv[1], "--with-comments") == 0) { 147 } else if(strcmp(argv[1], "--with-comments") == 0) {
142 ret = test_c14n(argv[2], 1, XML_C14N_1_0, (argc > 3) ? argv[3] : NULL, N ULL); 148 ret = test_c14n(argv[2], 1, XML_C14N_1_0, (argc > 3) ? argv[3] : NULL, N ULL);
143 } else if(strcmp(argv[1], "--without-comments") == 0) { 149 } else if(strcmp(argv[1], "--without-comments") == 0) {
144 ret = test_c14n(argv[2], 0, XML_C14N_1_0, (argc > 3) ? argv[3] : NULL, N ULL); 150 ret = test_c14n(argv[2], 0, XML_C14N_1_0, (argc > 3) ? argv[3] : NULL, N ULL);
145 } else if(strcmp(argv[1], "--1-1-with-comments") == 0) { 151 } else if(strcmp(argv[1], "--1-1-with-comments") == 0) {
146 ret = test_c14n(argv[2], 1, XML_C14N_1_1, (argc > 3) ? argv[3] : NULL, N ULL); 152 ret = test_c14n(argv[2], 1, XML_C14N_1_1, (argc > 3) ? argv[3] : NULL, N ULL);
147 } else if(strcmp(argv[1], "--1-1-without-comments") == 0) { 153 } else if(strcmp(argv[1], "--1-1-without-comments") == 0) {
148 ret = test_c14n(argv[2], 0, XML_C14N_1_1, (argc > 3) ? argv[3] : NULL, N ULL); 154 ret = test_c14n(argv[2], 0, XML_C14N_1_1, (argc > 3) ? argv[3] : NULL, N ULL);
149 } else if(strcmp(argv[1], "--exc-with-comments") == 0) { 155 } else if(strcmp(argv[1], "--exc-with-comments") == 0) {
150 xmlChar **list; 156 xmlChar **list;
151 » 157
152 /* load exclusive namespace from command line */ 158 /* load exclusive namespace from command line */
153 list = (argc > 4) ? parse_list((xmlChar *)argv[4]) : NULL; 159 list = (argc > 4) ? parse_list((xmlChar *)argv[4]) : NULL;
154 ret = test_c14n(argv[2], 1, XML_C14N_EXCLUSIVE_1_0, (argc > 3) ? argv[3] : NULL, list); 160 ret = test_c14n(argv[2], 1, XML_C14N_EXCLUSIVE_1_0, (argc > 3) ? argv[3] : NULL, list);
155 if(list != NULL) xmlFree(list); 161 if(list != NULL) xmlFree(list);
156 } else if(strcmp(argv[1], "--exc-without-comments") == 0) { 162 } else if(strcmp(argv[1], "--exc-without-comments") == 0) {
157 xmlChar **list; 163 xmlChar **list;
158 » 164
159 /* load exclusive namespace from command line */ 165 /* load exclusive namespace from command line */
160 list = (argc > 4) ? parse_list((xmlChar *)argv[4]) : NULL; 166 list = (argc > 4) ? parse_list((xmlChar *)argv[4]) : NULL;
161 ret = test_c14n(argv[2], 0, XML_C14N_EXCLUSIVE_1_0, (argc > 3) ? argv[3] : NULL, list); 167 ret = test_c14n(argv[2], 0, XML_C14N_EXCLUSIVE_1_0, (argc > 3) ? argv[3] : NULL, list);
162 if(list != NULL) xmlFree(list); 168 if(list != NULL) xmlFree(list);
163 } else { 169 } else {
164 fprintf(stderr, "Error: bad option.\n"); 170 fprintf(stderr, "Error: bad option.\n");
165 usage(argv[0]); 171 usage(argv[0]);
166 } 172 }
167 173
168 /* 174 /*
169 * Shutdown libxml 175 * Shutdown libxml
170 */ 176 */
171 xmlCleanupParser(); 177 xmlCleanupParser();
172 xmlMemoryDump(); 178 xmlMemoryDump();
173 179
174 return((ret >= 0) ? 0 : 1); 180 return((ret >= 0) ? 0 : 1);
175 } 181 }
176 182
177 /* 183 /*
178 * Macro used to grow the current buffer. 184 * Macro used to grow the current buffer.
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
224 (*out++) = str; 230 (*out++) = str;
225 while(*str != ',' && *str != '\0') ++str; 231 while(*str != ',' && *str != '\0') ++str;
226 if(*str == ',') *(str++) = '\0'; 232 if(*str == ',') *(str++) = '\0';
227 } 233 }
228 (*out) = NULL; 234 (*out) = NULL;
229 return buffer; 235 return buffer;
230 } 236 }
231 237
232 static xmlXPathObjectPtr 238 static xmlXPathObjectPtr
233 load_xpath_expr (xmlDocPtr parent_doc, const char* filename) { 239 load_xpath_expr (xmlDocPtr parent_doc, const char* filename) {
234 xmlXPathObjectPtr xpath; 240 xmlXPathObjectPtr xpath;
235 xmlDocPtr doc; 241 xmlDocPtr doc;
236 xmlChar *expr; 242 xmlChar *expr;
237 xmlXPathContextPtr ctx; 243 xmlXPathContextPtr ctx;
238 xmlNodePtr node; 244 xmlNodePtr node;
239 xmlNsPtr ns; 245 xmlNsPtr ns;
240 246
241 /* 247 /*
242 * load XPath expr as a file 248 * load XPath expr as a file
243 */ 249 */
244 xmlLoadExtDtdDefaultValue = XML_DETECT_IDS | XML_COMPLETE_ATTRS; 250 xmlLoadExtDtdDefaultValue = XML_DETECT_IDS | XML_COMPLETE_ATTRS;
245 xmlSubstituteEntitiesDefault(1); 251 xmlSubstituteEntitiesDefault(1);
246 252
247 doc = xmlReadFile(filename, NULL, XML_PARSE_DTDATTR | XML_PARSE_NOENT); 253 doc = xmlReadFile(filename, NULL, XML_PARSE_DTDATTR | XML_PARSE_NOENT);
248 if (doc == NULL) { 254 if (doc == NULL) {
249 fprintf(stderr, "Error: unable to parse file \"%s\"\n", filename); 255 fprintf(stderr, "Error: unable to parse file \"%s\"\n", filename);
250 return(NULL); 256 return(NULL);
251 } 257 }
252 258
253 /* 259 /*
254 * Check the document is of the right kind 260 * Check the document is of the right kind
255 */ 261 */
256 if(xmlDocGetRootElement(doc) == NULL) { 262 if(xmlDocGetRootElement(doc) == NULL) {
257 fprintf(stderr,"Error: empty document for file \"%s\"\n", filename); 263 fprintf(stderr,"Error: empty document for file \"%s\"\n", filename);
258 xmlFreeDoc(doc); 264 xmlFreeDoc(doc);
259 return(NULL); 265 return(NULL);
260 } 266 }
261 267
262 node = doc->children; 268 node = doc->children;
263 while(node != NULL && !xmlStrEqual(node->name, (const xmlChar *)"XPath")) { 269 while(node != NULL && !xmlStrEqual(node->name, (const xmlChar *)"XPath")) {
264 node = node->next; 270 node = node->next;
265 } 271 }
266 272
267 if(node == NULL) { 273 if(node == NULL) {
268 fprintf(stderr,"Error: XPath element expected in the file \"%s\"\n", fi lename); 274 fprintf(stderr,"Error: XPath element expected in the file \"%s\"\n", fi lename);
269 xmlFreeDoc(doc); 275 xmlFreeDoc(doc);
270 return(NULL); 276 return(NULL);
271 } 277 }
272 278
273 expr = xmlNodeGetContent(node); 279 expr = xmlNodeGetContent(node);
274 if(expr == NULL) { 280 if(expr == NULL) {
275 fprintf(stderr,"Error: XPath content element is NULL \"%s\"\n", filename ); 281 fprintf(stderr,"Error: XPath content element is NULL \"%s\"\n", filename );
276 xmlFreeDoc(doc); 282 xmlFreeDoc(doc);
277 return(NULL); 283 return(NULL);
278 } 284 }
279 285
280 ctx = xmlXPathNewContext(parent_doc); 286 ctx = xmlXPathNewContext(parent_doc);
281 if(ctx == NULL) { 287 if(ctx == NULL) {
282 fprintf(stderr,"Error: unable to create new context\n"); 288 fprintf(stderr,"Error: unable to create new context\n");
283 xmlFree(expr); 289 xmlFree(expr);
284 xmlFreeDoc(doc); 290 xmlFreeDoc(doc);
285 return(NULL); 291 return(NULL);
286 } 292 }
287 293
288 /* 294 /*
289 * Register namespaces 295 * Register namespaces
290 */ 296 */
291 ns = node->nsDef; 297 ns = node->nsDef;
292 while(ns != NULL) { 298 while(ns != NULL) {
293 if(xmlXPathRegisterNs(ctx, ns->prefix, ns->href) != 0) { 299 if(xmlXPathRegisterNs(ctx, ns->prefix, ns->href) != 0) {
294 fprintf(stderr,"Error: unable to register NS with prefix=\"%s\" and href=\"%s\"\n", ns->prefix, ns->href); 300 fprintf(stderr,"Error: unable to register NS with prefix=\"%s\" and href=\"%s\"\n", ns->prefix, ns->href);
295 » xmlFree(expr); 301 » xmlFree(expr);
296 » xmlXPathFreeContext(ctx); 302 » xmlXPathFreeContext(ctx);
297 » xmlFreeDoc(doc); 303 » xmlFreeDoc(doc);
298 return(NULL); 304 return(NULL);
299 } 305 }
300 ns = ns->next; 306 ns = ns->next;
301 } 307 }
302 308
303 /* 309 /*
304 * Evaluate xpath 310 * Evaluate xpath
305 */ 311 */
306 xpath = xmlXPathEvalExpression(expr, ctx); 312 xpath = xmlXPathEvalExpression(expr, ctx);
307 if(xpath == NULL) { 313 if(xpath == NULL) {
308 fprintf(stderr,"Error: unable to evaluate xpath expression\n"); 314 fprintf(stderr,"Error: unable to evaluate xpath expression\n");
309 » xmlFree(expr); 315 » xmlFree(expr);
310 xmlXPathFreeContext(ctx); 316 xmlXPathFreeContext(ctx);
311 xmlFreeDoc(doc); 317 xmlFreeDoc(doc);
312 return(NULL); 318 return(NULL);
313 } 319 }
314 320
315 /* print_xpath_nodes(xpath->nodesetval); */ 321 /* print_xpath_nodes(xpath->nodesetval); */
316 322
317 xmlFree(expr); 323 xmlFree(expr);
318 xmlXPathFreeContext(ctx); 324 xmlXPathFreeContext(ctx);
319 xmlFreeDoc(doc); 325 xmlFreeDoc(doc);
320 return(xpath); 326 return(xpath);
321 } 327 }
322 328
323 /* 329 /*
324 static void 330 static void
325 print_xpath_nodes(xmlNodeSetPtr nodes) { 331 print_xpath_nodes(xmlNodeSetPtr nodes) {
326 xmlNodePtr cur; 332 xmlNodePtr cur;
327 int i; 333 int i;
328 334
329 if(nodes == NULL ){ 335 if(nodes == NULL ){
330 fprintf(stderr, "Error: no nodes set defined\n"); 336 fprintf(stderr, "Error: no nodes set defined\n");
331 return; 337 return;
332 } 338 }
333 339
334 fprintf(stderr, "Nodes Set:\n-----\n"); 340 fprintf(stderr, "Nodes Set:\n-----\n");
335 for(i = 0; i < nodes->nodeNr; ++i) { 341 for(i = 0; i < nodes->nodeNr; ++i) {
336 if(nodes->nodeTab[i]->type == XML_NAMESPACE_DECL) { 342 if(nodes->nodeTab[i]->type == XML_NAMESPACE_DECL) {
337 xmlNsPtr ns; 343 xmlNsPtr ns;
338 » 344
339 ns = (xmlNsPtr)nodes->nodeTab[i]; 345 ns = (xmlNsPtr)nodes->nodeTab[i];
340 cur = (xmlNodePtr)ns->next; 346 cur = (xmlNodePtr)ns->next;
341 » fprintf(stderr, "namespace \"%s\"=\"%s\" for node %s:%s\n", 347 » fprintf(stderr, "namespace \"%s\"=\"%s\" for node %s:%s\n",
342 ns->prefix, ns->href, 348 ns->prefix, ns->href,
343 (cur->ns) ? cur->ns->prefix : BAD_CAST "", cur->name); 349 (cur->ns) ? cur->ns->prefix : BAD_CAST "", cur->name);
344 } else if(nodes->nodeTab[i]->type == XML_ELEMENT_NODE) { 350 } else if(nodes->nodeTab[i]->type == XML_ELEMENT_NODE) {
345 » cur = nodes->nodeTab[i]; 351 » cur = nodes->nodeTab[i];
346 » fprintf(stderr, "element node \"%s:%s\"\n", 352 » fprintf(stderr, "element node \"%s:%s\"\n",
347 (cur->ns) ? cur->ns->prefix : BAD_CAST "", cur->name); 353 (cur->ns) ? cur->ns->prefix : BAD_CAST "", cur->name);
348 } else { 354 } else {
349 » cur = nodes->nodeTab[i]; 355 » cur = nodes->nodeTab[i];
350 fprintf(stderr, "node \"%s\": type %d\n", cur->name, cur->type); 356 fprintf(stderr, "node \"%s\": type %d\n", cur->name, cur->type);
351 } 357 }
352 } 358 }
353 } 359 }
354 */ 360 */
355 361
356 #else 362 #else
357 #include <stdio.h> 363 #include <stdio.h>
358 int main(int argc ATTRIBUTE_UNUSED, char **argv ATTRIBUTE_UNUSED) { 364 int main(int argc ATTRIBUTE_UNUSED, char **argv ATTRIBUTE_UNUSED) {
359 printf("%s : XPath/Canonicalization and output support not compiled in\n", a rgv[0]); 365 printf("%s : XPath/Canonicalization and output support not compiled in\n", a rgv[0]);
360 return(0); 366 return(0);
361 } 367 }
362 #endif /* LIBXML_C14N_ENABLED */ 368 #endif /* LIBXML_C14N_ENABLED */
363 369
364 370
OLDNEW
« no previous file with comments | « third_party/libxml/src/testAutomata.c ('k') | third_party/libxml/src/testHTML.c » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698