@helm2/poc_jenki_rce 0.0.1

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of @helm2/poc_jenki_rce might be problematic. Click here for more details.

Files changed (160) hide show
  1. package/LICENSE +19 -0
  2. package/Makefile +18 -0
  3. package/README.md +52 -0
  4. package/binding.gyp +81 -0
  5. package/index.d.ts +273 -0
  6. package/index.js +45 -0
  7. package/lib/bindings.js +1 -0
  8. package/lib/document.js +118 -0
  9. package/lib/element.js +82 -0
  10. package/lib/sax_parser.js +38 -0
  11. package/package.json +70 -0
  12. package/src/html_document.cc +7 -0
  13. package/src/html_document.h +18 -0
  14. package/src/libxmljs.cc +252 -0
  15. package/src/libxmljs.h +53 -0
  16. package/src/xml_attribute.cc +173 -0
  17. package/src/xml_attribute.h +40 -0
  18. package/src/xml_comment.cc +117 -0
  19. package/src/xml_comment.h +30 -0
  20. package/src/xml_document.cc +810 -0
  21. package/src/xml_document.h +67 -0
  22. package/src/xml_element.cc +565 -0
  23. package/src/xml_element.h +61 -0
  24. package/src/xml_namespace.cc +158 -0
  25. package/src/xml_namespace.h +39 -0
  26. package/src/xml_node.cc +761 -0
  27. package/src/xml_node.h +73 -0
  28. package/src/xml_pi.cc +161 -0
  29. package/src/xml_pi.h +34 -0
  30. package/src/xml_sax_parser.cc +424 -0
  31. package/src/xml_sax_parser.h +73 -0
  32. package/src/xml_syntax_error.cc +66 -0
  33. package/src/xml_syntax_error.h +25 -0
  34. package/src/xml_text.cc +320 -0
  35. package/src/xml_text.h +48 -0
  36. package/src/xml_textwriter.cc +315 -0
  37. package/src/xml_textwriter.h +62 -0
  38. package/src/xml_xpath_context.cc +70 -0
  39. package/src/xml_xpath_context.h +23 -0
  40. package/vendor/libxml/Copyright +23 -0
  41. package/vendor/libxml/DOCBparser.c +305 -0
  42. package/vendor/libxml/HTMLparser.c +7287 -0
  43. package/vendor/libxml/HTMLtree.c +1200 -0
  44. package/vendor/libxml/Makefile +2983 -0
  45. package/vendor/libxml/SAX.c +180 -0
  46. package/vendor/libxml/SAX2.c +3036 -0
  47. package/vendor/libxml/buf.c +1351 -0
  48. package/vendor/libxml/buf.h +72 -0
  49. package/vendor/libxml/c14n.c +2234 -0
  50. package/vendor/libxml/catalog.c +3828 -0
  51. package/vendor/libxml/chvalid.c +336 -0
  52. package/vendor/libxml/config.h +294 -0
  53. package/vendor/libxml/config.h.gch +0 -0
  54. package/vendor/libxml/debugXML.c +3423 -0
  55. package/vendor/libxml/dict.c +1298 -0
  56. package/vendor/libxml/elfgcchack.h +17818 -0
  57. package/vendor/libxml/enc.h +32 -0
  58. package/vendor/libxml/encoding.c +3975 -0
  59. package/vendor/libxml/entities.c +1163 -0
  60. package/vendor/libxml/error.c +998 -0
  61. package/vendor/libxml/globals.c +1126 -0
  62. package/vendor/libxml/hash.c +1146 -0
  63. package/vendor/libxml/include/libxml/DOCBparser.h +96 -0
  64. package/vendor/libxml/include/libxml/HTMLparser.h +306 -0
  65. package/vendor/libxml/include/libxml/HTMLtree.h +147 -0
  66. package/vendor/libxml/include/libxml/Makefile +725 -0
  67. package/vendor/libxml/include/libxml/Makefile.am +54 -0
  68. package/vendor/libxml/include/libxml/Makefile.in +725 -0
  69. package/vendor/libxml/include/libxml/SAX.h +173 -0
  70. package/vendor/libxml/include/libxml/SAX2.h +178 -0
  71. package/vendor/libxml/include/libxml/c14n.h +128 -0
  72. package/vendor/libxml/include/libxml/catalog.h +182 -0
  73. package/vendor/libxml/include/libxml/chvalid.h +230 -0
  74. package/vendor/libxml/include/libxml/debugXML.h +217 -0
  75. package/vendor/libxml/include/libxml/dict.h +79 -0
  76. package/vendor/libxml/include/libxml/encoding.h +245 -0
  77. package/vendor/libxml/include/libxml/entities.h +151 -0
  78. package/vendor/libxml/include/libxml/globals.h +508 -0
  79. package/vendor/libxml/include/libxml/hash.h +236 -0
  80. package/vendor/libxml/include/libxml/list.h +137 -0
  81. package/vendor/libxml/include/libxml/nanoftp.h +163 -0
  82. package/vendor/libxml/include/libxml/nanohttp.h +81 -0
  83. package/vendor/libxml/include/libxml/parser.h +1243 -0
  84. package/vendor/libxml/include/libxml/parserInternals.h +644 -0
  85. package/vendor/libxml/include/libxml/pattern.h +100 -0
  86. package/vendor/libxml/include/libxml/relaxng.h +217 -0
  87. package/vendor/libxml/include/libxml/schemasInternals.h +958 -0
  88. package/vendor/libxml/include/libxml/schematron.h +142 -0
  89. package/vendor/libxml/include/libxml/threads.h +89 -0
  90. package/vendor/libxml/include/libxml/tree.h +1311 -0
  91. package/vendor/libxml/include/libxml/uri.h +94 -0
  92. package/vendor/libxml/include/libxml/valid.h +458 -0
  93. package/vendor/libxml/include/libxml/xinclude.h +129 -0
  94. package/vendor/libxml/include/libxml/xlink.h +189 -0
  95. package/vendor/libxml/include/libxml/xmlIO.h +368 -0
  96. package/vendor/libxml/include/libxml/xmlautomata.h +146 -0
  97. package/vendor/libxml/include/libxml/xmlerror.h +945 -0
  98. package/vendor/libxml/include/libxml/xmlexports.h +77 -0
  99. package/vendor/libxml/include/libxml/xmlmemory.h +224 -0
  100. package/vendor/libxml/include/libxml/xmlmodule.h +57 -0
  101. package/vendor/libxml/include/libxml/xmlreader.h +428 -0
  102. package/vendor/libxml/include/libxml/xmlregexp.h +222 -0
  103. package/vendor/libxml/include/libxml/xmlsave.h +88 -0
  104. package/vendor/libxml/include/libxml/xmlschemas.h +246 -0
  105. package/vendor/libxml/include/libxml/xmlschemastypes.h +151 -0
  106. package/vendor/libxml/include/libxml/xmlstring.h +140 -0
  107. package/vendor/libxml/include/libxml/xmlunicode.h +202 -0
  108. package/vendor/libxml/include/libxml/xmlversion.h +484 -0
  109. package/vendor/libxml/include/libxml/xmlwin32version.h +239 -0
  110. package/vendor/libxml/include/libxml/xmlwriter.h +488 -0
  111. package/vendor/libxml/include/libxml/xpath.h +564 -0
  112. package/vendor/libxml/include/libxml/xpathInternals.h +632 -0
  113. package/vendor/libxml/include/libxml/xpointer.h +114 -0
  114. package/vendor/libxml/include/win32config.h +122 -0
  115. package/vendor/libxml/include/wsockcompat.h +54 -0
  116. package/vendor/libxml/legacy.c +1343 -0
  117. package/vendor/libxml/libxml.h +134 -0
  118. package/vendor/libxml/list.c +779 -0
  119. package/vendor/libxml/nanoftp.c +2118 -0
  120. package/vendor/libxml/nanohttp.c +1899 -0
  121. package/vendor/libxml/parser.c +15553 -0
  122. package/vendor/libxml/parserInternals.c +2164 -0
  123. package/vendor/libxml/pattern.c +2621 -0
  124. package/vendor/libxml/relaxng.c +11101 -0
  125. package/vendor/libxml/rngparser.c +1595 -0
  126. package/vendor/libxml/runsuite.c +1157 -0
  127. package/vendor/libxml/save.h +36 -0
  128. package/vendor/libxml/schematron.c +1787 -0
  129. package/vendor/libxml/threads.c +1049 -0
  130. package/vendor/libxml/timsort.h +601 -0
  131. package/vendor/libxml/tree.c +10183 -0
  132. package/vendor/libxml/trio.c +6895 -0
  133. package/vendor/libxml/trio.h +230 -0
  134. package/vendor/libxml/triodef.h +228 -0
  135. package/vendor/libxml/trionan.c +914 -0
  136. package/vendor/libxml/trionan.h +84 -0
  137. package/vendor/libxml/triop.h +150 -0
  138. package/vendor/libxml/triostr.c +2112 -0
  139. package/vendor/libxml/triostr.h +144 -0
  140. package/vendor/libxml/uri.c +2561 -0
  141. package/vendor/libxml/valid.c +7138 -0
  142. package/vendor/libxml/xinclude.c +2657 -0
  143. package/vendor/libxml/xlink.c +183 -0
  144. package/vendor/libxml/xmlIO.c +4135 -0
  145. package/vendor/libxml/xmlcatalog.c +624 -0
  146. package/vendor/libxml/xmllint.c +3796 -0
  147. package/vendor/libxml/xmlmemory.c +1163 -0
  148. package/vendor/libxml/xmlmodule.c +468 -0
  149. package/vendor/libxml/xmlreader.c +6033 -0
  150. package/vendor/libxml/xmlregexp.c +8271 -0
  151. package/vendor/libxml/xmlsave.c +2735 -0
  152. package/vendor/libxml/xmlschemas.c +29173 -0
  153. package/vendor/libxml/xmlschemastypes.c +6276 -0
  154. package/vendor/libxml/xmlstring.c +1050 -0
  155. package/vendor/libxml/xmlunicode.c +3179 -0
  156. package/vendor/libxml/xmlwriter.c +4738 -0
  157. package/vendor/libxml/xpath.c +14734 -0
  158. package/vendor/libxml/xpointer.c +2969 -0
  159. package/vendor/libxml/xzlib.c +815 -0
  160. package/vendor/libxml/xzlib.h +19 -0
@@ -0,0 +1,1157 @@
1
+ /*
2
+ * runsuite.c: C program to run libxml2 against published testsuites
3
+ *
4
+ * See Copyright for the status of this software.
5
+ *
6
+ * daniel@veillard.com
7
+ */
8
+
9
+ #include "libxml.h"
10
+ #include <stdio.h>
11
+
12
+ #if !defined(_WIN32) || defined(__CYGWIN__)
13
+ #include <unistd.h>
14
+ #endif
15
+ #include <string.h>
16
+ #include <sys/types.h>
17
+ #include <sys/stat.h>
18
+ #include <fcntl.h>
19
+
20
+ #include <libxml/parser.h>
21
+ #include <libxml/parserInternals.h>
22
+ #include <libxml/tree.h>
23
+ #include <libxml/uri.h>
24
+ #if defined(LIBXML_SCHEMAS_ENABLED) && defined(LIBXML_XPATH_ENABLED)
25
+ #include <libxml/xmlreader.h>
26
+
27
+ #include <libxml/xpath.h>
28
+ #include <libxml/xpathInternals.h>
29
+
30
+ #include <libxml/relaxng.h>
31
+ #include <libxml/xmlschemas.h>
32
+ #include <libxml/xmlschemastypes.h>
33
+
34
+ #define LOGFILE "runsuite.log"
35
+ static FILE *logfile = NULL;
36
+ static int verbose = 0;
37
+
38
+
39
+ /************************************************************************
40
+ * *
41
+ * File name and path utilities *
42
+ * *
43
+ ************************************************************************/
44
+
45
+ static int checkTestFile(const char *filename) {
46
+ struct stat buf;
47
+
48
+ if (stat(filename, &buf) == -1)
49
+ return(0);
50
+
51
+ #if defined(_WIN32) && !defined(__CYGWIN__)
52
+ if (!(buf.st_mode & _S_IFREG))
53
+ return(0);
54
+ #else
55
+ if (!S_ISREG(buf.st_mode))
56
+ return(0);
57
+ #endif
58
+
59
+ return(1);
60
+ }
61
+
62
+ static xmlChar *composeDir(const xmlChar *dir, const xmlChar *path) {
63
+ char buf[500];
64
+
65
+ if (dir == NULL) return(xmlStrdup(path));
66
+ if (path == NULL) return(NULL);
67
+
68
+ snprintf(buf, 500, "%s/%s", (const char *) dir, (const char *) path);
69
+ return(xmlStrdup((const xmlChar *) buf));
70
+ }
71
+
72
+ /************************************************************************
73
+ * *
74
+ * Libxml2 specific routines *
75
+ * *
76
+ ************************************************************************/
77
+
78
+ static int nb_tests = 0;
79
+ static int nb_errors = 0;
80
+ static int nb_internals = 0;
81
+ static int nb_schematas = 0;
82
+ static int nb_unimplemented = 0;
83
+ static int nb_leaks = 0;
84
+ static int extraMemoryFromResolver = 0;
85
+
86
+ static int
87
+ fatalError(void) {
88
+ fprintf(stderr, "Exitting tests on fatal error\n");
89
+ exit(1);
90
+ }
91
+
92
+ /*
93
+ * that's needed to implement <resource>
94
+ */
95
+ #define MAX_ENTITIES 20
96
+ static char *testEntitiesName[MAX_ENTITIES];
97
+ static char *testEntitiesValue[MAX_ENTITIES];
98
+ static int nb_entities = 0;
99
+ static void resetEntities(void) {
100
+ int i;
101
+
102
+ for (i = 0;i < nb_entities;i++) {
103
+ if (testEntitiesName[i] != NULL)
104
+ xmlFree(testEntitiesName[i]);
105
+ if (testEntitiesValue[i] != NULL)
106
+ xmlFree(testEntitiesValue[i]);
107
+ }
108
+ nb_entities = 0;
109
+ }
110
+ static int addEntity(char *name, char *content) {
111
+ if (nb_entities >= MAX_ENTITIES) {
112
+ fprintf(stderr, "Too many entities defined\n");
113
+ return(-1);
114
+ }
115
+ testEntitiesName[nb_entities] = name;
116
+ testEntitiesValue[nb_entities] = content;
117
+ nb_entities++;
118
+ return(0);
119
+ }
120
+
121
+ /*
122
+ * We need to trap calls to the resolver to not account memory for the catalog
123
+ * which is shared to the current running test. We also don't want to have
124
+ * network downloads modifying tests.
125
+ */
126
+ static xmlParserInputPtr
127
+ testExternalEntityLoader(const char *URL, const char *ID,
128
+ xmlParserCtxtPtr ctxt) {
129
+ xmlParserInputPtr ret;
130
+ int i;
131
+
132
+ for (i = 0;i < nb_entities;i++) {
133
+ if (!strcmp(testEntitiesName[i], URL)) {
134
+ ret = xmlNewStringInputStream(ctxt,
135
+ (const xmlChar *) testEntitiesValue[i]);
136
+ if (ret != NULL) {
137
+ ret->filename = (const char *)
138
+ xmlStrdup((xmlChar *)testEntitiesName[i]);
139
+ }
140
+ return(ret);
141
+ }
142
+ }
143
+ if (checkTestFile(URL)) {
144
+ ret = xmlNoNetExternalEntityLoader(URL, ID, ctxt);
145
+ } else {
146
+ int memused = xmlMemUsed();
147
+ ret = xmlNoNetExternalEntityLoader(URL, ID, ctxt);
148
+ extraMemoryFromResolver += xmlMemUsed() - memused;
149
+ }
150
+ #if 0
151
+ if (ret == NULL) {
152
+ fprintf(stderr, "Failed to find resource %s\n", URL);
153
+ }
154
+ #endif
155
+
156
+ return(ret);
157
+ }
158
+
159
+ /*
160
+ * Trapping the error messages at the generic level to grab the equivalent of
161
+ * stderr messages on CLI tools.
162
+ */
163
+ static char testErrors[32769];
164
+ static int testErrorsSize = 0;
165
+
166
+ static void test_log(const char *msg, ...) {
167
+ va_list args;
168
+ if (logfile != NULL) {
169
+ fprintf(logfile, "\n------------\n");
170
+ va_start(args, msg);
171
+ vfprintf(logfile, msg, args);
172
+ va_end(args);
173
+ fprintf(logfile, "%s", testErrors);
174
+ testErrorsSize = 0; testErrors[0] = 0;
175
+ }
176
+ if (verbose) {
177
+ va_start(args, msg);
178
+ vfprintf(stderr, msg, args);
179
+ va_end(args);
180
+ }
181
+ }
182
+
183
+ static void
184
+ testErrorHandler(void *ctx ATTRIBUTE_UNUSED, const char *msg, ...) {
185
+ va_list args;
186
+ int res;
187
+
188
+ if (testErrorsSize >= 32768)
189
+ return;
190
+ va_start(args, msg);
191
+ res = vsnprintf(&testErrors[testErrorsSize],
192
+ 32768 - testErrorsSize,
193
+ msg, args);
194
+ va_end(args);
195
+ if (testErrorsSize + res >= 32768) {
196
+ /* buffer is full */
197
+ testErrorsSize = 32768;
198
+ testErrors[testErrorsSize] = 0;
199
+ } else {
200
+ testErrorsSize += res;
201
+ }
202
+ testErrors[testErrorsSize] = 0;
203
+ }
204
+
205
+ static xmlXPathContextPtr ctxtXPath;
206
+
207
+ static void
208
+ initializeLibxml2(void) {
209
+ xmlGetWarningsDefaultValue = 0;
210
+ xmlPedanticParserDefault(0);
211
+
212
+ xmlMemSetup(xmlMemFree, xmlMemMalloc, xmlMemRealloc, xmlMemoryStrdup);
213
+ xmlInitParser();
214
+ xmlSetExternalEntityLoader(testExternalEntityLoader);
215
+ ctxtXPath = xmlXPathNewContext(NULL);
216
+ /*
217
+ * Deactivate the cache if created; otherwise we have to create/free it
218
+ * for every test, since it will confuse the memory leak detection.
219
+ * Note that normally this need not be done, since the cache is not
220
+ * created until set explicitly with xmlXPathContextSetCache();
221
+ * but for test purposes it is sometimes useful to activate the
222
+ * cache by default for the whole library.
223
+ */
224
+ if (ctxtXPath->cache != NULL)
225
+ xmlXPathContextSetCache(ctxtXPath, 0, -1, 0);
226
+ /* used as default namespace in xstc tests */
227
+ xmlXPathRegisterNs(ctxtXPath, BAD_CAST "ts", BAD_CAST "TestSuite");
228
+ xmlXPathRegisterNs(ctxtXPath, BAD_CAST "xlink",
229
+ BAD_CAST "http://www.w3.org/1999/xlink");
230
+ xmlSetGenericErrorFunc(NULL, testErrorHandler);
231
+ #ifdef LIBXML_SCHEMAS_ENABLED
232
+ xmlSchemaInitTypes();
233
+ xmlRelaxNGInitTypes();
234
+ #endif
235
+ }
236
+
237
+ static xmlNodePtr
238
+ getNext(xmlNodePtr cur, const char *xpath) {
239
+ xmlNodePtr ret = NULL;
240
+ xmlXPathObjectPtr res;
241
+ xmlXPathCompExprPtr comp;
242
+
243
+ if ((cur == NULL) || (cur->doc == NULL) || (xpath == NULL))
244
+ return(NULL);
245
+ ctxtXPath->doc = cur->doc;
246
+ ctxtXPath->node = cur;
247
+ comp = xmlXPathCompile(BAD_CAST xpath);
248
+ if (comp == NULL) {
249
+ fprintf(stderr, "Failed to compile %s\n", xpath);
250
+ return(NULL);
251
+ }
252
+ res = xmlXPathCompiledEval(comp, ctxtXPath);
253
+ xmlXPathFreeCompExpr(comp);
254
+ if (res == NULL)
255
+ return(NULL);
256
+ if ((res->type == XPATH_NODESET) &&
257
+ (res->nodesetval != NULL) &&
258
+ (res->nodesetval->nodeNr > 0) &&
259
+ (res->nodesetval->nodeTab != NULL))
260
+ ret = res->nodesetval->nodeTab[0];
261
+ xmlXPathFreeObject(res);
262
+ return(ret);
263
+ }
264
+
265
+ static xmlChar *
266
+ getString(xmlNodePtr cur, const char *xpath) {
267
+ xmlChar *ret = NULL;
268
+ xmlXPathObjectPtr res;
269
+ xmlXPathCompExprPtr comp;
270
+
271
+ if ((cur == NULL) || (cur->doc == NULL) || (xpath == NULL))
272
+ return(NULL);
273
+ ctxtXPath->doc = cur->doc;
274
+ ctxtXPath->node = cur;
275
+ comp = xmlXPathCompile(BAD_CAST xpath);
276
+ if (comp == NULL) {
277
+ fprintf(stderr, "Failed to compile %s\n", xpath);
278
+ return(NULL);
279
+ }
280
+ res = xmlXPathCompiledEval(comp, ctxtXPath);
281
+ xmlXPathFreeCompExpr(comp);
282
+ if (res == NULL)
283
+ return(NULL);
284
+ if (res->type == XPATH_STRING) {
285
+ ret = res->stringval;
286
+ res->stringval = NULL;
287
+ }
288
+ xmlXPathFreeObject(res);
289
+ return(ret);
290
+ }
291
+
292
+ /************************************************************************
293
+ * *
294
+ * Test test/xsdtest/xsdtestsuite.xml *
295
+ * *
296
+ ************************************************************************/
297
+
298
+ static int
299
+ xsdIncorrectTestCase(xmlNodePtr cur) {
300
+ xmlNodePtr test;
301
+ xmlBufferPtr buf;
302
+ xmlRelaxNGParserCtxtPtr pctxt;
303
+ xmlRelaxNGPtr rng = NULL;
304
+ int ret = 0, memt;
305
+
306
+ cur = getNext(cur, "./incorrect[1]");
307
+ if (cur == NULL) {
308
+ return(0);
309
+ }
310
+
311
+ test = getNext(cur, "./*");
312
+ if (test == NULL) {
313
+ test_log("Failed to find test in correct line %ld\n",
314
+ xmlGetLineNo(cur));
315
+ return(1);
316
+ }
317
+
318
+ memt = xmlMemUsed();
319
+ extraMemoryFromResolver = 0;
320
+ /*
321
+ * dump the schemas to a buffer, then reparse it and compile the schemas
322
+ */
323
+ buf = xmlBufferCreate();
324
+ if (buf == NULL) {
325
+ fprintf(stderr, "out of memory !\n");
326
+ fatalError();
327
+ }
328
+ xmlNodeDump(buf, test->doc, test, 0, 0);
329
+ pctxt = xmlRelaxNGNewMemParserCtxt((const char *)buf->content, buf->use);
330
+ xmlRelaxNGSetParserErrors(pctxt, testErrorHandler, testErrorHandler,
331
+ pctxt);
332
+ rng = xmlRelaxNGParse(pctxt);
333
+ xmlRelaxNGFreeParserCtxt(pctxt);
334
+ if (rng != NULL) {
335
+ test_log("Failed to detect incorrect RNG line %ld\n",
336
+ xmlGetLineNo(test));
337
+ ret = 1;
338
+ goto done;
339
+ }
340
+
341
+ done:
342
+ if (buf != NULL)
343
+ xmlBufferFree(buf);
344
+ if (rng != NULL)
345
+ xmlRelaxNGFree(rng);
346
+ xmlResetLastError();
347
+ if ((memt < xmlMemUsed()) && (extraMemoryFromResolver == 0)) {
348
+ test_log("Validation of tests starting line %ld leaked %d\n",
349
+ xmlGetLineNo(cur), xmlMemUsed() - memt);
350
+ nb_leaks++;
351
+ }
352
+ return(ret);
353
+ }
354
+
355
+ static void
356
+ installResources(xmlNodePtr tst, const xmlChar *base) {
357
+ xmlNodePtr test;
358
+ xmlBufferPtr buf;
359
+ xmlChar *name, *content, *res;
360
+
361
+ buf = xmlBufferCreate();
362
+ if (buf == NULL) {
363
+ fprintf(stderr, "out of memory !\n");
364
+ fatalError();
365
+ }
366
+ xmlNodeDump(buf, tst->doc, tst, 0, 0);
367
+
368
+ while (tst != NULL) {
369
+ test = getNext(tst, "./*");
370
+ if (test != NULL) {
371
+ xmlBufferEmpty(buf);
372
+ xmlNodeDump(buf, test->doc, test, 0, 0);
373
+ name = getString(tst, "string(@name)");
374
+ content = xmlStrdup(buf->content);
375
+ if ((name != NULL) && (content != NULL)) {
376
+ res = composeDir(base, name);
377
+ xmlFree(name);
378
+ addEntity((char *) res, (char *) content);
379
+ } else {
380
+ if (name != NULL) xmlFree(name);
381
+ if (content != NULL) xmlFree(content);
382
+ }
383
+ }
384
+ tst = getNext(tst, "following-sibling::resource[1]");
385
+ }
386
+ if (buf != NULL)
387
+ xmlBufferFree(buf);
388
+ }
389
+
390
+ static void
391
+ installDirs(xmlNodePtr tst, const xmlChar *base) {
392
+ xmlNodePtr test;
393
+ xmlChar *name, *res;
394
+
395
+ name = getString(tst, "string(@name)");
396
+ if (name == NULL)
397
+ return;
398
+ res = composeDir(base, name);
399
+ xmlFree(name);
400
+ if (res == NULL) {
401
+ return;
402
+ }
403
+ /* Now process resources and subdir recursively */
404
+ test = getNext(tst, "./resource[1]");
405
+ if (test != NULL) {
406
+ installResources(test, res);
407
+ }
408
+ test = getNext(tst, "./dir[1]");
409
+ while (test != NULL) {
410
+ installDirs(test, res);
411
+ test = getNext(test, "following-sibling::dir[1]");
412
+ }
413
+ xmlFree(res);
414
+ }
415
+
416
+ static int
417
+ xsdTestCase(xmlNodePtr tst) {
418
+ xmlNodePtr test, tmp, cur;
419
+ xmlBufferPtr buf;
420
+ xmlDocPtr doc = NULL;
421
+ xmlRelaxNGParserCtxtPtr pctxt;
422
+ xmlRelaxNGValidCtxtPtr ctxt;
423
+ xmlRelaxNGPtr rng = NULL;
424
+ int ret = 0, mem, memt;
425
+ xmlChar *dtd;
426
+
427
+ resetEntities();
428
+ testErrorsSize = 0; testErrors[0] = 0;
429
+
430
+ tmp = getNext(tst, "./dir[1]");
431
+ if (tmp != NULL) {
432
+ installDirs(tmp, NULL);
433
+ }
434
+ tmp = getNext(tst, "./resource[1]");
435
+ if (tmp != NULL) {
436
+ installResources(tmp, NULL);
437
+ }
438
+
439
+ cur = getNext(tst, "./correct[1]");
440
+ if (cur == NULL) {
441
+ return(xsdIncorrectTestCase(tst));
442
+ }
443
+
444
+ test = getNext(cur, "./*");
445
+ if (test == NULL) {
446
+ fprintf(stderr, "Failed to find test in correct line %ld\n",
447
+ xmlGetLineNo(cur));
448
+ return(1);
449
+ }
450
+
451
+ memt = xmlMemUsed();
452
+ extraMemoryFromResolver = 0;
453
+ /*
454
+ * dump the schemas to a buffer, then reparse it and compile the schemas
455
+ */
456
+ buf = xmlBufferCreate();
457
+ if (buf == NULL) {
458
+ fprintf(stderr, "out of memory !\n");
459
+ fatalError();
460
+ }
461
+ xmlNodeDump(buf, test->doc, test, 0, 0);
462
+ pctxt = xmlRelaxNGNewMemParserCtxt((const char *)buf->content, buf->use);
463
+ xmlRelaxNGSetParserErrors(pctxt, testErrorHandler, testErrorHandler,
464
+ pctxt);
465
+ rng = xmlRelaxNGParse(pctxt);
466
+ xmlRelaxNGFreeParserCtxt(pctxt);
467
+ if (extraMemoryFromResolver)
468
+ memt = 0;
469
+
470
+ if (rng == NULL) {
471
+ test_log("Failed to parse RNGtest line %ld\n",
472
+ xmlGetLineNo(test));
473
+ nb_errors++;
474
+ ret = 1;
475
+ goto done;
476
+ }
477
+ /*
478
+ * now scan all the siblings of correct to process the <valid> tests
479
+ */
480
+ tmp = getNext(cur, "following-sibling::valid[1]");
481
+ while (tmp != NULL) {
482
+ dtd = xmlGetProp(tmp, BAD_CAST "dtd");
483
+ test = getNext(tmp, "./*");
484
+ if (test == NULL) {
485
+ fprintf(stderr, "Failed to find test in <valid> line %ld\n",
486
+ xmlGetLineNo(tmp));
487
+
488
+ } else {
489
+ xmlBufferEmpty(buf);
490
+ if (dtd != NULL)
491
+ xmlBufferAdd(buf, dtd, -1);
492
+ xmlNodeDump(buf, test->doc, test, 0, 0);
493
+
494
+ /*
495
+ * We are ready to run the test
496
+ */
497
+ mem = xmlMemUsed();
498
+ extraMemoryFromResolver = 0;
499
+ doc = xmlReadMemory((const char *)buf->content, buf->use,
500
+ "test", NULL, 0);
501
+ if (doc == NULL) {
502
+ test_log("Failed to parse valid instance line %ld\n",
503
+ xmlGetLineNo(tmp));
504
+ nb_errors++;
505
+ } else {
506
+ nb_tests++;
507
+ ctxt = xmlRelaxNGNewValidCtxt(rng);
508
+ xmlRelaxNGSetValidErrors(ctxt,
509
+ testErrorHandler, testErrorHandler, ctxt);
510
+ ret = xmlRelaxNGValidateDoc(ctxt, doc);
511
+ xmlRelaxNGFreeValidCtxt(ctxt);
512
+ if (ret > 0) {
513
+ test_log("Failed to validate valid instance line %ld\n",
514
+ xmlGetLineNo(tmp));
515
+ nb_errors++;
516
+ } else if (ret < 0) {
517
+ test_log("Internal error validating instance line %ld\n",
518
+ xmlGetLineNo(tmp));
519
+ nb_errors++;
520
+ }
521
+ xmlFreeDoc(doc);
522
+ }
523
+ xmlResetLastError();
524
+ if ((mem != xmlMemUsed()) && (extraMemoryFromResolver == 0)) {
525
+ test_log("Validation of instance line %ld leaked %d\n",
526
+ xmlGetLineNo(tmp), xmlMemUsed() - mem);
527
+ xmlMemoryDump();
528
+ nb_leaks++;
529
+ }
530
+ }
531
+ if (dtd != NULL)
532
+ xmlFree(dtd);
533
+ tmp = getNext(tmp, "following-sibling::valid[1]");
534
+ }
535
+ /*
536
+ * now scan all the siblings of correct to process the <invalid> tests
537
+ */
538
+ tmp = getNext(cur, "following-sibling::invalid[1]");
539
+ while (tmp != NULL) {
540
+ test = getNext(tmp, "./*");
541
+ if (test == NULL) {
542
+ fprintf(stderr, "Failed to find test in <invalid> line %ld\n",
543
+ xmlGetLineNo(tmp));
544
+
545
+ } else {
546
+ xmlBufferEmpty(buf);
547
+ xmlNodeDump(buf, test->doc, test, 0, 0);
548
+
549
+ /*
550
+ * We are ready to run the test
551
+ */
552
+ mem = xmlMemUsed();
553
+ extraMemoryFromResolver = 0;
554
+ doc = xmlReadMemory((const char *)buf->content, buf->use,
555
+ "test", NULL, 0);
556
+ if (doc == NULL) {
557
+ test_log("Failed to parse valid instance line %ld\n",
558
+ xmlGetLineNo(tmp));
559
+ nb_errors++;
560
+ } else {
561
+ nb_tests++;
562
+ ctxt = xmlRelaxNGNewValidCtxt(rng);
563
+ xmlRelaxNGSetValidErrors(ctxt,
564
+ testErrorHandler, testErrorHandler, ctxt);
565
+ ret = xmlRelaxNGValidateDoc(ctxt, doc);
566
+ xmlRelaxNGFreeValidCtxt(ctxt);
567
+ if (ret == 0) {
568
+ test_log("Failed to detect invalid instance line %ld\n",
569
+ xmlGetLineNo(tmp));
570
+ nb_errors++;
571
+ } else if (ret < 0) {
572
+ test_log("Internal error validating instance line %ld\n",
573
+ xmlGetLineNo(tmp));
574
+ nb_errors++;
575
+ }
576
+ xmlFreeDoc(doc);
577
+ }
578
+ xmlResetLastError();
579
+ if ((mem != xmlMemUsed()) && (extraMemoryFromResolver == 0)) {
580
+ test_log("Validation of instance line %ld leaked %d\n",
581
+ xmlGetLineNo(tmp), xmlMemUsed() - mem);
582
+ xmlMemoryDump();
583
+ nb_leaks++;
584
+ }
585
+ }
586
+ tmp = getNext(tmp, "following-sibling::invalid[1]");
587
+ }
588
+
589
+ done:
590
+ if (buf != NULL)
591
+ xmlBufferFree(buf);
592
+ if (rng != NULL)
593
+ xmlRelaxNGFree(rng);
594
+ xmlResetLastError();
595
+ if ((memt != xmlMemUsed()) && (memt != 0)) {
596
+ test_log("Validation of tests starting line %ld leaked %d\n",
597
+ xmlGetLineNo(cur), xmlMemUsed() - memt);
598
+ nb_leaks++;
599
+ }
600
+ return(ret);
601
+ }
602
+
603
+ static int
604
+ xsdTestSuite(xmlNodePtr cur) {
605
+ if (verbose) {
606
+ xmlChar *doc = getString(cur, "string(documentation)");
607
+
608
+ if (doc != NULL) {
609
+ printf("Suite %s\n", doc);
610
+ xmlFree(doc);
611
+ }
612
+ }
613
+ cur = getNext(cur, "./testCase[1]");
614
+ while (cur != NULL) {
615
+ xsdTestCase(cur);
616
+ cur = getNext(cur, "following-sibling::testCase[1]");
617
+ }
618
+
619
+ return(0);
620
+ }
621
+
622
+ static int
623
+ xsdTest(void) {
624
+ xmlDocPtr doc;
625
+ xmlNodePtr cur;
626
+ const char *filename = "test/xsdtest/xsdtestsuite.xml";
627
+ int ret = 0;
628
+
629
+ doc = xmlReadFile(filename, NULL, XML_PARSE_NOENT);
630
+ if (doc == NULL) {
631
+ fprintf(stderr, "Failed to parse %s\n", filename);
632
+ return(-1);
633
+ }
634
+ printf("## XML Schemas datatypes test suite from James Clark\n");
635
+
636
+ cur = xmlDocGetRootElement(doc);
637
+ if ((cur == NULL) || (!xmlStrEqual(cur->name, BAD_CAST "testSuite"))) {
638
+ fprintf(stderr, "Unexpected format %s\n", filename);
639
+ ret = -1;
640
+ goto done;
641
+ }
642
+
643
+ cur = getNext(cur, "./testSuite[1]");
644
+ if ((cur == NULL) || (!xmlStrEqual(cur->name, BAD_CAST "testSuite"))) {
645
+ fprintf(stderr, "Unexpected format %s\n", filename);
646
+ ret = -1;
647
+ goto done;
648
+ }
649
+ while (cur != NULL) {
650
+ xsdTestSuite(cur);
651
+ cur = getNext(cur, "following-sibling::testSuite[1]");
652
+ }
653
+
654
+ done:
655
+ if (doc != NULL)
656
+ xmlFreeDoc(doc);
657
+ return(ret);
658
+ }
659
+
660
+ static int
661
+ rngTestSuite(xmlNodePtr cur) {
662
+ if (verbose) {
663
+ xmlChar *doc = getString(cur, "string(documentation)");
664
+
665
+ if (doc != NULL) {
666
+ printf("Suite %s\n", doc);
667
+ xmlFree(doc);
668
+ } else {
669
+ doc = getString(cur, "string(section)");
670
+ if (doc != NULL) {
671
+ printf("Section %s\n", doc);
672
+ xmlFree(doc);
673
+ }
674
+ }
675
+ }
676
+ cur = getNext(cur, "./testSuite[1]");
677
+ while (cur != NULL) {
678
+ xsdTestSuite(cur);
679
+ cur = getNext(cur, "following-sibling::testSuite[1]");
680
+ }
681
+
682
+ return(0);
683
+ }
684
+
685
+ static int
686
+ rngTest1(void) {
687
+ xmlDocPtr doc;
688
+ xmlNodePtr cur;
689
+ const char *filename = "test/relaxng/OASIS/spectest.xml";
690
+ int ret = 0;
691
+
692
+ doc = xmlReadFile(filename, NULL, XML_PARSE_NOENT);
693
+ if (doc == NULL) {
694
+ fprintf(stderr, "Failed to parse %s\n", filename);
695
+ return(-1);
696
+ }
697
+ printf("## Relax NG test suite from James Clark\n");
698
+
699
+ cur = xmlDocGetRootElement(doc);
700
+ if ((cur == NULL) || (!xmlStrEqual(cur->name, BAD_CAST "testSuite"))) {
701
+ fprintf(stderr, "Unexpected format %s\n", filename);
702
+ ret = -1;
703
+ goto done;
704
+ }
705
+
706
+ cur = getNext(cur, "./testSuite[1]");
707
+ if ((cur == NULL) || (!xmlStrEqual(cur->name, BAD_CAST "testSuite"))) {
708
+ fprintf(stderr, "Unexpected format %s\n", filename);
709
+ ret = -1;
710
+ goto done;
711
+ }
712
+ while (cur != NULL) {
713
+ rngTestSuite(cur);
714
+ cur = getNext(cur, "following-sibling::testSuite[1]");
715
+ }
716
+
717
+ done:
718
+ if (doc != NULL)
719
+ xmlFreeDoc(doc);
720
+ return(ret);
721
+ }
722
+
723
+ static int
724
+ rngTest2(void) {
725
+ xmlDocPtr doc;
726
+ xmlNodePtr cur;
727
+ const char *filename = "test/relaxng/testsuite.xml";
728
+ int ret = 0;
729
+
730
+ doc = xmlReadFile(filename, NULL, XML_PARSE_NOENT);
731
+ if (doc == NULL) {
732
+ fprintf(stderr, "Failed to parse %s\n", filename);
733
+ return(-1);
734
+ }
735
+ printf("## Relax NG test suite for libxml2\n");
736
+
737
+ cur = xmlDocGetRootElement(doc);
738
+ if ((cur == NULL) || (!xmlStrEqual(cur->name, BAD_CAST "testSuite"))) {
739
+ fprintf(stderr, "Unexpected format %s\n", filename);
740
+ ret = -1;
741
+ goto done;
742
+ }
743
+
744
+ cur = getNext(cur, "./testSuite[1]");
745
+ if ((cur == NULL) || (!xmlStrEqual(cur->name, BAD_CAST "testSuite"))) {
746
+ fprintf(stderr, "Unexpected format %s\n", filename);
747
+ ret = -1;
748
+ goto done;
749
+ }
750
+ while (cur != NULL) {
751
+ xsdTestSuite(cur);
752
+ cur = getNext(cur, "following-sibling::testSuite[1]");
753
+ }
754
+
755
+ done:
756
+ if (doc != NULL)
757
+ xmlFreeDoc(doc);
758
+ return(ret);
759
+ }
760
+
761
+ /************************************************************************
762
+ * *
763
+ * Schemas test suites from W3C/NIST/MS/Sun *
764
+ * *
765
+ ************************************************************************/
766
+
767
+ static int
768
+ xstcTestInstance(xmlNodePtr cur, xmlSchemaPtr schemas,
769
+ const xmlChar *spath, const char *base) {
770
+ xmlChar *href = NULL;
771
+ xmlChar *path = NULL;
772
+ xmlChar *validity = NULL;
773
+ xmlSchemaValidCtxtPtr ctxt = NULL;
774
+ xmlDocPtr doc = NULL;
775
+ int ret = 0, mem;
776
+
777
+ xmlResetLastError();
778
+ testErrorsSize = 0; testErrors[0] = 0;
779
+ mem = xmlMemUsed();
780
+ href = getString(cur,
781
+ "string(ts:instanceDocument/@xlink:href)");
782
+ if ((href == NULL) || (href[0] == 0)) {
783
+ test_log("testGroup line %ld misses href for schemaDocument\n",
784
+ xmlGetLineNo(cur));
785
+ ret = -1;
786
+ goto done;
787
+ }
788
+ path = xmlBuildURI(href, BAD_CAST base);
789
+ if (path == NULL) {
790
+ fprintf(stderr,
791
+ "Failed to build path to schemas testGroup line %ld : %s\n",
792
+ xmlGetLineNo(cur), href);
793
+ ret = -1;
794
+ goto done;
795
+ }
796
+ if (checkTestFile((const char *) path) <= 0) {
797
+ test_log("schemas for testGroup line %ld is missing: %s\n",
798
+ xmlGetLineNo(cur), path);
799
+ ret = -1;
800
+ goto done;
801
+ }
802
+ validity = getString(cur,
803
+ "string(ts:expected/@validity)");
804
+ if (validity == NULL) {
805
+ fprintf(stderr, "instanceDocument line %ld misses expected validity\n",
806
+ xmlGetLineNo(cur));
807
+ ret = -1;
808
+ goto done;
809
+ }
810
+ nb_tests++;
811
+ doc = xmlReadFile((const char *) path, NULL, XML_PARSE_NOENT);
812
+ if (doc == NULL) {
813
+ fprintf(stderr, "instance %s fails to parse\n", path);
814
+ ret = -1;
815
+ nb_errors++;
816
+ goto done;
817
+ }
818
+
819
+ ctxt = xmlSchemaNewValidCtxt(schemas);
820
+ xmlSchemaSetValidErrors(ctxt, testErrorHandler, testErrorHandler, ctxt);
821
+ ret = xmlSchemaValidateDoc(ctxt, doc);
822
+
823
+ if (xmlStrEqual(validity, BAD_CAST "valid")) {
824
+ if (ret > 0) {
825
+ test_log("valid instance %s failed to validate against %s\n",
826
+ path, spath);
827
+ nb_errors++;
828
+ } else if (ret < 0) {
829
+ test_log("valid instance %s got internal error validating %s\n",
830
+ path, spath);
831
+ nb_internals++;
832
+ nb_errors++;
833
+ }
834
+ } else if (xmlStrEqual(validity, BAD_CAST "invalid")) {
835
+ if (ret == 0) {
836
+ test_log("Failed to detect invalid instance %s against %s\n",
837
+ path, spath);
838
+ nb_errors++;
839
+ }
840
+ } else {
841
+ test_log("instanceDocument line %ld has unexpected validity value%s\n",
842
+ xmlGetLineNo(cur), validity);
843
+ ret = -1;
844
+ goto done;
845
+ }
846
+
847
+ done:
848
+ if (href != NULL) xmlFree(href);
849
+ if (path != NULL) xmlFree(path);
850
+ if (validity != NULL) xmlFree(validity);
851
+ if (ctxt != NULL) xmlSchemaFreeValidCtxt(ctxt);
852
+ if (doc != NULL) xmlFreeDoc(doc);
853
+ xmlResetLastError();
854
+ if (mem != xmlMemUsed()) {
855
+ test_log("Validation of tests starting line %ld leaked %d\n",
856
+ xmlGetLineNo(cur), xmlMemUsed() - mem);
857
+ nb_leaks++;
858
+ }
859
+ return(ret);
860
+ }
861
+
862
+ static int
863
+ xstcTestGroup(xmlNodePtr cur, const char *base) {
864
+ xmlChar *href = NULL;
865
+ xmlChar *path = NULL;
866
+ xmlChar *validity = NULL;
867
+ xmlSchemaPtr schemas = NULL;
868
+ xmlSchemaParserCtxtPtr ctxt;
869
+ xmlNodePtr instance;
870
+ int ret = 0, mem;
871
+
872
+ xmlResetLastError();
873
+ testErrorsSize = 0; testErrors[0] = 0;
874
+ mem = xmlMemUsed();
875
+ href = getString(cur,
876
+ "string(ts:schemaTest/ts:schemaDocument/@xlink:href)");
877
+ if ((href == NULL) || (href[0] == 0)) {
878
+ test_log("testGroup line %ld misses href for schemaDocument\n",
879
+ xmlGetLineNo(cur));
880
+ ret = -1;
881
+ goto done;
882
+ }
883
+ path = xmlBuildURI(href, BAD_CAST base);
884
+ if (path == NULL) {
885
+ test_log("Failed to build path to schemas testGroup line %ld : %s\n",
886
+ xmlGetLineNo(cur), href);
887
+ ret = -1;
888
+ goto done;
889
+ }
890
+ if (checkTestFile((const char *) path) <= 0) {
891
+ test_log("schemas for testGroup line %ld is missing: %s\n",
892
+ xmlGetLineNo(cur), path);
893
+ ret = -1;
894
+ goto done;
895
+ }
896
+ validity = getString(cur,
897
+ "string(ts:schemaTest/ts:expected/@validity)");
898
+ if (validity == NULL) {
899
+ test_log("testGroup line %ld misses expected validity\n",
900
+ xmlGetLineNo(cur));
901
+ ret = -1;
902
+ goto done;
903
+ }
904
+ nb_tests++;
905
+ if (xmlStrEqual(validity, BAD_CAST "valid")) {
906
+ nb_schematas++;
907
+ ctxt = xmlSchemaNewParserCtxt((const char *) path);
908
+ xmlSchemaSetParserErrors(ctxt, testErrorHandler, testErrorHandler,
909
+ ctxt);
910
+ schemas = xmlSchemaParse(ctxt);
911
+ xmlSchemaFreeParserCtxt(ctxt);
912
+ if (schemas == NULL) {
913
+ test_log("valid schemas %s failed to parse\n",
914
+ path);
915
+ ret = 1;
916
+ nb_errors++;
917
+ }
918
+ if ((ret == 0) && (strstr(testErrors, "nimplemented") != NULL)) {
919
+ test_log("valid schemas %s hit an unimplemented block\n",
920
+ path);
921
+ ret = 1;
922
+ nb_unimplemented++;
923
+ nb_errors++;
924
+ }
925
+ instance = getNext(cur, "./ts:instanceTest[1]");
926
+ while (instance != NULL) {
927
+ if (schemas != NULL) {
928
+ xstcTestInstance(instance, schemas, path, base);
929
+ } else {
930
+ /*
931
+ * We'll automatically mark the instances as failed
932
+ * if the schema was broken.
933
+ */
934
+ nb_errors++;
935
+ }
936
+ instance = getNext(instance,
937
+ "following-sibling::ts:instanceTest[1]");
938
+ }
939
+ } else if (xmlStrEqual(validity, BAD_CAST "invalid")) {
940
+ nb_schematas++;
941
+ ctxt = xmlSchemaNewParserCtxt((const char *) path);
942
+ xmlSchemaSetParserErrors(ctxt, testErrorHandler, testErrorHandler,
943
+ ctxt);
944
+ schemas = xmlSchemaParse(ctxt);
945
+ xmlSchemaFreeParserCtxt(ctxt);
946
+ if (schemas != NULL) {
947
+ test_log("Failed to detect error in schemas %s\n",
948
+ path);
949
+ nb_errors++;
950
+ ret = 1;
951
+ }
952
+ if ((ret == 0) && (strstr(testErrors, "nimplemented") != NULL)) {
953
+ nb_unimplemented++;
954
+ test_log("invalid schemas %s hit an unimplemented block\n",
955
+ path);
956
+ ret = 1;
957
+ nb_errors++;
958
+ }
959
+ } else {
960
+ test_log("testGroup line %ld misses unexpected validity value%s\n",
961
+ xmlGetLineNo(cur), validity);
962
+ ret = -1;
963
+ goto done;
964
+ }
965
+
966
+ done:
967
+ if (href != NULL) xmlFree(href);
968
+ if (path != NULL) xmlFree(path);
969
+ if (validity != NULL) xmlFree(validity);
970
+ if (schemas != NULL) xmlSchemaFree(schemas);
971
+ xmlResetLastError();
972
+ if ((mem != xmlMemUsed()) && (extraMemoryFromResolver == 0)) {
973
+ test_log("Processing test line %ld %s leaked %d\n",
974
+ xmlGetLineNo(cur), path, xmlMemUsed() - mem);
975
+ nb_leaks++;
976
+ }
977
+ return(ret);
978
+ }
979
+
980
+ static int
981
+ xstcMetadata(const char *metadata, const char *base) {
982
+ xmlDocPtr doc;
983
+ xmlNodePtr cur;
984
+ xmlChar *contributor;
985
+ xmlChar *name;
986
+ int ret = 0;
987
+
988
+ doc = xmlReadFile(metadata, NULL, XML_PARSE_NOENT);
989
+ if (doc == NULL) {
990
+ fprintf(stderr, "Failed to parse %s\n", metadata);
991
+ return(-1);
992
+ }
993
+
994
+ cur = xmlDocGetRootElement(doc);
995
+ if ((cur == NULL) || (!xmlStrEqual(cur->name, BAD_CAST "testSet"))) {
996
+ fprintf(stderr, "Unexpected format %s\n", metadata);
997
+ return(-1);
998
+ }
999
+ contributor = xmlGetProp(cur, BAD_CAST "contributor");
1000
+ if (contributor == NULL) {
1001
+ contributor = xmlStrdup(BAD_CAST "Unknown");
1002
+ }
1003
+ name = xmlGetProp(cur, BAD_CAST "name");
1004
+ if (name == NULL) {
1005
+ name = xmlStrdup(BAD_CAST "Unknown");
1006
+ }
1007
+ printf("## %s test suite for Schemas version %s\n", contributor, name);
1008
+ xmlFree(contributor);
1009
+ xmlFree(name);
1010
+
1011
+ cur = getNext(cur, "./ts:testGroup[1]");
1012
+ if ((cur == NULL) || (!xmlStrEqual(cur->name, BAD_CAST "testGroup"))) {
1013
+ fprintf(stderr, "Unexpected format %s\n", metadata);
1014
+ ret = -1;
1015
+ goto done;
1016
+ }
1017
+ while (cur != NULL) {
1018
+ xstcTestGroup(cur, base);
1019
+ cur = getNext(cur, "following-sibling::ts:testGroup[1]");
1020
+ }
1021
+
1022
+ done:
1023
+ xmlFreeDoc(doc);
1024
+ return(ret);
1025
+ }
1026
+
1027
+ /************************************************************************
1028
+ * *
1029
+ * The driver for the tests *
1030
+ * *
1031
+ ************************************************************************/
1032
+
1033
+ int
1034
+ main(int argc ATTRIBUTE_UNUSED, char **argv ATTRIBUTE_UNUSED) {
1035
+ int ret = 0;
1036
+ int old_errors, old_tests, old_leaks;
1037
+
1038
+ logfile = fopen(LOGFILE, "w");
1039
+ if (logfile == NULL) {
1040
+ fprintf(stderr,
1041
+ "Could not open the log file, running in verbose mode\n");
1042
+ verbose = 1;
1043
+ }
1044
+ initializeLibxml2();
1045
+
1046
+ if ((argc >= 2) && (!strcmp(argv[1], "-v")))
1047
+ verbose = 1;
1048
+
1049
+
1050
+ old_errors = nb_errors;
1051
+ old_tests = nb_tests;
1052
+ old_leaks = nb_leaks;
1053
+ xsdTest();
1054
+ if ((nb_errors == old_errors) && (nb_leaks == old_leaks))
1055
+ printf("Ran %d tests, no errors\n", nb_tests - old_tests);
1056
+ else
1057
+ printf("Ran %d tests, %d errors, %d leaks\n",
1058
+ nb_tests - old_tests,
1059
+ nb_errors - old_errors,
1060
+ nb_leaks - old_leaks);
1061
+ old_errors = nb_errors;
1062
+ old_tests = nb_tests;
1063
+ old_leaks = nb_leaks;
1064
+ rngTest1();
1065
+ if ((nb_errors == old_errors) && (nb_leaks == old_leaks))
1066
+ printf("Ran %d tests, no errors\n", nb_tests - old_tests);
1067
+ else
1068
+ printf("Ran %d tests, %d errors, %d leaks\n",
1069
+ nb_tests - old_tests,
1070
+ nb_errors - old_errors,
1071
+ nb_leaks - old_leaks);
1072
+ old_errors = nb_errors;
1073
+ old_tests = nb_tests;
1074
+ old_leaks = nb_leaks;
1075
+ rngTest2();
1076
+ if ((nb_errors == old_errors) && (nb_leaks == old_leaks))
1077
+ printf("Ran %d tests, no errors\n", nb_tests - old_tests);
1078
+ else
1079
+ printf("Ran %d tests, %d errors, %d leaks\n",
1080
+ nb_tests - old_tests,
1081
+ nb_errors - old_errors,
1082
+ nb_leaks - old_leaks);
1083
+ old_errors = nb_errors;
1084
+ old_tests = nb_tests;
1085
+ old_leaks = nb_leaks;
1086
+ nb_internals = 0;
1087
+ nb_schematas = 0;
1088
+ xstcMetadata("xstc/Tests/Metadata/NISTXMLSchemaDatatypes.testSet",
1089
+ "xstc/Tests/Metadata/");
1090
+ if ((nb_errors == old_errors) && (nb_leaks == old_leaks))
1091
+ printf("Ran %d tests (%d schemata), no errors\n",
1092
+ nb_tests - old_tests, nb_schematas);
1093
+ else
1094
+ printf("Ran %d tests (%d schemata), %d errors (%d internals), %d leaks\n",
1095
+ nb_tests - old_tests,
1096
+ nb_schematas,
1097
+ nb_errors - old_errors,
1098
+ nb_internals,
1099
+ nb_leaks - old_leaks);
1100
+ old_errors = nb_errors;
1101
+ old_tests = nb_tests;
1102
+ old_leaks = nb_leaks;
1103
+ nb_internals = 0;
1104
+ nb_schematas = 0;
1105
+ xstcMetadata("xstc/Tests/Metadata/SunXMLSchema1-0-20020116.testSet",
1106
+ "xstc/Tests/");
1107
+ if ((nb_errors == old_errors) && (nb_leaks == old_leaks))
1108
+ printf("Ran %d tests (%d schemata), no errors\n",
1109
+ nb_tests - old_tests, nb_schematas);
1110
+ else
1111
+ printf("Ran %d tests (%d schemata), %d errors (%d internals), %d leaks\n",
1112
+ nb_tests - old_tests,
1113
+ nb_schematas,
1114
+ nb_errors - old_errors,
1115
+ nb_internals,
1116
+ nb_leaks - old_leaks);
1117
+ old_errors = nb_errors;
1118
+ old_tests = nb_tests;
1119
+ old_leaks = nb_leaks;
1120
+ nb_internals = 0;
1121
+ nb_schematas = 0;
1122
+ xstcMetadata("xstc/Tests/Metadata/MSXMLSchema1-0-20020116.testSet",
1123
+ "xstc/Tests/");
1124
+ if ((nb_errors == old_errors) && (nb_leaks == old_leaks))
1125
+ printf("Ran %d tests (%d schemata), no errors\n",
1126
+ nb_tests - old_tests, nb_schematas);
1127
+ else
1128
+ printf("Ran %d tests (%d schemata), %d errors (%d internals), %d leaks\n",
1129
+ nb_tests - old_tests,
1130
+ nb_schematas,
1131
+ nb_errors - old_errors,
1132
+ nb_internals,
1133
+ nb_leaks - old_leaks);
1134
+
1135
+ if ((nb_errors == 0) && (nb_leaks == 0)) {
1136
+ ret = 0;
1137
+ printf("Total %d tests, no errors\n",
1138
+ nb_tests);
1139
+ } else {
1140
+ ret = 1;
1141
+ printf("Total %d tests, %d errors, %d leaks\n",
1142
+ nb_tests, nb_errors, nb_leaks);
1143
+ }
1144
+ xmlXPathFreeContext(ctxtXPath);
1145
+ xmlCleanupParser();
1146
+ xmlMemoryDump();
1147
+
1148
+ if (logfile != NULL)
1149
+ fclose(logfile);
1150
+ return(ret);
1151
+ }
1152
+ #else /* !SCHEMAS */
1153
+ int
1154
+ main(int argc ATTRIBUTE_UNUSED, char **argv ATTRIBUTE_UNUSED) {
1155
+ fprintf(stderr, "runsuite requires support for schemas and xpath in libxml2\n");
1156
+ }
1157
+ #endif