1ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/* 2ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * parser.c : an XML 1.0 parser, namespaces and validity support are mostly 3ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * implemented on top of the SAX interfaces 4ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 5ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * References: 6ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * The XML specification: 7ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * http://www.w3.org/TR/REC-xml 8ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Original 1.0 version: 9ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * http://www.w3.org/TR/1998/REC-xml-19980210 10ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * XML second edition working draft 11ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * http://www.w3.org/TR/2000/WD-xml-2e-20000814 12ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 13ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Okay this is a big file, the parser core is around 7000 lines, then it 14ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * is followed by the progressive parser top routines, then the various 15ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * high level APIs to call the parser and a few miscellaneous functions. 16ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * A number of helper functions and deprecated ones have been moved to 17ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * parserInternals.c to reduce this file size. 18ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * As much as possible the functions are associated with their relative 19ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * production in the XML specification. A few productions defining the 20ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * different ranges of character are actually implanted either in 21ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * parserInternals.h or parserInternals.c 22ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * The DOM tree build is realized from the default SAX callbacks in 23ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * the module SAX.c. 24ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * The routines doing the validation checks are in valid.c and called either 25ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * from the SAX callbacks or as standalone functions using a preparsed 26ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * document. 27ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 28ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * See Copyright for the status of this software. 29ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 30ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * daniel@veillard.com 31ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 32ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 33ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#define IN_LIBXML 34ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#include "libxml.h" 35ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 36ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#if defined(WIN32) && !defined (__CYGWIN__) 37ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#define XML_DIR_SEP '\\' 38ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#else 39ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#define XML_DIR_SEP '/' 40ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 41ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 42ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#include <stdlib.h> 43ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#include <string.h> 44ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#include <stdarg.h> 45ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#include <libxml/xmlmemory.h> 46ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#include <libxml/threads.h> 47ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#include <libxml/globals.h> 48ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#include <libxml/tree.h> 49ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#include <libxml/parser.h> 50ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#include <libxml/parserInternals.h> 51ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#include <libxml/valid.h> 52ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#include <libxml/entities.h> 53ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#include <libxml/xmlerror.h> 54ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#include <libxml/encoding.h> 55ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#include <libxml/xmlIO.h> 56ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#include <libxml/uri.h> 57ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_CATALOG_ENABLED 58ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#include <libxml/catalog.h> 59ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 60ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_SCHEMAS_ENABLED 61ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#include <libxml/xmlschemastypes.h> 62ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#include <libxml/relaxng.h> 63ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 64ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef HAVE_CTYPE_H 65ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#include <ctype.h> 66ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 67ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef HAVE_STDLIB_H 68ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#include <stdlib.h> 69ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 70ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef HAVE_SYS_STAT_H 71ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#include <sys/stat.h> 72ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 73ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef HAVE_FCNTL_H 74ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#include <fcntl.h> 75ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 76ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef HAVE_UNISTD_H 77ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#include <unistd.h> 78ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 79ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef HAVE_ZLIB_H 80ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#include <zlib.h> 81ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 82df143a5041f03a22808b59c76698770b74692815Selim Gurun#ifdef HAVE_LZMA_H 83df143a5041f03a22808b59c76698770b74692815Selim Gurun#include <lzma.h> 84df143a5041f03a22808b59c76698770b74692815Selim Gurun#endif 85ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 8660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scottstatic void 8760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick ScottxmlFatalErr(xmlParserCtxtPtr ctxt, xmlParserErrors error, const char *info); 8860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott 89df143a5041f03a22808b59c76698770b74692815Selim Gurunstatic xmlParserCtxtPtr 90df143a5041f03a22808b59c76698770b74692815Selim GurunxmlCreateEntityParserCtxtInternal(const xmlChar *URL, const xmlChar *ID, 91df143a5041f03a22808b59c76698770b74692815Selim Gurun const xmlChar *base, xmlParserCtxtPtr pctx); 92df143a5041f03a22808b59c76698770b74692815Selim Gurun 9360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott/************************************************************************ 9460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * * 9560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * Arbitrary limits set in the parser. See XML_PARSE_HUGE * 9660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * * 9760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ************************************************************************/ 9860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott 9960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott#define XML_PARSER_BIG_ENTITY 1000 10060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott#define XML_PARSER_LOT_ENTITY 5000 10160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott 10260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott/* 10360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * XML_PARSER_NON_LINEAR is the threshold where the ratio of parsed entity 10460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * replacement over the size in byte of the input indicates that you have 10560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * and eponential behaviour. A value of 10 correspond to at least 3 entity 10660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * replacement per byte of input. 10760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott */ 10860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott#define XML_PARSER_NON_LINEAR 10 10960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott 11060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott/* 11160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * xmlParserEntityCheck 11260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * 11360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * Function to check non-linear entity expansion behaviour 11460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * This is here to detect and stop exponential linear entity expansion 11560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * This is not a limitation of the parser but a safety 11660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * boundary feature. It can be disabled with the XML_PARSE_HUGE 11760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * parser option. 11860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott */ 11960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scottstatic int 12060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick ScottxmlParserEntityCheck(xmlParserCtxtPtr ctxt, unsigned long size, 12160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott xmlEntityPtr ent) 12260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott{ 12360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott unsigned long consumed = 0; 12460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott 12560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if ((ctxt == NULL) || (ctxt->options & XML_PARSE_HUGE)) 12660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott return (0); 12760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (ctxt->lastError.code == XML_ERR_ENTITY_LOOP) 12860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott return (1); 12960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (size != 0) { 13060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott /* 13160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * Do the check based on the replacement size of the entity 13260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott */ 13360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (size < XML_PARSER_BIG_ENTITY) 13460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott return(0); 13560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott 13660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott /* 13760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * A limit on the amount of text data reasonably used 13860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott */ 13960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (ctxt->input != NULL) { 14060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott consumed = ctxt->input->consumed + 14160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott (ctxt->input->cur - ctxt->input->base); 14260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } 14360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott consumed += ctxt->sizeentities; 14460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott 14560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if ((size < XML_PARSER_NON_LINEAR * consumed) && 14660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott (ctxt->nbentities * 3 < XML_PARSER_NON_LINEAR * consumed)) 14760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott return (0); 14860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } else if (ent != NULL) { 14960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott /* 15060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * use the number of parsed entities in the replacement 15160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott */ 15260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott size = ent->checked; 15360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott 15460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott /* 15560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * The amount of data parsed counting entities size only once 15660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott */ 15760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (ctxt->input != NULL) { 15860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott consumed = ctxt->input->consumed + 15960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott (ctxt->input->cur - ctxt->input->base); 16060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } 16160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott consumed += ctxt->sizeentities; 16260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott 16360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott /* 16460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * Check the density of entities for the amount of data 16560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * knowing an entity reference will take at least 3 bytes 16660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott */ 16760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (size * 3 < consumed * XML_PARSER_NON_LINEAR) 16860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott return (0); 16960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } else { 17060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott /* 17160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * strange we got no data for checking just return 17260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott */ 17360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott return (0); 17460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } 17560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott 17660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott xmlFatalErr(ctxt, XML_ERR_ENTITY_LOOP, NULL); 17760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott return (1); 17860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott} 17960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott 180ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 181ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlParserMaxDepth: 182ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 18360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * arbitrary depth limit for the XML documents that we allow to 18460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * process. This is not a limitation of the parser but a safety 18560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * boundary feature. It can be disabled with the XML_PARSE_HUGE 18660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * parser option. 187ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 18860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scottunsigned int xmlParserMaxDepth = 256; 18960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott 190ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 191ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 19260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott#define SAX2 1 193ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#define XML_PARSER_BIG_BUFFER_SIZE 300 194ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#define XML_PARSER_BUFFER_SIZE 100 195ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#define SAX_COMPAT_MODE BAD_CAST "SAX compatibility mode document" 196ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 197ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/* 198ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * List of XML prefixed PI allowed by W3C specs 199ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 200ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 201ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic const char *xmlW3CPIs[] = { 202ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "xml-stylesheet", 203df143a5041f03a22808b59c76698770b74692815Selim Gurun "xml-model", 204ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project NULL 205ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project}; 206ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 207ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 208ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/* DEPR void xmlParserHandleReference(xmlParserCtxtPtr ctxt); */ 209df143a5041f03a22808b59c76698770b74692815Selim Gurunstatic xmlEntityPtr xmlParseStringPEReference(xmlParserCtxtPtr ctxt, 210df143a5041f03a22808b59c76698770b74692815Selim Gurun const xmlChar **str); 211ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 212ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic xmlParserErrors 213ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlParseExternalEntityPrivate(xmlDocPtr doc, xmlParserCtxtPtr oldctxt, 214ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSAXHandlerPtr sax, 215ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project void *user_data, int depth, const xmlChar *URL, 216ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar *ID, xmlNodePtr *list); 217ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 21860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scottstatic int 21960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick ScottxmlCtxtUseOptionsInternal(xmlParserCtxtPtr ctxt, int options, 22060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott const char *encoding); 221ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_LEGACY_ENABLED 222ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic void 223ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlAddEntityReference(xmlEntityPtr ent, xmlNodePtr firstNode, 224ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlNodePtr lastNode); 225ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif /* LIBXML_LEGACY_ENABLED */ 226ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 227ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic xmlParserErrors 228ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlParseBalancedChunkMemoryInternal(xmlParserCtxtPtr oldctxt, 229ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar *string, void *user_data, xmlNodePtr *lst); 230ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 23160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scottstatic int 23260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick ScottxmlLoadEntityContent(xmlParserCtxtPtr ctxt, xmlEntityPtr entity); 23360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott 234ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/************************************************************************ 235ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * * 236ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Some factorized error routines * 237ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * * 238ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ************************************************************************/ 239ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 240ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 241ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlErrAttributeDup: 242ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctxt: an XML parser context 243ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @prefix: the attribute prefix 244ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @localname: the attribute localname 245ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 246ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Handle a redefinition of attribute error 247ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 248ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic void 249ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlErrAttributeDup(xmlParserCtxtPtr ctxt, const xmlChar * prefix, 250ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar * localname) 251ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{ 252ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ctxt != NULL) && (ctxt->disableSAX != 0) && 253ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (ctxt->instate == XML_PARSER_EOF)) 254ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return; 255ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt != NULL) 256ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->errNo = XML_ERR_ATTRIBUTE_REDEFINED; 257df143a5041f03a22808b59c76698770b74692815Selim Gurun 258ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (prefix == NULL) 259ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project __xmlRaiseError(NULL, NULL, NULL, ctxt, NULL, XML_FROM_PARSER, 260df143a5041f03a22808b59c76698770b74692815Selim Gurun XML_ERR_ATTRIBUTE_REDEFINED, XML_ERR_FATAL, NULL, 0, 261ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (const char *) localname, NULL, NULL, 0, 0, 262ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "Attribute %s redefined\n", localname); 263ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else 264ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project __xmlRaiseError(NULL, NULL, NULL, ctxt, NULL, XML_FROM_PARSER, 265df143a5041f03a22808b59c76698770b74692815Selim Gurun XML_ERR_ATTRIBUTE_REDEFINED, XML_ERR_FATAL, NULL, 0, 266ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (const char *) prefix, (const char *) localname, 267ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project NULL, 0, 0, "Attribute %s:%s redefined\n", prefix, 268ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project localname); 269ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt != NULL) { 270ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->wellFormed = 0; 271ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt->recovery == 0) 272ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->disableSAX = 1; 273ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 274ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 275ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 276ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 277ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlFatalErr: 278ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctxt: an XML parser context 279ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @error: the error number 280ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @extra: extra information string 281ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 282ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Handle a fatal parser error, i.e. violating Well-Formedness constraints 283ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 284ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic void 285ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlFatalErr(xmlParserCtxtPtr ctxt, xmlParserErrors error, const char *info) 286ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{ 287ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const char *errmsg; 288ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 289ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ctxt != NULL) && (ctxt->disableSAX != 0) && 290ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (ctxt->instate == XML_PARSER_EOF)) 291ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return; 292ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project switch (error) { 293ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_ERR_INVALID_HEX_CHARREF: 294ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project errmsg = "CharRef: invalid hexadecimal value\n"; 295ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 296ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_ERR_INVALID_DEC_CHARREF: 297ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project errmsg = "CharRef: invalid decimal value\n"; 298ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 299ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_ERR_INVALID_CHARREF: 300ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project errmsg = "CharRef: invalid value\n"; 301ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 302ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_ERR_INTERNAL_ERROR: 303ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project errmsg = "internal error"; 304ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 305ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_ERR_PEREF_AT_EOF: 306ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project errmsg = "PEReference at end of document\n"; 307ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 308ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_ERR_PEREF_IN_PROLOG: 309ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project errmsg = "PEReference in prolog\n"; 310ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 311ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_ERR_PEREF_IN_EPILOG: 312ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project errmsg = "PEReference in epilog\n"; 313ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 314ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_ERR_PEREF_NO_NAME: 315ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project errmsg = "PEReference: no name\n"; 316ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 317ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_ERR_PEREF_SEMICOL_MISSING: 318ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project errmsg = "PEReference: expecting ';'\n"; 319ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 320ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_ERR_ENTITY_LOOP: 321ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project errmsg = "Detected an entity reference loop\n"; 322ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 323ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_ERR_ENTITY_NOT_STARTED: 324ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project errmsg = "EntityValue: \" or ' expected\n"; 325ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 326ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_ERR_ENTITY_PE_INTERNAL: 327ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project errmsg = "PEReferences forbidden in internal subset\n"; 328ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 329ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_ERR_ENTITY_NOT_FINISHED: 330ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project errmsg = "EntityValue: \" or ' expected\n"; 331ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 332ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_ERR_ATTRIBUTE_NOT_STARTED: 333ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project errmsg = "AttValue: \" or ' expected\n"; 334ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 335ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_ERR_LT_IN_ATTRIBUTE: 336ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project errmsg = "Unescaped '<' not allowed in attributes values\n"; 337ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 338ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_ERR_LITERAL_NOT_STARTED: 339ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project errmsg = "SystemLiteral \" or ' expected\n"; 340ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 341ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_ERR_LITERAL_NOT_FINISHED: 342ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project errmsg = "Unfinished System or Public ID \" or ' expected\n"; 343ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 344ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_ERR_MISPLACED_CDATA_END: 345ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project errmsg = "Sequence ']]>' not allowed in content\n"; 346ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 347ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_ERR_URI_REQUIRED: 348ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project errmsg = "SYSTEM or PUBLIC, the URI is missing\n"; 349ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 350ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_ERR_PUBID_REQUIRED: 351ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project errmsg = "PUBLIC, the Public Identifier is missing\n"; 352ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 353ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_ERR_HYPHEN_IN_COMMENT: 354ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project errmsg = "Comment must not contain '--' (double-hyphen)\n"; 355ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 356ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_ERR_PI_NOT_STARTED: 357ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project errmsg = "xmlParsePI : no target name\n"; 358ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 359ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_ERR_RESERVED_XML_NAME: 360ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project errmsg = "Invalid PI name\n"; 361ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 362ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_ERR_NOTATION_NOT_STARTED: 363ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project errmsg = "NOTATION: Name expected here\n"; 364ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 365ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_ERR_NOTATION_NOT_FINISHED: 366ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project errmsg = "'>' required to close NOTATION declaration\n"; 367ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 368ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_ERR_VALUE_REQUIRED: 369ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project errmsg = "Entity value required\n"; 370ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 371ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_ERR_URI_FRAGMENT: 372ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project errmsg = "Fragment not allowed"; 373ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 374ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_ERR_ATTLIST_NOT_STARTED: 375ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project errmsg = "'(' required to start ATTLIST enumeration\n"; 376ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 377ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_ERR_NMTOKEN_REQUIRED: 378ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project errmsg = "NmToken expected in ATTLIST enumeration\n"; 379ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 380ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_ERR_ATTLIST_NOT_FINISHED: 381ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project errmsg = "')' required to finish ATTLIST enumeration\n"; 382ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 383ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_ERR_MIXED_NOT_STARTED: 384ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project errmsg = "MixedContentDecl : '|' or ')*' expected\n"; 385ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 386ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_ERR_PCDATA_REQUIRED: 387ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project errmsg = "MixedContentDecl : '#PCDATA' expected\n"; 388ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 389ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_ERR_ELEMCONTENT_NOT_STARTED: 390ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project errmsg = "ContentDecl : Name or '(' expected\n"; 391ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 392ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_ERR_ELEMCONTENT_NOT_FINISHED: 393ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project errmsg = "ContentDecl : ',' '|' or ')' expected\n"; 394ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 395ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_ERR_PEREF_IN_INT_SUBSET: 396ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project errmsg = 397ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "PEReference: forbidden within markup decl in internal subset\n"; 398ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 399ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_ERR_GT_REQUIRED: 400ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project errmsg = "expected '>'\n"; 401ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 402ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_ERR_CONDSEC_INVALID: 403ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project errmsg = "XML conditional section '[' expected\n"; 404ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 405ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_ERR_EXT_SUBSET_NOT_FINISHED: 406ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project errmsg = "Content error in the external subset\n"; 407ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 408ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_ERR_CONDSEC_INVALID_KEYWORD: 409ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project errmsg = 410ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "conditional section INCLUDE or IGNORE keyword expected\n"; 411ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 412ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_ERR_CONDSEC_NOT_FINISHED: 413ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project errmsg = "XML conditional section not closed\n"; 414ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 415ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_ERR_XMLDECL_NOT_STARTED: 416ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project errmsg = "Text declaration '<?xml' required\n"; 417ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 418ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_ERR_XMLDECL_NOT_FINISHED: 419ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project errmsg = "parsing XML declaration: '?>' expected\n"; 420ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 421ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_ERR_EXT_ENTITY_STANDALONE: 422ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project errmsg = "external parsed entities cannot be standalone\n"; 423ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 424ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_ERR_ENTITYREF_SEMICOL_MISSING: 425ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project errmsg = "EntityRef: expecting ';'\n"; 426ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 427ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_ERR_DOCTYPE_NOT_FINISHED: 428ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project errmsg = "DOCTYPE improperly terminated\n"; 429ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 430ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_ERR_LTSLASH_REQUIRED: 431ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project errmsg = "EndTag: '</' not found\n"; 432ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 433ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_ERR_EQUAL_REQUIRED: 434ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project errmsg = "expected '='\n"; 435ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 436ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_ERR_STRING_NOT_CLOSED: 437ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project errmsg = "String not closed expecting \" or '\n"; 438ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 439ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_ERR_STRING_NOT_STARTED: 440ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project errmsg = "String not started expecting ' or \"\n"; 441ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 442ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_ERR_ENCODING_NAME: 443ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project errmsg = "Invalid XML encoding name\n"; 444ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 445ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_ERR_STANDALONE_VALUE: 446ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project errmsg = "standalone accepts only 'yes' or 'no'\n"; 447ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 448ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_ERR_DOCUMENT_EMPTY: 449ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project errmsg = "Document is empty\n"; 450ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 451ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_ERR_DOCUMENT_END: 452ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project errmsg = "Extra content at the end of the document\n"; 453ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 454ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_ERR_NOT_WELL_BALANCED: 455ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project errmsg = "chunk is not well balanced\n"; 456ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 457ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_ERR_EXTRA_CONTENT: 458ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project errmsg = "extra content at the end of well balanced chunk\n"; 459ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 460ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_ERR_VERSION_MISSING: 461ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project errmsg = "Malformed declaration expecting version\n"; 462ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 463ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#if 0 464ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case: 465ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project errmsg = "\n"; 466ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 467ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 468ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project default: 469ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project errmsg = "Unregistered error message\n"; 470ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 471ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt != NULL) 472ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->errNo = error; 473ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project __xmlRaiseError(NULL, NULL, NULL, ctxt, NULL, XML_FROM_PARSER, error, 474ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project XML_ERR_FATAL, NULL, 0, info, NULL, NULL, 0, 0, errmsg, 475ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project info); 476ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt != NULL) { 477ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->wellFormed = 0; 478ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt->recovery == 0) 479ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->disableSAX = 1; 480ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 481ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 482ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 483ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 484ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlFatalErrMsg: 485ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctxt: an XML parser context 486ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @error: the error number 487ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @msg: the error message 488ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 489ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Handle a fatal parser error, i.e. violating Well-Formedness constraints 490ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 491ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic void 492ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlFatalErrMsg(xmlParserCtxtPtr ctxt, xmlParserErrors error, 493ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const char *msg) 494ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{ 495ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ctxt != NULL) && (ctxt->disableSAX != 0) && 496ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (ctxt->instate == XML_PARSER_EOF)) 497ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return; 498ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt != NULL) 499ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->errNo = error; 500ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project __xmlRaiseError(NULL, NULL, NULL, ctxt, NULL, XML_FROM_PARSER, error, 50143ff9b493a5b9d65ae1661455a22fb2f62a3b352Nick Kralevich XML_ERR_FATAL, NULL, 0, NULL, NULL, NULL, 0, 0, "%s", msg); 502ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt != NULL) { 503ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->wellFormed = 0; 504ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt->recovery == 0) 505ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->disableSAX = 1; 506ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 507ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 508ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 509ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 510ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlWarningMsg: 511ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctxt: an XML parser context 512ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @error: the error number 513ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @msg: the error message 514ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @str1: extra data 515ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @str2: extra data 516ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 517ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Handle a warning. 518ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 519ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic void 520ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlWarningMsg(xmlParserCtxtPtr ctxt, xmlParserErrors error, 521ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const char *msg, const xmlChar *str1, const xmlChar *str2) 522ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{ 523ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlStructuredErrorFunc schannel = NULL; 52460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott 525ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ctxt != NULL) && (ctxt->disableSAX != 0) && 526ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (ctxt->instate == XML_PARSER_EOF)) 527ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return; 528ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ctxt != NULL) && (ctxt->sax != NULL) && 529ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (ctxt->sax->initialized == XML_SAX2_MAGIC)) 530ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project schannel = ctxt->sax->serror; 531df143a5041f03a22808b59c76698770b74692815Selim Gurun if (ctxt != NULL) { 532df143a5041f03a22808b59c76698770b74692815Selim Gurun __xmlRaiseError(schannel, 533ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (ctxt->sax) ? ctxt->sax->warning : NULL, 534ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->userData, 535ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt, NULL, XML_FROM_PARSER, error, 536ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project XML_ERR_WARNING, NULL, 0, 537ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (const char *) str1, (const char *) str2, NULL, 0, 0, 538ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project msg, (const char *) str1, (const char *) str2); 539df143a5041f03a22808b59c76698770b74692815Selim Gurun } else { 540df143a5041f03a22808b59c76698770b74692815Selim Gurun __xmlRaiseError(schannel, NULL, NULL, 541df143a5041f03a22808b59c76698770b74692815Selim Gurun ctxt, NULL, XML_FROM_PARSER, error, 542df143a5041f03a22808b59c76698770b74692815Selim Gurun XML_ERR_WARNING, NULL, 0, 543df143a5041f03a22808b59c76698770b74692815Selim Gurun (const char *) str1, (const char *) str2, NULL, 0, 0, 544df143a5041f03a22808b59c76698770b74692815Selim Gurun msg, (const char *) str1, (const char *) str2); 545df143a5041f03a22808b59c76698770b74692815Selim Gurun } 546ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 547ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 548ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 549ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlValidityError: 550ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctxt: an XML parser context 551ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @error: the error number 552ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @msg: the error message 553ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @str1: extra data 554ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 555ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Handle a validity error. 556ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 557ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic void 558ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlValidityError(xmlParserCtxtPtr ctxt, xmlParserErrors error, 55960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott const char *msg, const xmlChar *str1, const xmlChar *str2) 560ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{ 561ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlStructuredErrorFunc schannel = NULL; 562ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 563ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ctxt != NULL) && (ctxt->disableSAX != 0) && 564ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (ctxt->instate == XML_PARSER_EOF)) 565ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return; 566ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt != NULL) { 567ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->errNo = error; 568ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ctxt->sax != NULL) && (ctxt->sax->initialized == XML_SAX2_MAGIC)) 569ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project schannel = ctxt->sax->serror; 570ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 571df143a5041f03a22808b59c76698770b74692815Selim Gurun if (ctxt != NULL) { 572df143a5041f03a22808b59c76698770b74692815Selim Gurun __xmlRaiseError(schannel, 573ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->vctxt.error, ctxt->vctxt.userData, 574ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt, NULL, XML_FROM_DTD, error, 575ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project XML_ERR_ERROR, NULL, 0, (const char *) str1, 57660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott (const char *) str2, NULL, 0, 0, 57760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott msg, (const char *) str1, (const char *) str2); 578ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->valid = 0; 579df143a5041f03a22808b59c76698770b74692815Selim Gurun } else { 580df143a5041f03a22808b59c76698770b74692815Selim Gurun __xmlRaiseError(schannel, NULL, NULL, 581df143a5041f03a22808b59c76698770b74692815Selim Gurun ctxt, NULL, XML_FROM_DTD, error, 582df143a5041f03a22808b59c76698770b74692815Selim Gurun XML_ERR_ERROR, NULL, 0, (const char *) str1, 583df143a5041f03a22808b59c76698770b74692815Selim Gurun (const char *) str2, NULL, 0, 0, 584df143a5041f03a22808b59c76698770b74692815Selim Gurun msg, (const char *) str1, (const char *) str2); 585ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 586ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 587ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 588ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 589ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlFatalErrMsgInt: 590ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctxt: an XML parser context 591ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @error: the error number 592ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @msg: the error message 593ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @val: an integer value 594ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 595ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Handle a fatal parser error, i.e. violating Well-Formedness constraints 596ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 597ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic void 598ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlFatalErrMsgInt(xmlParserCtxtPtr ctxt, xmlParserErrors error, 599ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const char *msg, int val) 600ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{ 601ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ctxt != NULL) && (ctxt->disableSAX != 0) && 602ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (ctxt->instate == XML_PARSER_EOF)) 603ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return; 604ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt != NULL) 605ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->errNo = error; 606ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project __xmlRaiseError(NULL, NULL, NULL, 607ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt, NULL, XML_FROM_PARSER, error, XML_ERR_FATAL, 608ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project NULL, 0, NULL, NULL, NULL, val, 0, msg, val); 609ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt != NULL) { 610ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->wellFormed = 0; 611ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt->recovery == 0) 612ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->disableSAX = 1; 613ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 614ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 615ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 616ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 617ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlFatalErrMsgStrIntStr: 618ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctxt: an XML parser context 619ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @error: the error number 620ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @msg: the error message 621ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @str1: an string info 622ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @val: an integer value 623ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @str2: an string info 624ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 625ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Handle a fatal parser error, i.e. violating Well-Formedness constraints 626ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 627ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic void 628ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlFatalErrMsgStrIntStr(xmlParserCtxtPtr ctxt, xmlParserErrors error, 629ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const char *msg, const xmlChar *str1, int val, 630ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar *str2) 631ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{ 632ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ctxt != NULL) && (ctxt->disableSAX != 0) && 633ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (ctxt->instate == XML_PARSER_EOF)) 634ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return; 635ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt != NULL) 636ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->errNo = error; 637ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project __xmlRaiseError(NULL, NULL, NULL, 638ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt, NULL, XML_FROM_PARSER, error, XML_ERR_FATAL, 639ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project NULL, 0, (const char *) str1, (const char *) str2, 640ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project NULL, val, 0, msg, str1, val, str2); 641ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt != NULL) { 642ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->wellFormed = 0; 643ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt->recovery == 0) 644ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->disableSAX = 1; 645ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 646ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 647ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 648ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 649ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlFatalErrMsgStr: 650ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctxt: an XML parser context 651ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @error: the error number 652ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @msg: the error message 653ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @val: a string value 654ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 655ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Handle a fatal parser error, i.e. violating Well-Formedness constraints 656ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 657ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic void 658ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlFatalErrMsgStr(xmlParserCtxtPtr ctxt, xmlParserErrors error, 659ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const char *msg, const xmlChar * val) 660ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{ 661ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ctxt != NULL) && (ctxt->disableSAX != 0) && 662ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (ctxt->instate == XML_PARSER_EOF)) 663ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return; 664ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt != NULL) 665ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->errNo = error; 666ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project __xmlRaiseError(NULL, NULL, NULL, ctxt, NULL, 667ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project XML_FROM_PARSER, error, XML_ERR_FATAL, 668ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project NULL, 0, (const char *) val, NULL, NULL, 0, 0, msg, 669ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project val); 670ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt != NULL) { 671ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->wellFormed = 0; 672ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt->recovery == 0) 673ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->disableSAX = 1; 674ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 675ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 676ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 677ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 678ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlErrMsgStr: 679ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctxt: an XML parser context 680ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @error: the error number 681ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @msg: the error message 682ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @val: a string value 683ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 684ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Handle a non fatal parser error 685ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 686ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic void 687ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlErrMsgStr(xmlParserCtxtPtr ctxt, xmlParserErrors error, 688ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const char *msg, const xmlChar * val) 689ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{ 690ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ctxt != NULL) && (ctxt->disableSAX != 0) && 691ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (ctxt->instate == XML_PARSER_EOF)) 692ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return; 693ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt != NULL) 694ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->errNo = error; 695ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project __xmlRaiseError(NULL, NULL, NULL, ctxt, NULL, 696ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project XML_FROM_PARSER, error, XML_ERR_ERROR, 697ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project NULL, 0, (const char *) val, NULL, NULL, 0, 0, msg, 698ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project val); 699ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 700ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 701ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 702ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlNsErr: 703ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctxt: an XML parser context 704ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @error: the error number 705ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @msg: the message 706ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @info1: extra information string 707ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @info2: extra information string 708ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 709ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Handle a fatal parser error, i.e. violating Well-Formedness constraints 710ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 711ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic void 712ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlNsErr(xmlParserCtxtPtr ctxt, xmlParserErrors error, 713ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const char *msg, 714ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar * info1, const xmlChar * info2, 715ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar * info3) 716ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{ 717ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ctxt != NULL) && (ctxt->disableSAX != 0) && 718ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (ctxt->instate == XML_PARSER_EOF)) 719ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return; 720ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt != NULL) 721ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->errNo = error; 722ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project __xmlRaiseError(NULL, NULL, NULL, ctxt, NULL, XML_FROM_NAMESPACE, error, 723ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project XML_ERR_ERROR, NULL, 0, (const char *) info1, 724ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (const char *) info2, (const char *) info3, 0, 0, msg, 725ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project info1, info2, info3); 726ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt != NULL) 727ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->nsWellFormed = 0; 728ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 729ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 73060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott/** 73160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * xmlNsWarn 73260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * @ctxt: an XML parser context 73360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * @error: the error number 73460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * @msg: the message 73560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * @info1: extra information string 73660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * @info2: extra information string 73760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * 73860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * Handle a fatal parser error, i.e. violating Well-Formedness constraints 73960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott */ 74060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scottstatic void 74160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick ScottxmlNsWarn(xmlParserCtxtPtr ctxt, xmlParserErrors error, 74260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott const char *msg, 74360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott const xmlChar * info1, const xmlChar * info2, 74460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott const xmlChar * info3) 74560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott{ 74660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if ((ctxt != NULL) && (ctxt->disableSAX != 0) && 74760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott (ctxt->instate == XML_PARSER_EOF)) 74860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott return; 74960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott __xmlRaiseError(NULL, NULL, NULL, ctxt, NULL, XML_FROM_NAMESPACE, error, 75060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott XML_ERR_WARNING, NULL, 0, (const char *) info1, 75160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott (const char *) info2, (const char *) info3, 0, 0, msg, 75260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott info1, info2, info3); 75360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott} 75460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott 755ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/************************************************************************ 756ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * * 757ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Library wide options * 758ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * * 759ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ************************************************************************/ 760ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 761ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 762ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlHasFeature: 763ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @feature: the feature to be examined 764ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 765ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Examines if the library has been compiled with a given feature. 766ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 767ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns a non-zero value if the feature exist, otherwise zero. 768ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns zero (0) if the feature does not exist or an unknown 769ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * unknown feature is requested, non-zero otherwise. 770ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 771ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectint 772ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlHasFeature(xmlFeature feature) 773ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{ 774ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project switch (feature) { 775ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_WITH_THREAD: 776ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_THREAD_ENABLED 777ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(1); 778ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#else 779ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(0); 780ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 781ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_WITH_TREE: 782ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_TREE_ENABLED 783ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(1); 784ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#else 785ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(0); 786ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 787ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_WITH_OUTPUT: 788ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_OUTPUT_ENABLED 789ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(1); 790ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#else 791ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(0); 792ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 793ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_WITH_PUSH: 794ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_PUSH_ENABLED 795ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(1); 796ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#else 797ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(0); 798ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 799ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_WITH_READER: 800ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_READER_ENABLED 801ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(1); 802ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#else 803ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(0); 804ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 805ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_WITH_PATTERN: 806ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_PATTERN_ENABLED 807ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(1); 808ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#else 809ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(0); 810ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 811ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_WITH_WRITER: 812ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_WRITER_ENABLED 813ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(1); 814ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#else 815ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(0); 816ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 817ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_WITH_SAX1: 818ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_SAX1_ENABLED 819ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(1); 820ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#else 821ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(0); 822ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 823ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_WITH_FTP: 824ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_FTP_ENABLED 825ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(1); 826ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#else 827ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(0); 828ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 829ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_WITH_HTTP: 830ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_HTTP_ENABLED 831ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(1); 832ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#else 833ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(0); 834ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 835ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_WITH_VALID: 836ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_VALID_ENABLED 837ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(1); 838ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#else 839ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(0); 840ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 841ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_WITH_HTML: 842ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_HTML_ENABLED 843ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(1); 844ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#else 845ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(0); 846ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 847ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_WITH_LEGACY: 848ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_LEGACY_ENABLED 849ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(1); 850ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#else 851ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(0); 852ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 853ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_WITH_C14N: 854ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_C14N_ENABLED 855ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(1); 856ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#else 857ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(0); 858ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 859ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_WITH_CATALOG: 860ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_CATALOG_ENABLED 861ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(1); 862ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#else 863ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(0); 864ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 865ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_WITH_XPATH: 866ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_XPATH_ENABLED 867ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(1); 868ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#else 869ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(0); 870ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 871ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_WITH_XPTR: 872ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_XPTR_ENABLED 873ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(1); 874ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#else 875ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(0); 876ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 877ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_WITH_XINCLUDE: 878ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_XINCLUDE_ENABLED 879ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(1); 880ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#else 881ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(0); 882ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 883ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_WITH_ICONV: 884ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_ICONV_ENABLED 885ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(1); 886ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#else 887ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(0); 888ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 889ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_WITH_ISO8859X: 890ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_ISO8859X_ENABLED 891ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(1); 892ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#else 893ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(0); 894ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 895ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_WITH_UNICODE: 896ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_UNICODE_ENABLED 897ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(1); 898ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#else 899ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(0); 900ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 901ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_WITH_REGEXP: 902ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_REGEXP_ENABLED 903ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(1); 904ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#else 905ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(0); 906ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 907ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_WITH_AUTOMATA: 908ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_AUTOMATA_ENABLED 909ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(1); 910ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#else 911ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(0); 912ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 913ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_WITH_EXPR: 914ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_EXPR_ENABLED 915ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(1); 916ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#else 917ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(0); 918ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 919ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_WITH_SCHEMAS: 920ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_SCHEMAS_ENABLED 921ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(1); 922ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#else 923ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(0); 924ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 925ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_WITH_SCHEMATRON: 926ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_SCHEMATRON_ENABLED 927ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(1); 928ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#else 929ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(0); 930ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 931ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_WITH_MODULES: 932ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_MODULES_ENABLED 933ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(1); 934ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#else 935ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(0); 936ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 937ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_WITH_DEBUG: 938ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_DEBUG_ENABLED 939ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(1); 940ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#else 941ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(0); 942ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 943ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_WITH_DEBUG_MEM: 944ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef DEBUG_MEMORY_LOCATION 945ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(1); 946ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#else 947ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(0); 948ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 949ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_WITH_DEBUG_RUN: 950ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_DEBUG_RUNTIME 951ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(1); 952ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#else 953ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(0); 95460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott#endif 955ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_WITH_ZLIB: 956ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_ZLIB_ENABLED 957ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(1); 958ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#else 959ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(0); 960ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 961df143a5041f03a22808b59c76698770b74692815Selim Gurun case XML_WITH_LZMA: 962df143a5041f03a22808b59c76698770b74692815Selim Gurun#ifdef LIBXML_LZMA_ENABLED 963df143a5041f03a22808b59c76698770b74692815Selim Gurun return(1); 964df143a5041f03a22808b59c76698770b74692815Selim Gurun#else 965df143a5041f03a22808b59c76698770b74692815Selim Gurun return(0); 966df143a5041f03a22808b59c76698770b74692815Selim Gurun#endif 967218647ebd721a259319b28f5719e89a4d0d1aaefShimeng (Simon) Wang case XML_WITH_ICU: 968218647ebd721a259319b28f5719e89a4d0d1aaefShimeng (Simon) Wang#ifdef LIBXML_ICU_ENABLED 969218647ebd721a259319b28f5719e89a4d0d1aaefShimeng (Simon) Wang return(1); 970218647ebd721a259319b28f5719e89a4d0d1aaefShimeng (Simon) Wang#else 971218647ebd721a259319b28f5719e89a4d0d1aaefShimeng (Simon) Wang return(0); 972218647ebd721a259319b28f5719e89a4d0d1aaefShimeng (Simon) Wang#endif 973ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project default: 974ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 975ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 976ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(0); 977ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 978ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 979ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/************************************************************************ 980ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * * 981ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * SAX2 defaulted attributes handling * 982ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * * 983ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ************************************************************************/ 984ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 985ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 986ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlDetectSAX2: 987ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctxt: an XML parser context 988ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 989ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Do the SAX2 detection and specific intialization 990ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 991ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic void 992ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlDetectSAX2(xmlParserCtxtPtr ctxt) { 993ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt == NULL) return; 994ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_SAX1_ENABLED 995ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ctxt->sax) && (ctxt->sax->initialized == XML_SAX2_MAGIC) && 996ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ((ctxt->sax->startElementNs != NULL) || 997ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (ctxt->sax->endElementNs != NULL))) ctxt->sax2 = 1; 998ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#else 999ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->sax2 = 1; 1000ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif /* LIBXML_SAX1_ENABLED */ 1001ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1002ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->str_xml = xmlDictLookup(ctxt->dict, BAD_CAST "xml", 3); 1003ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->str_xmlns = xmlDictLookup(ctxt->dict, BAD_CAST "xmlns", 5); 1004ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->str_xml_ns = xmlDictLookup(ctxt->dict, XML_XML_NAMESPACE, 36); 1005ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ctxt->str_xml==NULL) || (ctxt->str_xmlns==NULL) || 1006ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (ctxt->str_xml_ns == NULL)) { 1007ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlErrMemory(ctxt, NULL); 1008ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1009ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 1010ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1011ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projecttypedef struct _xmlDefAttrs xmlDefAttrs; 1012ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projecttypedef xmlDefAttrs *xmlDefAttrsPtr; 1013ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstruct _xmlDefAttrs { 1014ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int nbAttrs; /* number of defaulted attributes on that element */ 1015ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int maxAttrs; /* the size of the array */ 101660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott const xmlChar *values[5]; /* array of localname/prefix/values/external */ 1017ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project}; 1018ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1019ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 102060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * xmlAttrNormalizeSpace: 102160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * @src: the source string 102260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * @dst: the target string 102360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * 102460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * Normalize the space in non CDATA attribute values: 102560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * If the attribute type is not CDATA, then the XML processor MUST further 102660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * process the normalized attribute value by discarding any leading and 102760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * trailing space (#x20) characters, and by replacing sequences of space 102860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * (#x20) characters by a single space (#x20) character. 102960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * Note that the size of dst need to be at least src, and if one doesn't need 103060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * to preserve dst (and it doesn't come from a dictionary or read-only) then 103160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * passing src as dst is just fine. 103260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * 103360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * Returns a pointer to the normalized value (dst) or NULL if no conversion 103460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * is needed. 103560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott */ 103660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scottstatic xmlChar * 103760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick ScottxmlAttrNormalizeSpace(const xmlChar *src, xmlChar *dst) 103860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott{ 103960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if ((src == NULL) || (dst == NULL)) 104060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott return(NULL); 104160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott 104260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott while (*src == 0x20) src++; 104360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott while (*src != 0) { 104460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (*src == 0x20) { 104560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott while (*src == 0x20) src++; 104660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (*src != 0) 104760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott *dst++ = 0x20; 104860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } else { 104960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott *dst++ = *src++; 105060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } 105160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } 105260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott *dst = 0; 105360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (dst == src) 105460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott return(NULL); 105560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott return(dst); 105660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott} 105760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott 105860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott/** 105960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * xmlAttrNormalizeSpace2: 106060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * @src: the source string 106160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * 106260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * Normalize the space in non CDATA attribute values, a slightly more complex 106360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * front end to avoid allocation problems when running on attribute values 106460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * coming from the input. 106560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * 106660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * Returns a pointer to the normalized value (dst) or NULL if no conversion 106760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * is needed. 106860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott */ 106960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scottstatic const xmlChar * 107060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick ScottxmlAttrNormalizeSpace2(xmlParserCtxtPtr ctxt, xmlChar *src, int *len) 107160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott{ 107260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott int i; 107360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott int remove_head = 0; 107460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott int need_realloc = 0; 107560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott const xmlChar *cur; 107660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott 107760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if ((ctxt == NULL) || (src == NULL) || (len == NULL)) 107860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott return(NULL); 107960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott i = *len; 108060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (i <= 0) 108160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott return(NULL); 108260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott 108360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott cur = src; 108460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott while (*cur == 0x20) { 108560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott cur++; 108660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott remove_head++; 108760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } 108860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott while (*cur != 0) { 108960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (*cur == 0x20) { 109060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott cur++; 109160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if ((*cur == 0x20) || (*cur == 0)) { 109260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott need_realloc = 1; 109360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott break; 109460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } 109560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } else 109660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott cur++; 109760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } 109860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (need_realloc) { 109960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott xmlChar *ret; 110060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott 110160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ret = xmlStrndup(src + remove_head, i - remove_head + 1); 110260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (ret == NULL) { 110360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott xmlErrMemory(ctxt, NULL); 110460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott return(NULL); 110560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } 110660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott xmlAttrNormalizeSpace(ret, ret); 110760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott *len = (int) strlen((const char *)ret); 110860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott return(ret); 110960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } else if (remove_head) { 111060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott *len -= remove_head; 111160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott memmove(src, src + remove_head, 1 + *len); 111260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott return(src); 111360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } 111460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott return(NULL); 111560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott} 111660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott 111760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott/** 1118ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlAddDefAttrs: 1119ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctxt: an XML parser context 1120ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @fullname: the element fullname 1121ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @fullattr: the attribute fullname 1122ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @value: the attribute value 1123ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 1124ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Add a defaulted attribute for an element 1125ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 1126ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic void 1127ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlAddDefAttrs(xmlParserCtxtPtr ctxt, 1128ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar *fullname, 1129ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar *fullattr, 1130ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar *value) { 1131ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlDefAttrsPtr defaults; 1132ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int len; 1133ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar *name; 1134ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar *prefix; 1135ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 113660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott /* 113760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * Allows to detect attribute redefinitions 113860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott */ 113960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (ctxt->attsSpecial != NULL) { 114060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (xmlHashLookup2(ctxt->attsSpecial, fullname, fullattr) != NULL) 114160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott return; 114260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } 114360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott 1144ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt->attsDefault == NULL) { 1145ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->attsDefault = xmlHashCreateDict(10, ctxt->dict); 1146ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt->attsDefault == NULL) 1147ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto mem_error; 1148ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1149ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1150ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 1151ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * split the element name into prefix:localname , the string found 1152ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * are within the DTD and then not associated to namespace names. 1153ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 1154ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project name = xmlSplitQName3(fullname, &len); 1155ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (name == NULL) { 1156ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project name = xmlDictLookup(ctxt->dict, fullname, -1); 1157ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project prefix = NULL; 1158ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 1159ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project name = xmlDictLookup(ctxt->dict, name, -1); 1160ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project prefix = xmlDictLookup(ctxt->dict, fullname, len); 1161ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1162ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1163ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 1164ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * make sure there is some storage 1165ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 1166ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project defaults = xmlHashLookup2(ctxt->attsDefault, name, prefix); 1167ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (defaults == NULL) { 1168ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project defaults = (xmlDefAttrsPtr) xmlMalloc(sizeof(xmlDefAttrs) + 116960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott (4 * 5) * sizeof(const xmlChar *)); 1170ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (defaults == NULL) 1171ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto mem_error; 1172ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project defaults->nbAttrs = 0; 1173ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project defaults->maxAttrs = 4; 117460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (xmlHashUpdateEntry2(ctxt->attsDefault, name, prefix, 117560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott defaults, NULL) < 0) { 117660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott xmlFree(defaults); 117760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott goto mem_error; 117860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } 1179ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if (defaults->nbAttrs >= defaults->maxAttrs) { 1180ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlDefAttrsPtr temp; 1181ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1182ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project temp = (xmlDefAttrsPtr) xmlRealloc(defaults, sizeof(xmlDefAttrs) + 118360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott (2 * defaults->maxAttrs * 5) * sizeof(const xmlChar *)); 1184ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (temp == NULL) 1185ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto mem_error; 1186ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project defaults = temp; 1187ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project defaults->maxAttrs *= 2; 118860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (xmlHashUpdateEntry2(ctxt->attsDefault, name, prefix, 118960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott defaults, NULL) < 0) { 119060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott xmlFree(defaults); 119160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott goto mem_error; 119260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } 1193ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1194ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1195ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 1196ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Split the element name into prefix:localname , the string found 1197ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * are within the DTD and hen not associated to namespace names. 1198ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 1199ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project name = xmlSplitQName3(fullattr, &len); 1200ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (name == NULL) { 1201ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project name = xmlDictLookup(ctxt->dict, fullattr, -1); 1202ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project prefix = NULL; 1203ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 1204ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project name = xmlDictLookup(ctxt->dict, name, -1); 1205ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project prefix = xmlDictLookup(ctxt->dict, fullattr, len); 1206ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1207ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 120860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott defaults->values[5 * defaults->nbAttrs] = name; 120960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott defaults->values[5 * defaults->nbAttrs + 1] = prefix; 1210ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* intern the string and precompute the end */ 1211ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project len = xmlStrlen(value); 1212ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project value = xmlDictLookup(ctxt->dict, value, len); 121360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott defaults->values[5 * defaults->nbAttrs + 2] = value; 121460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott defaults->values[5 * defaults->nbAttrs + 3] = value + len; 121560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (ctxt->external) 121660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott defaults->values[5 * defaults->nbAttrs + 4] = BAD_CAST "external"; 121760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott else 121860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott defaults->values[5 * defaults->nbAttrs + 4] = NULL; 1219ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project defaults->nbAttrs++; 1220ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1221ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return; 1222ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1223ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectmem_error: 1224ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlErrMemory(ctxt, NULL); 1225ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return; 1226ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 1227ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1228ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 1229ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlAddSpecialAttr: 1230ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctxt: an XML parser context 1231ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @fullname: the element fullname 1232ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @fullattr: the attribute fullname 1233ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @type: the attribute type 1234ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 1235ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Register this attribute type 1236ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 1237ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic void 1238ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlAddSpecialAttr(xmlParserCtxtPtr ctxt, 1239ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar *fullname, 1240ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar *fullattr, 1241ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int type) 1242ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{ 1243ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt->attsSpecial == NULL) { 1244ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->attsSpecial = xmlHashCreateDict(10, ctxt->dict); 1245ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt->attsSpecial == NULL) 1246ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto mem_error; 1247ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1248ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1249ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (xmlHashLookup2(ctxt->attsSpecial, fullname, fullattr) != NULL) 1250ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return; 1251ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1252ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlHashAddEntry2(ctxt->attsSpecial, fullname, fullattr, 1253ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (void *) (long) type); 1254ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return; 1255ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1256ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectmem_error: 1257ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlErrMemory(ctxt, NULL); 1258ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return; 1259ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 1260ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1261ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 1262ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlCleanSpecialAttrCallback: 1263ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 1264ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Removes CDATA attributes from the special attribute table 1265ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 1266ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic void 1267ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlCleanSpecialAttrCallback(void *payload, void *data, 1268ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar *fullname, const xmlChar *fullattr, 1269ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar *unused ATTRIBUTE_UNUSED) { 1270ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) data; 1271ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1272ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (((long) payload) == XML_ATTRIBUTE_CDATA) { 1273ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlHashRemoveEntry2(ctxt->attsSpecial, fullname, fullattr, NULL); 1274ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1275ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 1276ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1277ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 1278ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlCleanSpecialAttr: 1279ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctxt: an XML parser context 1280ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 1281ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Trim the list of attributes defined to remove all those of type 1282ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * CDATA as they are not special. This call should be done when finishing 1283ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * to parse the DTD and before starting to parse the document root. 1284ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 1285ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic void 1286ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlCleanSpecialAttr(xmlParserCtxtPtr ctxt) 1287ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{ 1288ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt->attsSpecial == NULL) 1289ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return; 1290ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1291ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlHashScanFull(ctxt->attsSpecial, xmlCleanSpecialAttrCallback, ctxt); 1292ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1293ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (xmlHashSize(ctxt->attsSpecial) == 0) { 1294ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlHashFree(ctxt->attsSpecial, NULL); 1295ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->attsSpecial = NULL; 1296ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1297ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return; 1298ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 1299ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1300ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 1301ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlCheckLanguageID: 1302ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @lang: pointer to the string value 1303ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 1304ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Checks that the value conforms to the LanguageID production: 1305ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 1306ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * NOTE: this is somewhat deprecated, those productions were removed from 1307ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * the XML Second edition. 1308ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 1309ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [33] LanguageID ::= Langcode ('-' Subcode)* 1310ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [34] Langcode ::= ISO639Code | IanaCode | UserCode 1311ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [35] ISO639Code ::= ([a-z] | [A-Z]) ([a-z] | [A-Z]) 1312ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [36] IanaCode ::= ('i' | 'I') '-' ([a-z] | [A-Z])+ 1313ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [37] UserCode ::= ('x' | 'X') '-' ([a-z] | [A-Z])+ 1314ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [38] Subcode ::= ([a-z] | [A-Z])+ 1315ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 1316df143a5041f03a22808b59c76698770b74692815Selim Gurun * The current REC reference the sucessors of RFC 1766, currently 5646 1317df143a5041f03a22808b59c76698770b74692815Selim Gurun * 1318df143a5041f03a22808b59c76698770b74692815Selim Gurun * http://www.rfc-editor.org/rfc/rfc5646.txt 1319df143a5041f03a22808b59c76698770b74692815Selim Gurun * langtag = language 1320df143a5041f03a22808b59c76698770b74692815Selim Gurun * ["-" script] 1321df143a5041f03a22808b59c76698770b74692815Selim Gurun * ["-" region] 1322df143a5041f03a22808b59c76698770b74692815Selim Gurun * *("-" variant) 1323df143a5041f03a22808b59c76698770b74692815Selim Gurun * *("-" extension) 1324df143a5041f03a22808b59c76698770b74692815Selim Gurun * ["-" privateuse] 1325df143a5041f03a22808b59c76698770b74692815Selim Gurun * language = 2*3ALPHA ; shortest ISO 639 code 1326df143a5041f03a22808b59c76698770b74692815Selim Gurun * ["-" extlang] ; sometimes followed by 1327df143a5041f03a22808b59c76698770b74692815Selim Gurun * ; extended language subtags 1328df143a5041f03a22808b59c76698770b74692815Selim Gurun * / 4ALPHA ; or reserved for future use 1329df143a5041f03a22808b59c76698770b74692815Selim Gurun * / 5*8ALPHA ; or registered language subtag 1330df143a5041f03a22808b59c76698770b74692815Selim Gurun * 1331df143a5041f03a22808b59c76698770b74692815Selim Gurun * extlang = 3ALPHA ; selected ISO 639 codes 1332df143a5041f03a22808b59c76698770b74692815Selim Gurun * *2("-" 3ALPHA) ; permanently reserved 1333df143a5041f03a22808b59c76698770b74692815Selim Gurun * 1334df143a5041f03a22808b59c76698770b74692815Selim Gurun * script = 4ALPHA ; ISO 15924 code 1335df143a5041f03a22808b59c76698770b74692815Selim Gurun * 1336df143a5041f03a22808b59c76698770b74692815Selim Gurun * region = 2ALPHA ; ISO 3166-1 code 1337df143a5041f03a22808b59c76698770b74692815Selim Gurun * / 3DIGIT ; UN M.49 code 1338df143a5041f03a22808b59c76698770b74692815Selim Gurun * 1339df143a5041f03a22808b59c76698770b74692815Selim Gurun * variant = 5*8alphanum ; registered variants 1340df143a5041f03a22808b59c76698770b74692815Selim Gurun * / (DIGIT 3alphanum) 1341df143a5041f03a22808b59c76698770b74692815Selim Gurun * 1342df143a5041f03a22808b59c76698770b74692815Selim Gurun * extension = singleton 1*("-" (2*8alphanum)) 1343df143a5041f03a22808b59c76698770b74692815Selim Gurun * 1344df143a5041f03a22808b59c76698770b74692815Selim Gurun * ; Single alphanumerics 1345df143a5041f03a22808b59c76698770b74692815Selim Gurun * ; "x" reserved for private use 1346df143a5041f03a22808b59c76698770b74692815Selim Gurun * singleton = DIGIT ; 0 - 9 1347df143a5041f03a22808b59c76698770b74692815Selim Gurun * / %x41-57 ; A - W 1348df143a5041f03a22808b59c76698770b74692815Selim Gurun * / %x59-5A ; Y - Z 1349df143a5041f03a22808b59c76698770b74692815Selim Gurun * / %x61-77 ; a - w 1350df143a5041f03a22808b59c76698770b74692815Selim Gurun * / %x79-7A ; y - z 1351df143a5041f03a22808b59c76698770b74692815Selim Gurun * 1352df143a5041f03a22808b59c76698770b74692815Selim Gurun * it sounds right to still allow Irregular i-xxx IANA and user codes too 1353df143a5041f03a22808b59c76698770b74692815Selim Gurun * The parser below doesn't try to cope with extension or privateuse 1354df143a5041f03a22808b59c76698770b74692815Selim Gurun * that could be added but that's not interoperable anyway 1355df143a5041f03a22808b59c76698770b74692815Selim Gurun * 1356ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns 1 if correct 0 otherwise 1357ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project **/ 1358ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectint 1359ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlCheckLanguageID(const xmlChar * lang) 1360ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{ 1361df143a5041f03a22808b59c76698770b74692815Selim Gurun const xmlChar *cur = lang, *nxt; 1362ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1363ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (cur == NULL) 1364ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (0); 1365ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (((cur[0] == 'i') && (cur[1] == '-')) || 1366df143a5041f03a22808b59c76698770b74692815Selim Gurun ((cur[0] == 'I') && (cur[1] == '-')) || 1367df143a5041f03a22808b59c76698770b74692815Selim Gurun ((cur[0] == 'x') && (cur[1] == '-')) || 1368df143a5041f03a22808b59c76698770b74692815Selim Gurun ((cur[0] == 'X') && (cur[1] == '-'))) { 1369ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 1370df143a5041f03a22808b59c76698770b74692815Selim Gurun * Still allow IANA code and user code which were coming 1371df143a5041f03a22808b59c76698770b74692815Selim Gurun * from the previous version of the XML-1.0 specification 1372df143a5041f03a22808b59c76698770b74692815Selim Gurun * it's deprecated but we should not fail 1373ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 1374ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur += 2; 1375df143a5041f03a22808b59c76698770b74692815Selim Gurun while (((cur[0] >= 'A') && (cur[0] <= 'Z')) || 1376ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ((cur[0] >= 'a') && (cur[0] <= 'z'))) 1377ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur++; 1378df143a5041f03a22808b59c76698770b74692815Selim Gurun return(cur[0] == 0); 1379df143a5041f03a22808b59c76698770b74692815Selim Gurun } 1380df143a5041f03a22808b59c76698770b74692815Selim Gurun nxt = cur; 1381df143a5041f03a22808b59c76698770b74692815Selim Gurun while (((nxt[0] >= 'A') && (nxt[0] <= 'Z')) || 1382df143a5041f03a22808b59c76698770b74692815Selim Gurun ((nxt[0] >= 'a') && (nxt[0] <= 'z'))) 1383df143a5041f03a22808b59c76698770b74692815Selim Gurun nxt++; 1384df143a5041f03a22808b59c76698770b74692815Selim Gurun if (nxt - cur >= 4) { 1385ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 1386df143a5041f03a22808b59c76698770b74692815Selim Gurun * Reserved 1387ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 1388df143a5041f03a22808b59c76698770b74692815Selim Gurun if ((nxt - cur > 8) || (nxt[0] != 0)) 1389df143a5041f03a22808b59c76698770b74692815Selim Gurun return(0); 1390df143a5041f03a22808b59c76698770b74692815Selim Gurun return(1); 1391ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1392df143a5041f03a22808b59c76698770b74692815Selim Gurun if (nxt - cur < 2) 1393df143a5041f03a22808b59c76698770b74692815Selim Gurun return(0); 1394df143a5041f03a22808b59c76698770b74692815Selim Gurun /* we got an ISO 639 code */ 1395df143a5041f03a22808b59c76698770b74692815Selim Gurun if (nxt[0] == 0) 1396df143a5041f03a22808b59c76698770b74692815Selim Gurun return(1); 1397df143a5041f03a22808b59c76698770b74692815Selim Gurun if (nxt[0] != '-') 1398df143a5041f03a22808b59c76698770b74692815Selim Gurun return(0); 1399df143a5041f03a22808b59c76698770b74692815Selim Gurun 1400df143a5041f03a22808b59c76698770b74692815Selim Gurun nxt++; 1401df143a5041f03a22808b59c76698770b74692815Selim Gurun cur = nxt; 1402df143a5041f03a22808b59c76698770b74692815Selim Gurun /* now we can have extlang or script or region or variant */ 1403df143a5041f03a22808b59c76698770b74692815Selim Gurun if ((nxt[0] >= '0') && (nxt[0] <= '9')) 1404df143a5041f03a22808b59c76698770b74692815Selim Gurun goto region_m49; 1405df143a5041f03a22808b59c76698770b74692815Selim Gurun 1406df143a5041f03a22808b59c76698770b74692815Selim Gurun while (((nxt[0] >= 'A') && (nxt[0] <= 'Z')) || 1407df143a5041f03a22808b59c76698770b74692815Selim Gurun ((nxt[0] >= 'a') && (nxt[0] <= 'z'))) 1408df143a5041f03a22808b59c76698770b74692815Selim Gurun nxt++; 1409df143a5041f03a22808b59c76698770b74692815Selim Gurun if (nxt - cur == 4) 1410df143a5041f03a22808b59c76698770b74692815Selim Gurun goto script; 1411df143a5041f03a22808b59c76698770b74692815Selim Gurun if (nxt - cur == 2) 1412df143a5041f03a22808b59c76698770b74692815Selim Gurun goto region; 1413df143a5041f03a22808b59c76698770b74692815Selim Gurun if ((nxt - cur >= 5) && (nxt - cur <= 8)) 1414df143a5041f03a22808b59c76698770b74692815Selim Gurun goto variant; 1415df143a5041f03a22808b59c76698770b74692815Selim Gurun if (nxt - cur != 3) 1416df143a5041f03a22808b59c76698770b74692815Selim Gurun return(0); 1417df143a5041f03a22808b59c76698770b74692815Selim Gurun /* we parsed an extlang */ 1418df143a5041f03a22808b59c76698770b74692815Selim Gurun if (nxt[0] == 0) 1419df143a5041f03a22808b59c76698770b74692815Selim Gurun return(1); 1420df143a5041f03a22808b59c76698770b74692815Selim Gurun if (nxt[0] != '-') 1421df143a5041f03a22808b59c76698770b74692815Selim Gurun return(0); 1422df143a5041f03a22808b59c76698770b74692815Selim Gurun 1423df143a5041f03a22808b59c76698770b74692815Selim Gurun nxt++; 1424df143a5041f03a22808b59c76698770b74692815Selim Gurun cur = nxt; 1425df143a5041f03a22808b59c76698770b74692815Selim Gurun /* now we can have script or region or variant */ 1426df143a5041f03a22808b59c76698770b74692815Selim Gurun if ((nxt[0] >= '0') && (nxt[0] <= '9')) 1427df143a5041f03a22808b59c76698770b74692815Selim Gurun goto region_m49; 1428df143a5041f03a22808b59c76698770b74692815Selim Gurun 1429df143a5041f03a22808b59c76698770b74692815Selim Gurun while (((nxt[0] >= 'A') && (nxt[0] <= 'Z')) || 1430df143a5041f03a22808b59c76698770b74692815Selim Gurun ((nxt[0] >= 'a') && (nxt[0] <= 'z'))) 1431df143a5041f03a22808b59c76698770b74692815Selim Gurun nxt++; 1432df143a5041f03a22808b59c76698770b74692815Selim Gurun if (nxt - cur == 2) 1433df143a5041f03a22808b59c76698770b74692815Selim Gurun goto region; 1434df143a5041f03a22808b59c76698770b74692815Selim Gurun if ((nxt - cur >= 5) && (nxt - cur <= 8)) 1435df143a5041f03a22808b59c76698770b74692815Selim Gurun goto variant; 1436df143a5041f03a22808b59c76698770b74692815Selim Gurun if (nxt - cur != 4) 1437df143a5041f03a22808b59c76698770b74692815Selim Gurun return(0); 1438df143a5041f03a22808b59c76698770b74692815Selim Gurun /* we parsed a script */ 1439df143a5041f03a22808b59c76698770b74692815Selim Gurunscript: 1440df143a5041f03a22808b59c76698770b74692815Selim Gurun if (nxt[0] == 0) 1441df143a5041f03a22808b59c76698770b74692815Selim Gurun return(1); 1442df143a5041f03a22808b59c76698770b74692815Selim Gurun if (nxt[0] != '-') 1443df143a5041f03a22808b59c76698770b74692815Selim Gurun return(0); 1444df143a5041f03a22808b59c76698770b74692815Selim Gurun 1445df143a5041f03a22808b59c76698770b74692815Selim Gurun nxt++; 1446df143a5041f03a22808b59c76698770b74692815Selim Gurun cur = nxt; 1447df143a5041f03a22808b59c76698770b74692815Selim Gurun /* now we can have region or variant */ 1448df143a5041f03a22808b59c76698770b74692815Selim Gurun if ((nxt[0] >= '0') && (nxt[0] <= '9')) 1449df143a5041f03a22808b59c76698770b74692815Selim Gurun goto region_m49; 1450df143a5041f03a22808b59c76698770b74692815Selim Gurun 1451df143a5041f03a22808b59c76698770b74692815Selim Gurun while (((nxt[0] >= 'A') && (nxt[0] <= 'Z')) || 1452df143a5041f03a22808b59c76698770b74692815Selim Gurun ((nxt[0] >= 'a') && (nxt[0] <= 'z'))) 1453df143a5041f03a22808b59c76698770b74692815Selim Gurun nxt++; 1454df143a5041f03a22808b59c76698770b74692815Selim Gurun 1455df143a5041f03a22808b59c76698770b74692815Selim Gurun if ((nxt - cur >= 5) && (nxt - cur <= 8)) 1456df143a5041f03a22808b59c76698770b74692815Selim Gurun goto variant; 1457df143a5041f03a22808b59c76698770b74692815Selim Gurun if (nxt - cur != 2) 1458df143a5041f03a22808b59c76698770b74692815Selim Gurun return(0); 1459df143a5041f03a22808b59c76698770b74692815Selim Gurun /* we parsed a region */ 1460df143a5041f03a22808b59c76698770b74692815Selim Gurunregion: 1461df143a5041f03a22808b59c76698770b74692815Selim Gurun if (nxt[0] == 0) 1462df143a5041f03a22808b59c76698770b74692815Selim Gurun return(1); 1463df143a5041f03a22808b59c76698770b74692815Selim Gurun if (nxt[0] != '-') 1464df143a5041f03a22808b59c76698770b74692815Selim Gurun return(0); 1465df143a5041f03a22808b59c76698770b74692815Selim Gurun 1466df143a5041f03a22808b59c76698770b74692815Selim Gurun nxt++; 1467df143a5041f03a22808b59c76698770b74692815Selim Gurun cur = nxt; 1468df143a5041f03a22808b59c76698770b74692815Selim Gurun /* now we can just have a variant */ 1469df143a5041f03a22808b59c76698770b74692815Selim Gurun while (((nxt[0] >= 'A') && (nxt[0] <= 'Z')) || 1470df143a5041f03a22808b59c76698770b74692815Selim Gurun ((nxt[0] >= 'a') && (nxt[0] <= 'z'))) 1471df143a5041f03a22808b59c76698770b74692815Selim Gurun nxt++; 1472df143a5041f03a22808b59c76698770b74692815Selim Gurun 1473df143a5041f03a22808b59c76698770b74692815Selim Gurun if ((nxt - cur < 5) || (nxt - cur > 8)) 1474df143a5041f03a22808b59c76698770b74692815Selim Gurun return(0); 1475df143a5041f03a22808b59c76698770b74692815Selim Gurun 1476df143a5041f03a22808b59c76698770b74692815Selim Gurun /* we parsed a variant */ 1477df143a5041f03a22808b59c76698770b74692815Selim Gurunvariant: 1478df143a5041f03a22808b59c76698770b74692815Selim Gurun if (nxt[0] == 0) 1479df143a5041f03a22808b59c76698770b74692815Selim Gurun return(1); 1480df143a5041f03a22808b59c76698770b74692815Selim Gurun if (nxt[0] != '-') 1481df143a5041f03a22808b59c76698770b74692815Selim Gurun return(0); 1482df143a5041f03a22808b59c76698770b74692815Selim Gurun /* extensions and private use subtags not checked */ 1483ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (1); 1484df143a5041f03a22808b59c76698770b74692815Selim Gurun 1485df143a5041f03a22808b59c76698770b74692815Selim Gurunregion_m49: 1486df143a5041f03a22808b59c76698770b74692815Selim Gurun if (((nxt[1] >= '0') && (nxt[1] <= '9')) && 1487df143a5041f03a22808b59c76698770b74692815Selim Gurun ((nxt[2] >= '0') && (nxt[2] <= '9'))) { 1488df143a5041f03a22808b59c76698770b74692815Selim Gurun nxt += 3; 1489df143a5041f03a22808b59c76698770b74692815Selim Gurun goto region; 1490df143a5041f03a22808b59c76698770b74692815Selim Gurun } 1491df143a5041f03a22808b59c76698770b74692815Selim Gurun return(0); 1492ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 1493ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1494ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/************************************************************************ 1495ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * * 149660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * Parser stacks related functions and macros * 1497ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * * 1498ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ************************************************************************/ 1499ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1500df143a5041f03a22808b59c76698770b74692815Selim Gurunstatic xmlEntityPtr xmlParseStringEntityRef(xmlParserCtxtPtr ctxt, 1501df143a5041f03a22808b59c76698770b74692815Selim Gurun const xmlChar ** str); 1502ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1503ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef SAX2 1504ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 1505ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * nsPush: 1506ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctxt: an XML parser context 1507ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @prefix: the namespace prefix or NULL 1508ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @URL: the namespace name 1509ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 1510ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Pushes a new parser namespace on top of the ns stack 1511ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 1512ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns -1 in case of error, -2 if the namespace should be discarded 1513ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * and the index in the stack otherwise. 1514ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 1515ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic int 1516ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectnsPush(xmlParserCtxtPtr ctxt, const xmlChar *prefix, const xmlChar *URL) 1517ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{ 1518ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt->options & XML_PARSE_NSCLEAN) { 1519ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int i; 1520ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project for (i = 0;i < ctxt->nsNr;i += 2) { 1521ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt->nsTab[i] == prefix) { 1522ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* in scope */ 1523ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt->nsTab[i + 1] == URL) 1524ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(-2); 1525ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* out of scope keep it */ 1526ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 1527ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1528ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1529ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1530ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ctxt->nsMax == 0) || (ctxt->nsTab == NULL)) { 1531ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->nsMax = 10; 1532ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->nsNr = 0; 1533ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->nsTab = (const xmlChar **) 1534ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlMalloc(ctxt->nsMax * sizeof(xmlChar *)); 1535ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt->nsTab == NULL) { 1536ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlErrMemory(ctxt, NULL); 1537ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->nsMax = 0; 1538ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (-1); 1539ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1540ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if (ctxt->nsNr >= ctxt->nsMax) { 154160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott const xmlChar ** tmp; 1542ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->nsMax *= 2; 154360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott tmp = (const xmlChar **) xmlRealloc((char *) ctxt->nsTab, 154460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ctxt->nsMax * sizeof(ctxt->nsTab[0])); 154560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (tmp == NULL) { 1546ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlErrMemory(ctxt, NULL); 1547ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->nsMax /= 2; 1548ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (-1); 1549ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 155060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ctxt->nsTab = tmp; 1551ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1552ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->nsTab[ctxt->nsNr++] = prefix; 1553ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->nsTab[ctxt->nsNr++] = URL; 1554ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (ctxt->nsNr); 1555ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 1556ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 1557ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * nsPop: 1558ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctxt: an XML parser context 1559ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @nr: the number to pop 1560ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 1561ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Pops the top @nr parser prefix/namespace from the ns stack 1562ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 1563ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the number of namespaces removed 1564ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 1565ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic int 1566ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectnsPop(xmlParserCtxtPtr ctxt, int nr) 1567ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{ 1568ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int i; 1569ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1570ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt->nsTab == NULL) return(0); 1571ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt->nsNr < nr) { 1572ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlGenericError(xmlGenericErrorContext, "Pbm popping %d NS\n", nr); 1573ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project nr = ctxt->nsNr; 1574ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1575ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt->nsNr <= 0) 1576ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (0); 157760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott 1578ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project for (i = 0;i < nr;i++) { 1579ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->nsNr--; 1580ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->nsTab[ctxt->nsNr] = NULL; 1581ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1582ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(nr); 1583ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 1584ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 1585ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1586ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic int 1587ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlCtxtGrowAttrs(xmlParserCtxtPtr ctxt, int nr) { 1588ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar **atts; 1589ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int *attallocs; 1590ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int maxatts; 1591ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1592ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt->atts == NULL) { 1593ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project maxatts = 55; /* allow for 10 attrs by default */ 1594ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project atts = (const xmlChar **) 1595ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlMalloc(maxatts * sizeof(xmlChar *)); 1596ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (atts == NULL) goto mem_error; 1597ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->atts = atts; 1598ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project attallocs = (int *) xmlMalloc((maxatts / 5) * sizeof(int)); 1599ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (attallocs == NULL) goto mem_error; 1600ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->attallocs = attallocs; 1601ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->maxatts = maxatts; 1602ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if (nr + 5 > ctxt->maxatts) { 1603ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project maxatts = (nr + 5) * 2; 1604ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project atts = (const xmlChar **) xmlRealloc((void *) ctxt->atts, 1605ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project maxatts * sizeof(const xmlChar *)); 1606ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (atts == NULL) goto mem_error; 1607ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->atts = atts; 1608ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project attallocs = (int *) xmlRealloc((void *) ctxt->attallocs, 1609ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (maxatts / 5) * sizeof(int)); 1610ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (attallocs == NULL) goto mem_error; 1611ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->attallocs = attallocs; 1612ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->maxatts = maxatts; 1613ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1614ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(ctxt->maxatts); 1615ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectmem_error: 1616ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlErrMemory(ctxt, NULL); 1617ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(-1); 1618ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 1619ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1620ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 1621ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * inputPush: 1622ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctxt: an XML parser context 1623ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @value: the parser input 1624ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 1625ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Pushes a new parser input on top of the input stack 1626ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 162760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * Returns -1 in case of error, the index in the stack otherwise 1628ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 1629ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectint 1630ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectinputPush(xmlParserCtxtPtr ctxt, xmlParserInputPtr value) 1631ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{ 1632ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ctxt == NULL) || (value == NULL)) 163360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott return(-1); 1634ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt->inputNr >= ctxt->inputMax) { 1635ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->inputMax *= 2; 1636ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->inputTab = 1637ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (xmlParserInputPtr *) xmlRealloc(ctxt->inputTab, 1638ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->inputMax * 1639ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project sizeof(ctxt->inputTab[0])); 1640ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt->inputTab == NULL) { 1641ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlErrMemory(ctxt, NULL); 164260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott xmlFreeInputStream(value); 164360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ctxt->inputMax /= 2; 164460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott value = NULL; 164560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott return (-1); 1646ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1647ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1648ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->inputTab[ctxt->inputNr] = value; 1649ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->input = value; 1650ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (ctxt->inputNr++); 1651ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 1652ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 1653ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * inputPop: 1654ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctxt: an XML parser context 1655ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 1656ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Pops the top parser input from the input stack 1657ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 1658ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the input just removed 1659ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 1660ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlParserInputPtr 1661ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectinputPop(xmlParserCtxtPtr ctxt) 1662ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{ 1663ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParserInputPtr ret; 1664ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1665ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt == NULL) 1666ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 1667ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt->inputNr <= 0) 1668ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (NULL); 1669ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->inputNr--; 1670ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt->inputNr > 0) 1671ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->input = ctxt->inputTab[ctxt->inputNr - 1]; 1672ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else 1673ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->input = NULL; 1674ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = ctxt->inputTab[ctxt->inputNr]; 1675ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->inputTab[ctxt->inputNr] = NULL; 1676ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (ret); 1677ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 1678ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 1679ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * nodePush: 1680ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctxt: an XML parser context 1681ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @value: the element node 1682ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 1683ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Pushes a new element node on top of the node stack 1684ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 168560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * Returns -1 in case of error, the index in the stack otherwise 1686ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 1687ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectint 1688ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectnodePush(xmlParserCtxtPtr ctxt, xmlNodePtr value) 1689ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{ 1690ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt == NULL) return(0); 1691ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt->nodeNr >= ctxt->nodeMax) { 1692ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlNodePtr *tmp; 1693ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1694ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project tmp = (xmlNodePtr *) xmlRealloc(ctxt->nodeTab, 1695ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->nodeMax * 2 * 1696ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project sizeof(ctxt->nodeTab[0])); 1697ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (tmp == NULL) { 1698ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlErrMemory(ctxt, NULL); 169960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott return (-1); 1700ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1701ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->nodeTab = tmp; 1702ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->nodeMax *= 2; 1703ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 170460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if ((((unsigned int) ctxt->nodeNr) > xmlParserMaxDepth) && 170560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ((ctxt->options & XML_PARSE_HUGE) == 0)) { 1706ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErrMsgInt(ctxt, XML_ERR_INTERNAL_ERROR, 170760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott "Excessive depth in document: %d use XML_PARSE_HUGE option\n", 1708ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParserMaxDepth); 1709ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->instate = XML_PARSER_EOF; 171060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott return(-1); 1711ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1712ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->nodeTab[ctxt->nodeNr] = value; 1713ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->node = value; 1714ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (ctxt->nodeNr++); 1715ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 171660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott 1717ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 1718ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * nodePop: 1719ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctxt: an XML parser context 1720ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 1721ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Pops the top element node from the node stack 1722ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 1723ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the node just removed 1724ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 1725ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlNodePtr 1726ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectnodePop(xmlParserCtxtPtr ctxt) 1727ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{ 1728ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlNodePtr ret; 1729ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1730ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt == NULL) return(NULL); 1731ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt->nodeNr <= 0) 1732ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (NULL); 1733ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->nodeNr--; 1734ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt->nodeNr > 0) 1735ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->node = ctxt->nodeTab[ctxt->nodeNr - 1]; 1736ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else 1737ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->node = NULL; 1738ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = ctxt->nodeTab[ctxt->nodeNr]; 1739ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->nodeTab[ctxt->nodeNr] = NULL; 1740ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (ret); 1741ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 1742ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1743ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_PUSH_ENABLED 1744ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 1745ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * nameNsPush: 1746ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctxt: an XML parser context 1747ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @value: the element name 1748ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @prefix: the element prefix 1749ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @URI: the element namespace name 1750ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 1751ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Pushes a new element name/prefix/URL on top of the name stack 1752ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 1753ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns -1 in case of error, the index in the stack otherwise 1754ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 1755ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic int 1756ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectnameNsPush(xmlParserCtxtPtr ctxt, const xmlChar * value, 1757ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar *prefix, const xmlChar *URI, int nsNr) 1758ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{ 1759ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt->nameNr >= ctxt->nameMax) { 1760ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar * *tmp; 1761ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project void **tmp2; 1762ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->nameMax *= 2; 1763ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project tmp = (const xmlChar * *) xmlRealloc((xmlChar * *)ctxt->nameTab, 1764ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->nameMax * 1765ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project sizeof(ctxt->nameTab[0])); 1766ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (tmp == NULL) { 1767ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->nameMax /= 2; 1768ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto mem_error; 1769ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1770ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->nameTab = tmp; 1771ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project tmp2 = (void **) xmlRealloc((void * *)ctxt->pushTab, 1772ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->nameMax * 3 * 1773ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project sizeof(ctxt->pushTab[0])); 1774ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (tmp2 == NULL) { 1775ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->nameMax /= 2; 1776ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto mem_error; 1777ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1778ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->pushTab = tmp2; 1779ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1780ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->nameTab[ctxt->nameNr] = value; 1781ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->name = value; 1782ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->pushTab[ctxt->nameNr * 3] = (void *) prefix; 1783ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->pushTab[ctxt->nameNr * 3 + 1] = (void *) URI; 1784ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->pushTab[ctxt->nameNr * 3 + 2] = (void *) (long) nsNr; 1785ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (ctxt->nameNr++); 1786ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectmem_error: 1787ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlErrMemory(ctxt, NULL); 1788ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (-1); 1789ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 1790ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 1791ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * nameNsPop: 1792ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctxt: an XML parser context 1793ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 1794ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Pops the top element/prefix/URI name from the name stack 1795ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 1796ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the name just removed 1797ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 1798ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic const xmlChar * 1799ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectnameNsPop(xmlParserCtxtPtr ctxt) 1800ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{ 1801ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar *ret; 1802ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1803ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt->nameNr <= 0) 1804ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (NULL); 1805ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->nameNr--; 1806ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt->nameNr > 0) 1807ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->name = ctxt->nameTab[ctxt->nameNr - 1]; 1808ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else 1809ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->name = NULL; 1810ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = ctxt->nameTab[ctxt->nameNr]; 1811ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->nameTab[ctxt->nameNr] = NULL; 1812ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (ret); 1813ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 1814ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif /* LIBXML_PUSH_ENABLED */ 1815ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1816ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 1817ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * namePush: 1818ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctxt: an XML parser context 1819ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @value: the element name 1820ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 1821ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Pushes a new element name on top of the name stack 1822ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 1823ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns -1 in case of error, the index in the stack otherwise 1824ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 1825ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectint 1826ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectnamePush(xmlParserCtxtPtr ctxt, const xmlChar * value) 1827ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{ 1828ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt == NULL) return (-1); 1829ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1830ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt->nameNr >= ctxt->nameMax) { 1831ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar * *tmp; 1832ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project tmp = (const xmlChar * *) xmlRealloc((xmlChar * *)ctxt->nameTab, 1833df143a5041f03a22808b59c76698770b74692815Selim Gurun ctxt->nameMax * 2 * 1834ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project sizeof(ctxt->nameTab[0])); 1835ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (tmp == NULL) { 1836ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto mem_error; 1837ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1838ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->nameTab = tmp; 1839df143a5041f03a22808b59c76698770b74692815Selim Gurun ctxt->nameMax *= 2; 1840ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1841ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->nameTab[ctxt->nameNr] = value; 1842ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->name = value; 1843ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (ctxt->nameNr++); 1844ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectmem_error: 1845ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlErrMemory(ctxt, NULL); 1846ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (-1); 1847ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 1848ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 1849ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * namePop: 1850ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctxt: an XML parser context 1851ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 1852ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Pops the top element name from the name stack 1853ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 1854ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the name just removed 1855ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 1856ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectconst xmlChar * 1857ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectnamePop(xmlParserCtxtPtr ctxt) 1858ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{ 1859ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar *ret; 1860ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1861ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ctxt == NULL) || (ctxt->nameNr <= 0)) 1862ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (NULL); 1863ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->nameNr--; 1864ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt->nameNr > 0) 1865ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->name = ctxt->nameTab[ctxt->nameNr - 1]; 1866ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else 1867ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->name = NULL; 1868ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = ctxt->nameTab[ctxt->nameNr]; 1869ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->nameTab[ctxt->nameNr] = NULL; 1870ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (ret); 1871ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 1872ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1873ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic int spacePush(xmlParserCtxtPtr ctxt, int val) { 1874ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt->spaceNr >= ctxt->spaceMax) { 187560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott int *tmp; 187660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott 1877ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->spaceMax *= 2; 187860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott tmp = (int *) xmlRealloc(ctxt->spaceTab, 187960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ctxt->spaceMax * sizeof(ctxt->spaceTab[0])); 188060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (tmp == NULL) { 1881ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlErrMemory(ctxt, NULL); 188260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ctxt->spaceMax /=2; 188360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott return(-1); 1884ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 188560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ctxt->spaceTab = tmp; 1886ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1887ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->spaceTab[ctxt->spaceNr] = val; 1888ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->space = &ctxt->spaceTab[ctxt->spaceNr]; 1889ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(ctxt->spaceNr++); 1890ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 1891ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1892ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic int spacePop(xmlParserCtxtPtr ctxt) { 1893ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int ret; 1894ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt->spaceNr <= 0) return(0); 1895ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->spaceNr--; 1896ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt->spaceNr > 0) 1897ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->space = &ctxt->spaceTab[ctxt->spaceNr - 1]; 1898ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else 1899ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->space = &ctxt->spaceTab[0]; 1900ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = ctxt->spaceTab[ctxt->spaceNr]; 1901ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->spaceTab[ctxt->spaceNr] = -1; 1902ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(ret); 1903ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 1904ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1905ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/* 1906ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Macros for accessing the content. Those should be used only by the parser, 1907ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * and not exported. 1908ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 1909ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Dirty macros, i.e. one often need to make assumption on the context to 1910ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * use them 1911ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 1912ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * CUR_PTR return the current pointer to the xmlChar to be parsed. 1913ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * To be used with extreme caution since operations consuming 1914ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * characters may move the input buffer to a different location ! 1915ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * CUR returns the current xmlChar value, i.e. a 8 bit value if compiled 1916ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * This should be used internally by the parser 1917ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * only to compare to ASCII values otherwise it would break when 1918ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * running with UTF-8 encoding. 1919ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * RAW same as CUR but in the input buffer, bypass any token 1920ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * extraction that may have been done 1921ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * NXT(n) returns the n'th next xmlChar. Same as CUR is should be used only 1922ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * to compare on ASCII based substring. 1923ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * SKIP(n) Skip n xmlChar, and must also be used only to skip ASCII defined 1924ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * strings without newlines within the parser. 1925ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * NEXT1(l) Skip 1 xmlChar, and must also be used only to skip 1 non-newline ASCII 1926ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * defined char within the parser. 1927ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Clean macros, not dependent of an ASCII context, expect UTF-8 encoding 1928ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 1929ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * NEXT Skip to the next character, this does the proper decoding 1930ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * in UTF-8 mode. It also pop-up unfinished entities on the fly. 1931ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * NEXTL(l) Skip the current unicode character of l xmlChars long. 1932ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * CUR_CHAR(l) returns the current unicode character (int), set l 1933ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * to the number of xmlChars used for the encoding [0-5]. 1934ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * CUR_SCHAR same but operate on a string instead of the context 1935ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * COPY_BUF copy the current unicode char to the target buffer, increment 1936ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * the index 1937ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * GROW, SHRINK handling of input buffers 1938ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 1939ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1940ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#define RAW (*ctxt->input->cur) 1941ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#define CUR (*ctxt->input->cur) 1942ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#define NXT(val) ctxt->input->cur[(val)] 1943ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#define CUR_PTR ctxt->input->cur 1944ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1945ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#define CMP4( s, c1, c2, c3, c4 ) \ 1946ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ( ((unsigned char *) s)[ 0 ] == c1 && ((unsigned char *) s)[ 1 ] == c2 && \ 1947ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ((unsigned char *) s)[ 2 ] == c3 && ((unsigned char *) s)[ 3 ] == c4 ) 1948ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#define CMP5( s, c1, c2, c3, c4, c5 ) \ 1949ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ( CMP4( s, c1, c2, c3, c4 ) && ((unsigned char *) s)[ 4 ] == c5 ) 1950ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#define CMP6( s, c1, c2, c3, c4, c5, c6 ) \ 1951ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ( CMP5( s, c1, c2, c3, c4, c5 ) && ((unsigned char *) s)[ 5 ] == c6 ) 1952ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#define CMP7( s, c1, c2, c3, c4, c5, c6, c7 ) \ 1953ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ( CMP6( s, c1, c2, c3, c4, c5, c6 ) && ((unsigned char *) s)[ 6 ] == c7 ) 1954ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#define CMP8( s, c1, c2, c3, c4, c5, c6, c7, c8 ) \ 1955ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ( CMP7( s, c1, c2, c3, c4, c5, c6, c7 ) && ((unsigned char *) s)[ 7 ] == c8 ) 1956ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#define CMP9( s, c1, c2, c3, c4, c5, c6, c7, c8, c9 ) \ 1957ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ( CMP8( s, c1, c2, c3, c4, c5, c6, c7, c8 ) && \ 1958ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ((unsigned char *) s)[ 8 ] == c9 ) 1959ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#define CMP10( s, c1, c2, c3, c4, c5, c6, c7, c8, c9, c10 ) \ 1960ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ( CMP9( s, c1, c2, c3, c4, c5, c6, c7, c8, c9 ) && \ 1961ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ((unsigned char *) s)[ 9 ] == c10 ) 1962ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1963ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#define SKIP(val) do { \ 1964ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->nbChars += (val),ctxt->input->cur += (val),ctxt->input->col+=(val); \ 1965ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (*ctxt->input->cur == '%') xmlParserHandlePEReference(ctxt); \ 1966ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((*ctxt->input->cur == 0) && \ 1967ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (xmlParserInputGrow(ctxt->input, INPUT_CHUNK) <= 0)) \ 1968ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlPopInput(ctxt); \ 1969ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } while (0) 1970ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1971ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#define SKIPL(val) do { \ 1972ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int skipl; \ 1973ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project for(skipl=0; skipl<val; skipl++) { \ 1974ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (*(ctxt->input->cur) == '\n') { \ 1975ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->input->line++; ctxt->input->col = 1; \ 1976ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else ctxt->input->col++; \ 1977ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->nbChars++; \ 1978ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->input->cur++; \ 1979ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } \ 1980ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (*ctxt->input->cur == '%') xmlParserHandlePEReference(ctxt); \ 1981ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((*ctxt->input->cur == 0) && \ 1982ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (xmlParserInputGrow(ctxt->input, INPUT_CHUNK) <= 0)) \ 1983ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlPopInput(ctxt); \ 1984ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } while (0) 1985ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1986ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#define SHRINK if ((ctxt->progressive == 0) && \ 1987ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (ctxt->input->cur - ctxt->input->base > 2 * INPUT_CHUNK) && \ 1988ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (ctxt->input->end - ctxt->input->cur < 2 * INPUT_CHUNK)) \ 1989ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSHRINK (ctxt); 1990ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1991ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic void xmlSHRINK (xmlParserCtxtPtr ctxt) { 1992ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParserInputShrink(ctxt->input); 1993ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((*ctxt->input->cur == 0) && 1994ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (xmlParserInputGrow(ctxt->input, INPUT_CHUNK) <= 0)) 1995ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlPopInput(ctxt); 1996ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1997ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1998ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#define GROW if ((ctxt->progressive == 0) && \ 1999ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (ctxt->input->end - ctxt->input->cur < INPUT_CHUNK)) \ 2000ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlGROW (ctxt); 2001ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2002ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic void xmlGROW (xmlParserCtxtPtr ctxt) { 2003ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParserInputGrow(ctxt->input, INPUT_CHUNK); 2004df143a5041f03a22808b59c76698770b74692815Selim Gurun if ((ctxt->input->cur != NULL) && (*ctxt->input->cur == 0) && 2005ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (xmlParserInputGrow(ctxt->input, INPUT_CHUNK) <= 0)) 2006ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlPopInput(ctxt); 2007ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 2008ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2009ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#define SKIP_BLANKS xmlSkipBlankChars(ctxt) 2010ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2011ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#define NEXT xmlNextChar(ctxt) 2012ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2013ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#define NEXT1 { \ 2014ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->input->col++; \ 2015ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->input->cur++; \ 2016ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->nbChars++; \ 2017ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (*ctxt->input->cur == 0) \ 2018ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParserInputGrow(ctxt->input, INPUT_CHUNK); \ 2019ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2020ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2021ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#define NEXTL(l) do { \ 2022ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (*(ctxt->input->cur) == '\n') { \ 2023ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->input->line++; ctxt->input->col = 1; \ 2024ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else ctxt->input->col++; \ 2025ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->input->cur += l; \ 2026ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (*ctxt->input->cur == '%') xmlParserHandlePEReference(ctxt); \ 2027ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } while (0) 2028ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2029ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#define CUR_CHAR(l) xmlCurrentChar(ctxt, &l) 2030ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#define CUR_SCHAR(s, l) xmlStringCurrentChar(ctxt, s, &l) 2031ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2032ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#define COPY_BUF(l,b,i,v) \ 2033ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (l == 1) b[i++] = (xmlChar) v; \ 2034ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else i += xmlCopyCharMultiByte(&b[i],v) 2035ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2036ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 2037ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlSkipBlankChars: 2038ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctxt: the XML parser context 2039ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 2040ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * skip all blanks character found at that point in the input streams. 2041ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * It pops up finished entities in the process if allowable at that point. 2042ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 2043ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the number of space chars skipped 2044ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 2045ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2046ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectint 2047ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlSkipBlankChars(xmlParserCtxtPtr ctxt) { 2048ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int res = 0; 2049ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2050ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 2051ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * It's Okay to use CUR/NEXT here since all the blanks are on 2052ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * the ASCII range. 2053ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 2054ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ctxt->inputNr == 1) && (ctxt->instate != XML_PARSER_DTD)) { 2055ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar *cur; 2056ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 2057ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * if we are in the document content, go really fast 2058ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 2059ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur = ctxt->input->cur; 2060ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while (IS_BLANK_CH(*cur)) { 2061ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (*cur == '\n') { 2062ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->input->line++; ctxt->input->col = 1; 2063ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2064ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur++; 2065ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project res++; 2066ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (*cur == 0) { 2067ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->input->cur = cur; 2068ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParserInputGrow(ctxt->input, INPUT_CHUNK); 2069ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur = ctxt->input->cur; 2070ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2071ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2072ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->input->cur = cur; 2073ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 2074ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int cur; 2075ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project do { 2076ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur = CUR; 2077ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while (IS_BLANK_CH(cur)) { /* CHECKED tstblanks.xml */ 2078ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project NEXT; 2079ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur = CUR; 2080ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project res++; 2081ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2082ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while ((cur == 0) && (ctxt->inputNr > 1) && 2083ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (ctxt->instate != XML_PARSER_COMMENT)) { 2084ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlPopInput(ctxt); 2085ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur = CUR; 2086ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2087ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 2088ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Need to handle support of entities branching here 2089ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 2090ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (*ctxt->input->cur == '%') xmlParserHandlePEReference(ctxt); 2091ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } while (IS_BLANK(cur)); /* CHECKED tstblanks.xml */ 2092ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2093ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(res); 2094ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 2095ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2096ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/************************************************************************ 2097ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * * 2098ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Commodity functions to handle entities * 2099ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * * 2100ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ************************************************************************/ 2101ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2102ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 2103ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlPopInput: 2104ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctxt: an XML parser context 2105ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 2106ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlPopInput: the current input pointed by ctxt->input came to an end 2107ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * pop it and return the next char. 2108ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 2109ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the current xmlChar in the parser context 2110ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 2111ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlChar 2112ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlPopInput(xmlParserCtxtPtr ctxt) { 2113ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ctxt == NULL) || (ctxt->inputNr <= 1)) return(0); 2114ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (xmlParserDebugEntities) 2115ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlGenericError(xmlGenericErrorContext, 2116ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "Popping input %d\n", ctxt->inputNr); 2117ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFreeInputStream(inputPop(ctxt)); 2118ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((*ctxt->input->cur == 0) && 2119ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (xmlParserInputGrow(ctxt->input, INPUT_CHUNK) <= 0)) 2120ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(xmlPopInput(ctxt)); 2121ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(CUR); 2122ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 2123ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2124ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 2125ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlPushInput: 2126ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctxt: an XML parser context 2127ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @input: an XML parser input fragment (entity, XML fragment ...). 2128ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 2129ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlPushInput: switch to a new input stream which is stacked on top 2130ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * of the previous one(s). 213160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * Returns -1 in case of error or the index in the input stack 2132ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 213360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scottint 2134ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlPushInput(xmlParserCtxtPtr ctxt, xmlParserInputPtr input) { 213560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott int ret; 213660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (input == NULL) return(-1); 2137ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2138ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (xmlParserDebugEntities) { 2139ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ctxt->input != NULL) && (ctxt->input->filename)) 2140ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlGenericError(xmlGenericErrorContext, 2141ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "%s(%d): ", ctxt->input->filename, 2142ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->input->line); 2143ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlGenericError(xmlGenericErrorContext, 2144ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "Pushing input %d : %.30s\n", ctxt->inputNr+1, input->cur); 2145ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 214660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ret = inputPush(ctxt, input); 2147ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project GROW; 214860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott return(ret); 2149ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 2150ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2151ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 2152ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlParseCharRef: 2153ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctxt: an XML parser context 2154ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 2155ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * parse Reference declarations 2156ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 2157ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [66] CharRef ::= '&#' [0-9]+ ';' | 2158ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * '&#x' [0-9a-fA-F]+ ';' 2159ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 2160ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [ WFC: Legal Character ] 2161ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Characters referred to using character references must match the 2162ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * production for Char. 2163ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 2164ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the value parsed (as an int), 0 in case of error 2165ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 2166ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectint 2167ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlParseCharRef(xmlParserCtxtPtr ctxt) { 2168ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project unsigned int val = 0; 2169ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int count = 0; 2170ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project unsigned int outofrange = 0; 2171ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2172ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 2173ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Using RAW/CUR/NEXT is okay since we are working on ASCII range here 2174ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 2175ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((RAW == '&') && (NXT(1) == '#') && 2176ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (NXT(2) == 'x')) { 2177ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SKIP(3); 2178ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project GROW; 2179ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while (RAW != ';') { /* loop blocked by count */ 2180ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (count++ > 20) { 2181ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project count = 0; 2182ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project GROW; 2183ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2184ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((RAW >= '0') && (RAW <= '9')) 2185ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project val = val * 16 + (CUR - '0'); 2186ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else if ((RAW >= 'a') && (RAW <= 'f') && (count < 20)) 2187ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project val = val * 16 + (CUR - 'a') + 10; 2188ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else if ((RAW >= 'A') && (RAW <= 'F') && (count < 20)) 2189ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project val = val * 16 + (CUR - 'A') + 10; 2190ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else { 2191ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErr(ctxt, XML_ERR_INVALID_HEX_CHARREF, NULL); 2192ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project val = 0; 2193ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 2194ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2195ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (val > 0x10FFFF) 2196ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project outofrange = val; 2197ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2198ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project NEXT; 2199ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project count++; 2200ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2201ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (RAW == ';') { 2202ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* on purpose to avoid reentrancy problems with NEXT and SKIP */ 2203ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->input->col++; 2204ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->nbChars ++; 2205ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->input->cur++; 2206ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2207ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if ((RAW == '&') && (NXT(1) == '#')) { 2208ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SKIP(2); 2209ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project GROW; 2210ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while (RAW != ';') { /* loop blocked by count */ 2211ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (count++ > 20) { 2212ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project count = 0; 2213ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project GROW; 2214ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2215ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((RAW >= '0') && (RAW <= '9')) 2216ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project val = val * 10 + (CUR - '0'); 2217ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else { 2218ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErr(ctxt, XML_ERR_INVALID_DEC_CHARREF, NULL); 2219ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project val = 0; 2220ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 2221ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2222ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (val > 0x10FFFF) 2223ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project outofrange = val; 2224ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2225ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project NEXT; 2226ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project count++; 2227ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2228ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (RAW == ';') { 2229ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* on purpose to avoid reentrancy problems with NEXT and SKIP */ 2230ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->input->col++; 2231ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->nbChars ++; 2232ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->input->cur++; 2233ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2234ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 2235ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErr(ctxt, XML_ERR_INVALID_CHARREF, NULL); 2236ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2237ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2238ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 2239ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [ WFC: Legal Character ] 2240ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Characters referred to using character references must match the 2241ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * production for Char. 2242ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 2243ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((IS_CHAR(val) && (outofrange == 0))) { 2244ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(val); 2245ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 2246ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErrMsgInt(ctxt, XML_ERR_INVALID_CHAR, 2247ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "xmlParseCharRef: invalid xmlChar value %d\n", 2248ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project val); 2249ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2250ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(0); 2251ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 2252ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2253ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 2254ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlParseStringCharRef: 2255ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctxt: an XML parser context 2256ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @str: a pointer to an index in the string 2257ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 2258ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * parse Reference declarations, variant parsing from a string rather 2259ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * than an an input flow. 2260ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 2261ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [66] CharRef ::= '&#' [0-9]+ ';' | 2262ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * '&#x' [0-9a-fA-F]+ ';' 2263ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 2264ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [ WFC: Legal Character ] 2265ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Characters referred to using character references must match the 2266ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * production for Char. 2267ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 2268ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the value parsed (as an int), 0 in case of error, str will be 2269ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * updated to the current value of the index 2270ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 2271ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic int 2272ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlParseStringCharRef(xmlParserCtxtPtr ctxt, const xmlChar **str) { 2273ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar *ptr; 2274ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar cur; 2275ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project unsigned int val = 0; 2276ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project unsigned int outofrange = 0; 2277ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2278ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((str == NULL) || (*str == NULL)) return(0); 2279ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ptr = *str; 2280ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur = *ptr; 2281ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((cur == '&') && (ptr[1] == '#') && (ptr[2] == 'x')) { 2282ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ptr += 3; 2283ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur = *ptr; 2284ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while (cur != ';') { /* Non input consuming loop */ 2285ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((cur >= '0') && (cur <= '9')) 2286ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project val = val * 16 + (cur - '0'); 2287ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else if ((cur >= 'a') && (cur <= 'f')) 2288ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project val = val * 16 + (cur - 'a') + 10; 2289ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else if ((cur >= 'A') && (cur <= 'F')) 2290ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project val = val * 16 + (cur - 'A') + 10; 2291ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else { 2292ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErr(ctxt, XML_ERR_INVALID_HEX_CHARREF, NULL); 2293ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project val = 0; 2294ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 2295ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2296ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (val > 0x10FFFF) 2297ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project outofrange = val; 2298ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2299ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ptr++; 2300ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur = *ptr; 2301ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2302ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (cur == ';') 2303ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ptr++; 2304ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if ((cur == '&') && (ptr[1] == '#')){ 2305ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ptr += 2; 2306ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur = *ptr; 2307ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while (cur != ';') { /* Non input consuming loops */ 2308ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((cur >= '0') && (cur <= '9')) 2309ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project val = val * 10 + (cur - '0'); 2310ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else { 2311ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErr(ctxt, XML_ERR_INVALID_DEC_CHARREF, NULL); 2312ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project val = 0; 2313ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 2314ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2315ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (val > 0x10FFFF) 2316ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project outofrange = val; 2317ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2318ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ptr++; 2319ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur = *ptr; 2320ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2321ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (cur == ';') 2322ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ptr++; 2323ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 2324ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErr(ctxt, XML_ERR_INVALID_CHARREF, NULL); 2325ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(0); 2326ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2327ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *str = ptr; 2328ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2329ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 2330ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [ WFC: Legal Character ] 2331ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Characters referred to using character references must match the 2332ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * production for Char. 2333ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 2334ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((IS_CHAR(val) && (outofrange == 0))) { 2335ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(val); 2336ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 2337ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErrMsgInt(ctxt, XML_ERR_INVALID_CHAR, 2338ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "xmlParseStringCharRef: invalid xmlChar value %d\n", 2339ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project val); 2340ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2341ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(0); 2342ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 2343ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2344ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 2345ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlNewBlanksWrapperInputStream: 2346ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctxt: an XML parser context 2347ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @entity: an Entity pointer 2348ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 2349ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Create a new input stream for wrapping 2350ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * blanks around a PEReference 2351ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 2352ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the new input stream or NULL 2353ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 2354ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2355ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic void deallocblankswrapper (xmlChar *str) {xmlFree(str);} 2356ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2357ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic xmlParserInputPtr 2358ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlNewBlanksWrapperInputStream(xmlParserCtxtPtr ctxt, xmlEntityPtr entity) { 2359ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParserInputPtr input; 2360ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar *buffer; 2361ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project size_t length; 2362ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (entity == NULL) { 2363ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErr(ctxt, XML_ERR_INTERNAL_ERROR, 2364ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "xmlNewBlanksWrapperInputStream entity\n"); 2365ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 2366ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2367ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (xmlParserDebugEntities) 2368ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlGenericError(xmlGenericErrorContext, 2369ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "new blanks wrapper for entity: %s\n", entity->name); 2370ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project input = xmlNewInputStream(ctxt); 2371ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (input == NULL) { 2372ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 2373ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2374ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project length = xmlStrlen(entity->name) + 5; 2375ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project buffer = xmlMallocAtomic(length); 2376ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (buffer == NULL) { 2377ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlErrMemory(ctxt, NULL); 237860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott xmlFree(input); 2379ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 2380ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2381ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project buffer [0] = ' '; 2382ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project buffer [1] = '%'; 2383ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project buffer [length-3] = ';'; 2384ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project buffer [length-2] = ' '; 2385ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project buffer [length-1] = 0; 2386ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project memcpy(buffer + 2, entity->name, length - 5); 2387ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project input->free = deallocblankswrapper; 2388ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project input->base = buffer; 2389ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project input->cur = buffer; 2390ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project input->length = length; 2391ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project input->end = &buffer[length]; 2392ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(input); 2393ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 2394ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2395ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 2396ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlParserHandlePEReference: 2397ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctxt: the parser context 2398ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 2399ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [69] PEReference ::= '%' Name ';' 2400ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 2401ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [ WFC: No Recursion ] 2402ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * A parsed entity must not contain a recursive 2403ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * reference to itself, either directly or indirectly. 2404ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 2405ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [ WFC: Entity Declared ] 2406ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * In a document without any DTD, a document with only an internal DTD 2407ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * subset which contains no parameter entity references, or a document 2408ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * with "standalone='yes'", ... ... The declaration of a parameter 2409ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * entity must precede any reference to it... 2410ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 2411ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [ VC: Entity Declared ] 2412ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * In a document with an external subset or external parameter entities 2413ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * with "standalone='no'", ... ... The declaration of a parameter entity 2414ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * must precede any reference to it... 2415ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 2416ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [ WFC: In DTD ] 2417ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Parameter-entity references may only appear in the DTD. 2418ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * NOTE: misleading but this is handled. 2419ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 2420ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * A PEReference may have been detected in the current input stream 2421ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * the handling is done accordingly to 2422ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * http://www.w3.org/TR/REC-xml#entproc 2423ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * i.e. 2424ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * - Included in literal in entity values 2425ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * - Included as Parameter Entity reference within DTDs 2426ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 2427ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectvoid 2428ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlParserHandlePEReference(xmlParserCtxtPtr ctxt) { 2429ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar *name; 2430ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlEntityPtr entity = NULL; 2431ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParserInputPtr input; 2432ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2433ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (RAW != '%') return; 2434ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project switch(ctxt->instate) { 2435ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_PARSER_CDATA_SECTION: 2436ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return; 2437ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_PARSER_COMMENT: 2438ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return; 2439ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_PARSER_START_TAG: 2440ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return; 2441ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_PARSER_END_TAG: 2442ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return; 2443ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_PARSER_EOF: 2444ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErr(ctxt, XML_ERR_PEREF_AT_EOF, NULL); 2445ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return; 2446ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_PARSER_PROLOG: 2447ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_PARSER_START: 2448ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_PARSER_MISC: 2449ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErr(ctxt, XML_ERR_PEREF_IN_PROLOG, NULL); 2450ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return; 2451ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_PARSER_ENTITY_DECL: 2452ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_PARSER_CONTENT: 2453ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_PARSER_ATTRIBUTE_VALUE: 2454ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_PARSER_PI: 2455ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_PARSER_SYSTEM_LITERAL: 2456ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_PARSER_PUBLIC_LITERAL: 2457ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* we just ignore it there */ 2458ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return; 2459ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_PARSER_EPILOG: 2460ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErr(ctxt, XML_ERR_PEREF_IN_EPILOG, NULL); 2461ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return; 2462ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_PARSER_ENTITY_VALUE: 2463ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 2464ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * NOTE: in the case of entity values, we don't do the 2465ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * substitution here since we need the literal 2466ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * entity value to be able to save the internal 2467ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * subset of the document. 2468ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * This will be handled by xmlStringDecodeEntities 2469ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 2470ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return; 2471ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_PARSER_DTD: 2472ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 2473ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [WFC: Well-Formedness Constraint: PEs in Internal Subset] 2474ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * In the internal DTD subset, parameter-entity references 2475ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * can occur only where markup declarations can occur, not 2476ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * within markup declarations. 2477ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * In that case this is handled in xmlParseMarkupDecl 2478ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 2479ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ctxt->external == 0) && (ctxt->inputNr == 1)) 2480ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return; 2481ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (IS_BLANK_CH(NXT(1)) || NXT(1) == 0) 2482ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return; 2483ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 2484ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_PARSER_IGNORE: 2485ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return; 2486ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2487ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2488ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project NEXT; 2489ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project name = xmlParseName(ctxt); 2490ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (xmlParserDebugEntities) 2491ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlGenericError(xmlGenericErrorContext, 2492ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "PEReference: %s\n", name); 2493ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (name == NULL) { 2494ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErr(ctxt, XML_ERR_PEREF_NO_NAME, NULL); 2495ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 2496ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (RAW == ';') { 2497ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project NEXT; 2498ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ctxt->sax != NULL) && (ctxt->sax->getParameterEntity != NULL)) 2499ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project entity = ctxt->sax->getParameterEntity(ctxt->userData, name); 2500ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (entity == NULL) { 2501ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2502ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 2503ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [ WFC: Entity Declared ] 2504ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * In a document without any DTD, a document with only an 2505ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * internal DTD subset which contains no parameter entity 2506ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * references, or a document with "standalone='yes'", ... 2507ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * ... The declaration of a parameter entity must precede 2508ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * any reference to it... 2509ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 2510ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ctxt->standalone == 1) || 2511ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ((ctxt->hasExternalSubset == 0) && 2512ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (ctxt->hasPErefs == 0))) { 2513ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErrMsgStr(ctxt, XML_ERR_UNDECLARED_ENTITY, 2514ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "PEReference: %%%s; not found\n", name); 2515ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 2516ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 2517ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [ VC: Entity Declared ] 2518ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * In a document with an external subset or external 2519ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * parameter entities with "standalone='no'", ... 2520ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * ... The declaration of a parameter entity must precede 2521ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * any reference to it... 2522ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 2523ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ctxt->validate) && (ctxt->vctxt.error != NULL)) { 2524ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlValidityError(ctxt, XML_WAR_UNDECLARED_ENTITY, 2525ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "PEReference: %%%s; not found\n", 252660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott name, NULL); 2527ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else 2528ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlWarningMsg(ctxt, XML_WAR_UNDECLARED_ENTITY, 2529ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "PEReference: %%%s; not found\n", 2530ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project name, NULL); 2531ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->valid = 0; 2532ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2533ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if (ctxt->input->free != deallocblankswrapper) { 2534ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project input = xmlNewBlanksWrapperInputStream(ctxt, entity); 253560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (xmlPushInput(ctxt, input) < 0) 253660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott return; 2537ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 2538ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((entity->etype == XML_INTERNAL_PARAMETER_ENTITY) || 2539ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (entity->etype == XML_EXTERNAL_PARAMETER_ENTITY)) { 2540ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar start[4]; 2541ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlCharEncoding enc; 2542ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2543ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 2544ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * handle the extra spaces added before and after 2545ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * c.f. http://www.w3.org/TR/REC-xml#as-PE 2546ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * this is done independently. 2547ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 2548ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project input = xmlNewEntityInputStream(ctxt, entity); 254960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (xmlPushInput(ctxt, input) < 0) 255060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott return; 2551ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2552ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 2553ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Get the 4 first bytes and decode the charset 2554ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * if enc != XML_CHAR_ENCODING_NONE 2555ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * plug some encoding conversion routines. 2556ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Note that, since we may have some non-UTF8 2557ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * encoding (like UTF16, bug 135229), the 'length' 2558ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * is not known, but we can calculate based upon 2559ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * the amount of data in the buffer. 2560ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 2561ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project GROW 2562ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ctxt->input->end - ctxt->input->cur)>=4) { 2563ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project start[0] = RAW; 2564ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project start[1] = NXT(1); 2565ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project start[2] = NXT(2); 2566ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project start[3] = NXT(3); 2567ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project enc = xmlDetectCharEncoding(start, 4); 2568ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (enc != XML_CHAR_ENCODING_NONE) { 2569ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSwitchEncoding(ctxt, enc); 2570ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2571ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2572ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2573ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((entity->etype == XML_EXTERNAL_PARAMETER_ENTITY) && 2574ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (CMP5(CUR_PTR, '<', '?', 'x', 'm', 'l' )) && 2575ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (IS_BLANK_CH(NXT(5)))) { 2576ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParseTextDecl(ctxt); 2577ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2578ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 2579ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErrMsgStr(ctxt, XML_ERR_ENTITY_IS_PARAMETER, 2580ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "PEReference: %s is not a parameter entity\n", 2581ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project name); 2582ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2583ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2584ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 2585ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErr(ctxt, XML_ERR_PEREF_SEMICOL_MISSING, NULL); 2586ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2587ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2588ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 2589ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2590ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/* 2591ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Macro used to grow the current buffer. 2592ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 259360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott#define growBuffer(buffer, n) { \ 2594ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar *tmp; \ 2595ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project buffer##_size *= 2; \ 259660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott buffer##_size += n; \ 2597ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project tmp = (xmlChar *) \ 259860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott xmlRealloc(buffer, buffer##_size * sizeof(xmlChar)); \ 2599ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (tmp == NULL) goto mem_error; \ 2600ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project buffer = tmp; \ 2601ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 2602ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2603ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 2604ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlStringLenDecodeEntities: 2605ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctxt: the parser context 2606ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @str: the input string 2607ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @len: the string length 2608ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @what: combination of XML_SUBSTITUTE_REF and XML_SUBSTITUTE_PEREF 2609ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @end: an end marker xmlChar, 0 if none 2610ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @end2: an end marker xmlChar, 0 if none 2611ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @end3: an end marker xmlChar, 0 if none 2612ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 2613ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Takes a entity string content and process to do the adequate substitutions. 2614ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 2615ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [67] Reference ::= EntityRef | CharRef 2616ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 2617ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [69] PEReference ::= '%' Name ';' 2618ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 2619ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns A newly allocated string with the substitution done. The caller 2620ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * must deallocate it ! 2621ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 2622ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlChar * 2623ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlStringLenDecodeEntities(xmlParserCtxtPtr ctxt, const xmlChar *str, int len, 2624ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int what, xmlChar end, xmlChar end2, xmlChar end3) { 2625ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar *buffer = NULL; 2626ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int buffer_size = 0; 2627ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2628ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar *current = NULL; 262960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott xmlChar *rep = NULL; 2630ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar *last; 2631ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlEntityPtr ent; 2632ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int c,l; 2633ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int nbchars = 0; 2634ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2635ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ctxt == NULL) || (str == NULL) || (len < 0)) 2636ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 2637ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project last = str + len; 2638ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 263960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (((ctxt->depth > 40) && 264060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ((ctxt->options & XML_PARSE_HUGE) == 0)) || 264160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott (ctxt->depth > 1024)) { 2642ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErr(ctxt, XML_ERR_ENTITY_LOOP, NULL); 2643ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 2644ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2645ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2646ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 2647ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * allocate a translation buffer. 2648ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 2649ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project buffer_size = XML_PARSER_BIG_BUFFER_SIZE; 2650ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project buffer = (xmlChar *) xmlMallocAtomic(buffer_size * sizeof(xmlChar)); 2651ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (buffer == NULL) goto mem_error; 2652ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2653ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 2654ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * OK loop until we reach one of the ending char or a size limit. 2655ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * we are operating on already parsed values. 2656ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 2657ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (str < last) 2658ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project c = CUR_SCHAR(str, l); 2659ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else 2660ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project c = 0; 2661ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while ((c != 0) && (c != end) && /* non input consuming loop */ 2662ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (c != end2) && (c != end3)) { 2663ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2664ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (c == 0) break; 2665ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((c == '&') && (str[1] == '#')) { 2666ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int val = xmlParseStringCharRef(ctxt, &str); 2667ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (val != 0) { 2668ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project COPY_BUF(0,buffer,nbchars,val); 2669ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2670ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (nbchars > buffer_size - XML_PARSER_BUFFER_SIZE) { 267160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott growBuffer(buffer, XML_PARSER_BUFFER_SIZE); 2672ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2673ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if ((c == '&') && (what & XML_SUBSTITUTE_REF)) { 2674ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (xmlParserDebugEntities) 2675ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlGenericError(xmlGenericErrorContext, 2676ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "String decoding Entity Reference: %.30s\n", 2677ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project str); 2678ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ent = xmlParseStringEntityRef(ctxt, &str); 267960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if ((ctxt->lastError.code == XML_ERR_ENTITY_LOOP) || 268060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott (ctxt->lastError.code == XML_ERR_INTERNAL_ERROR)) 268160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott goto int_error; 268260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (ent != NULL) 268360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ctxt->nbentities += ent->checked; 2684ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ent != NULL) && 2685ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (ent->etype == XML_INTERNAL_PREDEFINED_ENTITY)) { 2686ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ent->content != NULL) { 2687ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project COPY_BUF(0,buffer,nbchars,ent->content[0]); 2688ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (nbchars > buffer_size - XML_PARSER_BUFFER_SIZE) { 268960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott growBuffer(buffer, XML_PARSER_BUFFER_SIZE); 2690ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2691ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 2692ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErrMsg(ctxt, XML_ERR_INTERNAL_ERROR, 2693ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "predefined entity has no content\n"); 2694ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2695ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if ((ent != NULL) && (ent->content != NULL)) { 2696ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->depth++; 2697ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project rep = xmlStringDecodeEntities(ctxt, ent->content, what, 2698ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 0, 0, 0); 2699ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->depth--; 270060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott 2701ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (rep != NULL) { 2702ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project current = rep; 2703ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while (*current != 0) { /* non input consuming loop */ 2704ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project buffer[nbchars++] = *current++; 2705ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (nbchars > 2706ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project buffer_size - XML_PARSER_BUFFER_SIZE) { 270760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (xmlParserEntityCheck(ctxt, nbchars, ent)) 270860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott goto int_error; 270960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott growBuffer(buffer, XML_PARSER_BUFFER_SIZE); 2710ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2711ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2712ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree(rep); 271360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott rep = NULL; 2714ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2715ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if (ent != NULL) { 2716ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int i = xmlStrlen(ent->name); 2717ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar *cur = ent->name; 2718ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2719ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project buffer[nbchars++] = '&'; 2720ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (nbchars > buffer_size - i - XML_PARSER_BUFFER_SIZE) { 2721df143a5041f03a22808b59c76698770b74692815Selim Gurun growBuffer(buffer, i + XML_PARSER_BUFFER_SIZE); 2722ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2723ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project for (;i > 0;i--) 2724ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project buffer[nbchars++] = *cur++; 2725ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project buffer[nbchars++] = ';'; 2726ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2727ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if (c == '%' && (what & XML_SUBSTITUTE_PEREF)) { 2728ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (xmlParserDebugEntities) 2729ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlGenericError(xmlGenericErrorContext, 2730ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "String decoding PE Reference: %.30s\n", str); 2731ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ent = xmlParseStringPEReference(ctxt, &str); 273260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (ctxt->lastError.code == XML_ERR_ENTITY_LOOP) 273360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott goto int_error; 273460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (ent != NULL) 273560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ctxt->nbentities += ent->checked; 2736ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ent != NULL) { 273760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (ent->content == NULL) { 273860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott xmlLoadEntityContent(ctxt, ent); 273960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } 2740ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->depth++; 2741ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project rep = xmlStringDecodeEntities(ctxt, ent->content, what, 2742ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 0, 0, 0); 2743ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->depth--; 2744ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (rep != NULL) { 2745ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project current = rep; 2746ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while (*current != 0) { /* non input consuming loop */ 2747ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project buffer[nbchars++] = *current++; 2748ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (nbchars > 2749ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project buffer_size - XML_PARSER_BUFFER_SIZE) { 275060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (xmlParserEntityCheck(ctxt, nbchars, ent)) 275160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott goto int_error; 275260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott growBuffer(buffer, XML_PARSER_BUFFER_SIZE); 2753ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2754ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2755ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree(rep); 275660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott rep = NULL; 2757ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2758ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2759ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 2760ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project COPY_BUF(l,buffer,nbchars,c); 2761ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project str += l; 2762ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (nbchars > buffer_size - XML_PARSER_BUFFER_SIZE) { 276360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott growBuffer(buffer, XML_PARSER_BUFFER_SIZE); 2764ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2765ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2766ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (str < last) 2767ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project c = CUR_SCHAR(str, l); 2768ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else 2769ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project c = 0; 2770ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2771df143a5041f03a22808b59c76698770b74692815Selim Gurun buffer[nbchars] = 0; 2772ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(buffer); 2773ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2774ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectmem_error: 2775ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlErrMemory(ctxt, NULL); 277660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scottint_error: 277760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (rep != NULL) 277860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott xmlFree(rep); 277960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (buffer != NULL) 278060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott xmlFree(buffer); 2781ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 2782ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 2783ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2784ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 2785ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlStringDecodeEntities: 2786ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctxt: the parser context 2787ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @str: the input string 2788ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @what: combination of XML_SUBSTITUTE_REF and XML_SUBSTITUTE_PEREF 2789ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @end: an end marker xmlChar, 0 if none 2790ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @end2: an end marker xmlChar, 0 if none 2791ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @end3: an end marker xmlChar, 0 if none 2792ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 2793ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Takes a entity string content and process to do the adequate substitutions. 2794ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 2795ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [67] Reference ::= EntityRef | CharRef 2796ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 2797ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [69] PEReference ::= '%' Name ';' 2798ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 2799ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns A newly allocated string with the substitution done. The caller 2800ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * must deallocate it ! 2801ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 2802ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlChar * 2803ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlStringDecodeEntities(xmlParserCtxtPtr ctxt, const xmlChar *str, int what, 2804ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar end, xmlChar end2, xmlChar end3) { 2805ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ctxt == NULL) || (str == NULL)) return(NULL); 2806ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(xmlStringLenDecodeEntities(ctxt, str, xmlStrlen(str), what, 2807ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project end, end2, end3)); 2808ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 2809ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2810ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/************************************************************************ 2811ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * * 2812ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Commodity functions, cleanup needed ? * 2813ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * * 2814ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ************************************************************************/ 2815ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2816ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 2817ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * areBlanks: 2818ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctxt: an XML parser context 2819ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @str: a xmlChar * 2820ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @len: the size of @str 2821ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @blank_chars: we know the chars are blanks 2822ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 2823ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Is this a sequence of blank chars that one can ignore ? 2824ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 2825ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns 1 if ignorable 0 otherwise. 2826ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 2827ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2828ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic int areBlanks(xmlParserCtxtPtr ctxt, const xmlChar *str, int len, 2829ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int blank_chars) { 2830ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int i, ret; 2831ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlNodePtr lastChild; 2832ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2833ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 2834ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Don't spend time trying to differentiate them, the same callback is 2835ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * used ! 2836ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 2837ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt->sax->ignorableWhitespace == ctxt->sax->characters) 2838ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(0); 2839ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2840ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 2841ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Check for xml:space value. 2842ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 2843ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ctxt->space == NULL) || (*(ctxt->space) == 1) || 2844ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (*(ctxt->space) == -2)) 2845ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(0); 2846ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2847ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 2848ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Check that the string is made of blanks 2849ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 2850ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (blank_chars == 0) { 2851ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project for (i = 0;i < len;i++) 2852ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (!(IS_BLANK_CH(str[i]))) return(0); 2853ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2854ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2855ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 2856ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Look if the element is mixed content in the DTD if available 2857ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 2858ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt->node == NULL) return(0); 2859ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt->myDoc != NULL) { 2860ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = xmlIsMixedElement(ctxt->myDoc, ctxt->node->name); 2861ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ret == 0) return(1); 2862ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ret == 1) return(0); 2863ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2864ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2865ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 2866ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Otherwise, heuristic :-\ 2867ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 2868ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((RAW != '<') && (RAW != 0xD)) return(0); 2869ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ctxt->node->children == NULL) && 2870ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (RAW == '<') && (NXT(1) == '/')) return(0); 2871ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2872ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project lastChild = xmlGetLastChild(ctxt->node); 2873ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (lastChild == NULL) { 2874ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ctxt->node->type != XML_ELEMENT_NODE) && 2875ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (ctxt->node->content != NULL)) return(0); 2876ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if (xmlNodeIsText(lastChild)) 2877ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(0); 2878ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else if ((ctxt->node->children != NULL) && 2879ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (xmlNodeIsText(ctxt->node->children))) 2880ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(0); 2881ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(1); 2882ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 2883ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2884ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/************************************************************************ 2885ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * * 2886ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Extra stuff for namespace support * 2887ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Relates to http://www.w3.org/TR/WD-xml-names * 2888ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * * 2889ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ************************************************************************/ 2890ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2891ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 2892ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlSplitQName: 2893ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctxt: an XML parser context 2894ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @name: an XML parser context 289560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * @prefix: a xmlChar ** 2896ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 2897ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * parse an UTF8 encoded XML qualified name string 2898ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 2899ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [NS 5] QName ::= (Prefix ':')? LocalPart 2900ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 2901ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [NS 6] Prefix ::= NCName 2902ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 2903ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [NS 7] LocalPart ::= NCName 2904ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 2905ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the local part, and prefix is updated 2906ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * to get the Prefix if any. 2907ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 2908ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2909ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlChar * 2910ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlSplitQName(xmlParserCtxtPtr ctxt, const xmlChar *name, xmlChar **prefix) { 2911ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar buf[XML_MAX_NAMELEN + 5]; 2912ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar *buffer = NULL; 2913ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int len = 0; 2914ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int max = XML_MAX_NAMELEN; 2915ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar *ret = NULL; 2916ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar *cur = name; 2917ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int c; 2918ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2919ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (prefix == NULL) return(NULL); 2920ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *prefix = NULL; 2921ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2922ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (cur == NULL) return(NULL); 2923ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2924ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifndef XML_XML_NAMESPACE 2925ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* xml: prefix is not really a namespace */ 2926ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((cur[0] == 'x') && (cur[1] == 'm') && 2927ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (cur[2] == 'l') && (cur[3] == ':')) 2928ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(xmlStrdup(name)); 2929ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 2930ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2931ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* nasty but well=formed */ 2932ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (cur[0] == ':') 2933ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(xmlStrdup(name)); 2934ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2935ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project c = *cur++; 2936ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while ((c != 0) && (c != ':') && (len < max)) { /* tested bigname.xml */ 2937ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project buf[len++] = c; 2938ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project c = *cur++; 2939ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2940ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (len >= max) { 2941ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 2942ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Okay someone managed to make a huge name, so he's ready to pay 2943ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * for the processing speed. 2944ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 2945ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project max = len * 2; 294660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott 2947ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project buffer = (xmlChar *) xmlMallocAtomic(max * sizeof(xmlChar)); 2948ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (buffer == NULL) { 2949ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlErrMemory(ctxt, NULL); 2950ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 2951ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2952ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project memcpy(buffer, buf, len); 2953ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while ((c != 0) && (c != ':')) { /* tested bigname.xml */ 2954ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (len + 10 > max) { 2955ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar *tmp; 2956ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2957ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project max *= 2; 2958ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project tmp = (xmlChar *) xmlRealloc(buffer, 2959ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project max * sizeof(xmlChar)); 2960ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (tmp == NULL) { 296160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott xmlFree(buffer); 2962ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlErrMemory(ctxt, NULL); 2963ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 2964ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2965ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project buffer = tmp; 2966ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2967ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project buffer[len++] = c; 2968ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project c = *cur++; 2969ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2970ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project buffer[len] = 0; 2971ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 297260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott 2973ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((c == ':') && (*cur == 0)) { 2974ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (buffer != NULL) 2975ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree(buffer); 2976ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *prefix = NULL; 2977ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(xmlStrdup(name)); 2978ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2979ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2980ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (buffer == NULL) 2981ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = xmlStrndup(buf, len); 2982ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else { 2983ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = buffer; 2984ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project buffer = NULL; 2985ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project max = XML_MAX_NAMELEN; 2986ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2987ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2988ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2989ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (c == ':') { 2990ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project c = *cur; 2991ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *prefix = ret; 2992ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (c == 0) { 2993ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(xmlStrndup(BAD_CAST "", 0)); 2994ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2995ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project len = 0; 2996ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2997ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 2998ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Check that the first character is proper to start 2999ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * a new name 3000ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 3001ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (!(((c >= 0x61) && (c <= 0x7A)) || 3002ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ((c >= 0x41) && (c <= 0x5A)) || 3003ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (c == '_') || (c == ':'))) { 3004ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int l; 3005ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int first = CUR_SCHAR(cur, l); 3006ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3007ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (!IS_LETTER(first) && (first != '_')) { 3008ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErrMsgStr(ctxt, XML_NS_ERR_QNAME, 3009ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "Name %s is not XML Namespace compliant\n", 3010ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project name); 3011ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3012ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3013ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur++; 3014ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3015ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while ((c != 0) && (len < max)) { /* tested bigname2.xml */ 3016ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project buf[len++] = c; 3017ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project c = *cur++; 3018ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3019ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (len >= max) { 3020ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 3021ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Okay someone managed to make a huge name, so he's ready to pay 3022ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * for the processing speed. 3023ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 3024ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project max = len * 2; 302560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott 3026ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project buffer = (xmlChar *) xmlMallocAtomic(max * sizeof(xmlChar)); 3027ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (buffer == NULL) { 3028ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlErrMemory(ctxt, NULL); 3029ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 3030ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3031ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project memcpy(buffer, buf, len); 3032ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while (c != 0) { /* tested bigname2.xml */ 3033ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (len + 10 > max) { 3034ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar *tmp; 3035ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3036ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project max *= 2; 3037ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project tmp = (xmlChar *) xmlRealloc(buffer, 3038ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project max * sizeof(xmlChar)); 3039ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (tmp == NULL) { 3040ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlErrMemory(ctxt, NULL); 3041ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree(buffer); 3042ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 3043ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3044ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project buffer = tmp; 3045ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3046ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project buffer[len++] = c; 3047ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project c = *cur++; 3048ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3049ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project buffer[len] = 0; 3050ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 305160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott 3052ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (buffer == NULL) 3053ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = xmlStrndup(buf, len); 3054ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else { 3055ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = buffer; 3056ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3057ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3058ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3059ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(ret); 3060ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 3061ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3062ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/************************************************************************ 3063ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * * 3064ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * The parser itself * 3065ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Relates to http://www.w3.org/TR/REC-xml * 3066ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * * 3067ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ************************************************************************/ 3068ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 306960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott/************************************************************************ 307060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * * 307160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * Routines to parse Name, NCName and NmToken * 307260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * * 307360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ************************************************************************/ 3074df143a5041f03a22808b59c76698770b74692815Selim Gurun#ifdef DEBUG 3075df143a5041f03a22808b59c76698770b74692815Selim Gurunstatic unsigned long nbParseName = 0; 3076df143a5041f03a22808b59c76698770b74692815Selim Gurunstatic unsigned long nbParseNmToken = 0; 3077df143a5041f03a22808b59c76698770b74692815Selim Gurunstatic unsigned long nbParseNCName = 0; 3078df143a5041f03a22808b59c76698770b74692815Selim Gurunstatic unsigned long nbParseNCNameComplex = 0; 3079df143a5041f03a22808b59c76698770b74692815Selim Gurunstatic unsigned long nbParseNameComplex = 0; 3080df143a5041f03a22808b59c76698770b74692815Selim Gurunstatic unsigned long nbParseStringName = 0; 3081df143a5041f03a22808b59c76698770b74692815Selim Gurun#endif 3082df143a5041f03a22808b59c76698770b74692815Selim Gurun 308360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott/* 308460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * The two following functions are related to the change of accepted 308560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * characters for Name and NmToken in the Revision 5 of XML-1.0 308660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * They correspond to the modified production [4] and the new production [4a] 308760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * changes in that revision. Also note that the macros used for the 308860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * productions Letter, Digit, CombiningChar and Extender are not needed 308960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * anymore. 309060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * We still keep compatibility to pre-revision5 parsing semantic if the 309160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * new XML_PARSE_OLD10 option is given to the parser. 309260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott */ 309360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scottstatic int 309460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick ScottxmlIsNameStartChar(xmlParserCtxtPtr ctxt, int c) { 309560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if ((ctxt->options & XML_PARSE_OLD10) == 0) { 309660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott /* 309760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * Use the new checks of production [4] [4a] amd [5] of the 309860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * Update 5 of XML-1.0 309960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott */ 310060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if ((c != ' ') && (c != '>') && (c != '/') && /* accelerators */ 310160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott (((c >= 'a') && (c <= 'z')) || 310260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ((c >= 'A') && (c <= 'Z')) || 310360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott (c == '_') || (c == ':') || 310460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ((c >= 0xC0) && (c <= 0xD6)) || 310560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ((c >= 0xD8) && (c <= 0xF6)) || 310660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ((c >= 0xF8) && (c <= 0x2FF)) || 310760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ((c >= 0x370) && (c <= 0x37D)) || 310860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ((c >= 0x37F) && (c <= 0x1FFF)) || 310960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ((c >= 0x200C) && (c <= 0x200D)) || 311060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ((c >= 0x2070) && (c <= 0x218F)) || 311160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ((c >= 0x2C00) && (c <= 0x2FEF)) || 311260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ((c >= 0x3001) && (c <= 0xD7FF)) || 311360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ((c >= 0xF900) && (c <= 0xFDCF)) || 311460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ((c >= 0xFDF0) && (c <= 0xFFFD)) || 311560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ((c >= 0x10000) && (c <= 0xEFFFF)))) 311660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott return(1); 311760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } else { 311860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (IS_LETTER(c) || (c == '_') || (c == ':')) 311960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott return(1); 312060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } 312160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott return(0); 312260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott} 312360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott 312460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scottstatic int 312560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick ScottxmlIsNameChar(xmlParserCtxtPtr ctxt, int c) { 312660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if ((ctxt->options & XML_PARSE_OLD10) == 0) { 312760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott /* 312860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * Use the new checks of production [4] [4a] amd [5] of the 312960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * Update 5 of XML-1.0 313060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott */ 313160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if ((c != ' ') && (c != '>') && (c != '/') && /* accelerators */ 313260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott (((c >= 'a') && (c <= 'z')) || 313360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ((c >= 'A') && (c <= 'Z')) || 313460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ((c >= '0') && (c <= '9')) || /* !start */ 313560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott (c == '_') || (c == ':') || 313660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott (c == '-') || (c == '.') || (c == 0xB7) || /* !start */ 313760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ((c >= 0xC0) && (c <= 0xD6)) || 313860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ((c >= 0xD8) && (c <= 0xF6)) || 313960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ((c >= 0xF8) && (c <= 0x2FF)) || 314060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ((c >= 0x300) && (c <= 0x36F)) || /* !start */ 314160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ((c >= 0x370) && (c <= 0x37D)) || 314260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ((c >= 0x37F) && (c <= 0x1FFF)) || 314360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ((c >= 0x200C) && (c <= 0x200D)) || 314460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ((c >= 0x203F) && (c <= 0x2040)) || /* !start */ 314560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ((c >= 0x2070) && (c <= 0x218F)) || 314660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ((c >= 0x2C00) && (c <= 0x2FEF)) || 314760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ((c >= 0x3001) && (c <= 0xD7FF)) || 314860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ((c >= 0xF900) && (c <= 0xFDCF)) || 314960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ((c >= 0xFDF0) && (c <= 0xFFFD)) || 315060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ((c >= 0x10000) && (c <= 0xEFFFF)))) 315160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott return(1); 315260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } else { 315360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if ((IS_LETTER(c)) || (IS_DIGIT(c)) || 315460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott (c == '.') || (c == '-') || 315560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott (c == '_') || (c == ':') || 315660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott (IS_COMBINING(c)) || 315760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott (IS_EXTENDER(c))) 315860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott return(1); 315960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } 316060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott return(0); 316160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott} 316260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott 3163ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic xmlChar * xmlParseAttValueInternal(xmlParserCtxtPtr ctxt, 3164ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int *len, int *alloc, int normalize); 3165ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 316660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scottstatic const xmlChar * 316760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick ScottxmlParseNameComplex(xmlParserCtxtPtr ctxt) { 316860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott int len = 0, l; 316960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott int c; 317060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott int count = 0; 317160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott 3172df143a5041f03a22808b59c76698770b74692815Selim Gurun#ifdef DEBUG 317360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott nbParseNameComplex++; 3174df143a5041f03a22808b59c76698770b74692815Selim Gurun#endif 317560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott 317660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott /* 317760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * Handler for more complex cases 317860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott */ 317960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott GROW; 318060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott c = CUR_CHAR(l); 318160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if ((ctxt->options & XML_PARSE_OLD10) == 0) { 318260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott /* 318360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * Use the new checks of production [4] [4a] amd [5] of the 318460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * Update 5 of XML-1.0 318560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott */ 318660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if ((c == ' ') || (c == '>') || (c == '/') || /* accelerators */ 318760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott (!(((c >= 'a') && (c <= 'z')) || 318860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ((c >= 'A') && (c <= 'Z')) || 318960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott (c == '_') || (c == ':') || 319060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ((c >= 0xC0) && (c <= 0xD6)) || 319160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ((c >= 0xD8) && (c <= 0xF6)) || 319260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ((c >= 0xF8) && (c <= 0x2FF)) || 319360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ((c >= 0x370) && (c <= 0x37D)) || 319460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ((c >= 0x37F) && (c <= 0x1FFF)) || 319560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ((c >= 0x200C) && (c <= 0x200D)) || 319660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ((c >= 0x2070) && (c <= 0x218F)) || 319760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ((c >= 0x2C00) && (c <= 0x2FEF)) || 319860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ((c >= 0x3001) && (c <= 0xD7FF)) || 319960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ((c >= 0xF900) && (c <= 0xFDCF)) || 320060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ((c >= 0xFDF0) && (c <= 0xFFFD)) || 320160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ((c >= 0x10000) && (c <= 0xEFFFF))))) { 320260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott return(NULL); 320360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } 320460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott len += l; 320560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott NEXTL(l); 320660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott c = CUR_CHAR(l); 320760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott while ((c != ' ') && (c != '>') && (c != '/') && /* accelerators */ 320860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott (((c >= 'a') && (c <= 'z')) || 320960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ((c >= 'A') && (c <= 'Z')) || 321060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ((c >= '0') && (c <= '9')) || /* !start */ 321160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott (c == '_') || (c == ':') || 321260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott (c == '-') || (c == '.') || (c == 0xB7) || /* !start */ 321360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ((c >= 0xC0) && (c <= 0xD6)) || 321460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ((c >= 0xD8) && (c <= 0xF6)) || 321560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ((c >= 0xF8) && (c <= 0x2FF)) || 321660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ((c >= 0x300) && (c <= 0x36F)) || /* !start */ 321760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ((c >= 0x370) && (c <= 0x37D)) || 321860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ((c >= 0x37F) && (c <= 0x1FFF)) || 321960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ((c >= 0x200C) && (c <= 0x200D)) || 322060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ((c >= 0x203F) && (c <= 0x2040)) || /* !start */ 322160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ((c >= 0x2070) && (c <= 0x218F)) || 322260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ((c >= 0x2C00) && (c <= 0x2FEF)) || 322360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ((c >= 0x3001) && (c <= 0xD7FF)) || 322460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ((c >= 0xF900) && (c <= 0xFDCF)) || 322560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ((c >= 0xFDF0) && (c <= 0xFFFD)) || 322660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ((c >= 0x10000) && (c <= 0xEFFFF)) 322760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott )) { 322860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (count++ > 100) { 322960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott count = 0; 323060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott GROW; 323160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } 323260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott len += l; 323360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott NEXTL(l); 323460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott c = CUR_CHAR(l); 323560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } 323660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } else { 323760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if ((c == ' ') || (c == '>') || (c == '/') || /* accelerators */ 323860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott (!IS_LETTER(c) && (c != '_') && 323960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott (c != ':'))) { 324060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott return(NULL); 324160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } 324260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott len += l; 324360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott NEXTL(l); 324460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott c = CUR_CHAR(l); 324560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott 324660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott while ((c != ' ') && (c != '>') && (c != '/') && /* test bigname.xml */ 324760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ((IS_LETTER(c)) || (IS_DIGIT(c)) || 324860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott (c == '.') || (c == '-') || 324960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott (c == '_') || (c == ':') || 325060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott (IS_COMBINING(c)) || 325160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott (IS_EXTENDER(c)))) { 325260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (count++ > 100) { 325360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott count = 0; 325460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott GROW; 325560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } 325660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott len += l; 325760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott NEXTL(l); 325860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott c = CUR_CHAR(l); 325960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } 326060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } 326160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if ((*ctxt->input->cur == '\n') && (ctxt->input->cur[-1] == '\r')) 326260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott return(xmlDictLookup(ctxt->dict, ctxt->input->cur - (len + 1), len)); 326360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott return(xmlDictLookup(ctxt->dict, ctxt->input->cur - len, len)); 326460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott} 326560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott 3266ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 3267ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlParseName: 3268ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctxt: an XML parser context 3269ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 3270ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * parse an XML name. 3271ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 3272ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [4] NameChar ::= Letter | Digit | '.' | '-' | '_' | ':' | 3273ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * CombiningChar | Extender 3274ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 3275ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [5] Name ::= (Letter | '_' | ':') (NameChar)* 3276ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 3277ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [6] Names ::= Name (#x20 Name)* 3278ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 3279ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the Name parsed or NULL 3280ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 3281ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3282ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectconst xmlChar * 3283ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlParseName(xmlParserCtxtPtr ctxt) { 3284ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar *in; 3285ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar *ret; 3286ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int count = 0; 3287ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3288ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project GROW; 3289ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3290df143a5041f03a22808b59c76698770b74692815Selim Gurun#ifdef DEBUG 329160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott nbParseName++; 3292df143a5041f03a22808b59c76698770b74692815Selim Gurun#endif 329360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott 3294ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 3295ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Accelerator for simple ASCII names 3296ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 3297ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project in = ctxt->input->cur; 3298ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (((*in >= 0x61) && (*in <= 0x7A)) || 3299ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ((*in >= 0x41) && (*in <= 0x5A)) || 3300ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (*in == '_') || (*in == ':')) { 3301ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project in++; 3302ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while (((*in >= 0x61) && (*in <= 0x7A)) || 3303ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ((*in >= 0x41) && (*in <= 0x5A)) || 3304ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ((*in >= 0x30) && (*in <= 0x39)) || 3305ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (*in == '_') || (*in == '-') || 3306ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (*in == ':') || (*in == '.')) 3307ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project in++; 3308ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((*in > 0) && (*in < 0x80)) { 3309ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project count = in - ctxt->input->cur; 3310ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = xmlDictLookup(ctxt->dict, ctxt->input->cur, count); 3311ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->input->cur = in; 3312ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->nbChars += count; 3313ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->input->col += count; 3314ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ret == NULL) 3315ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlErrMemory(ctxt, NULL); 3316ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(ret); 3317ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3318ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 331960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott /* accelerator for special cases */ 3320ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(xmlParseNameComplex(ctxt)); 3321ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 3322ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3323ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic const xmlChar * 332460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick ScottxmlParseNCNameComplex(xmlParserCtxtPtr ctxt) { 3325ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int len = 0, l; 3326ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int c; 3327ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int count = 0; 3328ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3329df143a5041f03a22808b59c76698770b74692815Selim Gurun#ifdef DEBUG 333060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott nbParseNCNameComplex++; 3331df143a5041f03a22808b59c76698770b74692815Selim Gurun#endif 333260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott 3333ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 3334ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Handler for more complex cases 3335ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 3336ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project GROW; 3337ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project c = CUR_CHAR(l); 3338ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((c == ' ') || (c == '>') || (c == '/') || /* accelerators */ 333960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott (!xmlIsNameStartChar(ctxt, c) || (c == ':'))) { 3340ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 3341ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3342ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3343ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while ((c != ' ') && (c != '>') && (c != '/') && /* test bigname.xml */ 334460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott (xmlIsNameChar(ctxt, c) && (c != ':'))) { 3345ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (count++ > 100) { 3346ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project count = 0; 3347ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project GROW; 3348ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3349ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project len += l; 3350ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project NEXTL(l); 3351ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project c = CUR_CHAR(l); 3352ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3353ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(xmlDictLookup(ctxt->dict, ctxt->input->cur - len, len)); 3354ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 3355ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3356ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 335760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * xmlParseNCName: 335860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * @ctxt: an XML parser context 335960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * @len: lenght of the string parsed 336060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * 336160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * parse an XML name. 336260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * 336360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * [4NS] NCNameChar ::= Letter | Digit | '.' | '-' | '_' | 336460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * CombiningChar | Extender 336560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * 336660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * [5NS] NCName ::= (Letter | '_') (NCNameChar)* 336760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * 336860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * Returns the Name parsed or NULL 336960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott */ 337060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott 337160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scottstatic const xmlChar * 337260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick ScottxmlParseNCName(xmlParserCtxtPtr ctxt) { 337360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott const xmlChar *in; 337460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott const xmlChar *ret; 337560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott int count = 0; 337660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott 3377df143a5041f03a22808b59c76698770b74692815Selim Gurun#ifdef DEBUG 337860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott nbParseNCName++; 3379df143a5041f03a22808b59c76698770b74692815Selim Gurun#endif 338060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott 338160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott /* 338260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * Accelerator for simple ASCII names 338360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott */ 338460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott in = ctxt->input->cur; 338560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (((*in >= 0x61) && (*in <= 0x7A)) || 338660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ((*in >= 0x41) && (*in <= 0x5A)) || 338760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott (*in == '_')) { 338860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott in++; 338960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott while (((*in >= 0x61) && (*in <= 0x7A)) || 339060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ((*in >= 0x41) && (*in <= 0x5A)) || 339160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ((*in >= 0x30) && (*in <= 0x39)) || 339260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott (*in == '_') || (*in == '-') || 339360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott (*in == '.')) 339460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott in++; 339560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if ((*in > 0) && (*in < 0x80)) { 339660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott count = in - ctxt->input->cur; 339760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ret = xmlDictLookup(ctxt->dict, ctxt->input->cur, count); 339860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ctxt->input->cur = in; 339960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ctxt->nbChars += count; 340060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ctxt->input->col += count; 340160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (ret == NULL) { 340260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott xmlErrMemory(ctxt, NULL); 340360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } 340460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott return(ret); 340560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } 340660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } 340760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott return(xmlParseNCNameComplex(ctxt)); 340860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott} 340960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott 341060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott/** 341160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * xmlParseNameAndCompare: 341260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * @ctxt: an XML parser context 341360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * 341460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * parse an XML name and compares for match 341560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * (specialized for endtag parsing) 341660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * 341760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * Returns NULL for an illegal name, (xmlChar*) 1 for success 341860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * and the name for mismatch 341960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott */ 342060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott 342160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scottstatic const xmlChar * 342260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick ScottxmlParseNameAndCompare(xmlParserCtxtPtr ctxt, xmlChar const *other) { 342360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott register const xmlChar *cmp = other; 342460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott register const xmlChar *in; 342560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott const xmlChar *ret; 342660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott 342760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott GROW; 342860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott 342960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott in = ctxt->input->cur; 343060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott while (*in != 0 && *in == *cmp) { 343160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ++in; 343260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ++cmp; 343360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ctxt->input->col++; 343460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } 343560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (*cmp == 0 && (*in == '>' || IS_BLANK_CH (*in))) { 343660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott /* success */ 343760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ctxt->input->cur = in; 343860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott return (const xmlChar*) 1; 343960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } 344060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott /* failure (or end of input buffer), check with full function */ 344160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ret = xmlParseName (ctxt); 344260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott /* strings coming from the dictionnary direct compare possible */ 344360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (ret == other) { 344460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott return (const xmlChar*) 1; 344560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } 344660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott return ret; 344760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott} 344860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott 344960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott/** 3450ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlParseStringName: 3451ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctxt: an XML parser context 3452ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @str: a pointer to the string pointer (IN/OUT) 3453ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 3454ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * parse an XML name. 3455ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 3456ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [4] NameChar ::= Letter | Digit | '.' | '-' | '_' | ':' | 3457ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * CombiningChar | Extender 3458ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 3459ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [5] Name ::= (Letter | '_' | ':') (NameChar)* 3460ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 3461ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [6] Names ::= Name (#x20 Name)* 3462ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 3463ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the Name parsed or NULL. The @str pointer 3464ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * is updated to the current location in the string. 3465ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 3466ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3467ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic xmlChar * 3468ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlParseStringName(xmlParserCtxtPtr ctxt, const xmlChar** str) { 3469ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar buf[XML_MAX_NAMELEN + 5]; 3470ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar *cur = *str; 3471ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int len = 0, l; 3472ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int c; 3473ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3474df143a5041f03a22808b59c76698770b74692815Selim Gurun#ifdef DEBUG 347560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott nbParseStringName++; 3476df143a5041f03a22808b59c76698770b74692815Selim Gurun#endif 347760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott 3478ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project c = CUR_SCHAR(cur, l); 347960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (!xmlIsNameStartChar(ctxt, c)) { 3480ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 3481ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3482ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 348360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott COPY_BUF(l,buf,len,c); 348460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott cur += l; 348560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott c = CUR_SCHAR(cur, l); 348660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott while (xmlIsNameChar(ctxt, c)) { 3487ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project COPY_BUF(l,buf,len,c); 3488ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur += l; 3489ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project c = CUR_SCHAR(cur, l); 3490ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (len >= XML_MAX_NAMELEN) { /* test bigentname.xml */ 3491ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 3492ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Okay someone managed to make a huge name, so he's ready to pay 3493ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * for the processing speed. 3494ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 3495ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar *buffer; 3496ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int max = len * 2; 349760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott 3498ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project buffer = (xmlChar *) xmlMallocAtomic(max * sizeof(xmlChar)); 3499ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (buffer == NULL) { 3500ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlErrMemory(ctxt, NULL); 3501ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 3502ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3503ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project memcpy(buffer, buf, len); 350460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott while (xmlIsNameChar(ctxt, c)) { 3505ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (len + 10 > max) { 3506ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar *tmp; 3507ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project max *= 2; 3508ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project tmp = (xmlChar *) xmlRealloc(buffer, 3509ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project max * sizeof(xmlChar)); 3510ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (tmp == NULL) { 3511ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlErrMemory(ctxt, NULL); 3512ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree(buffer); 3513ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 3514ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3515ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project buffer = tmp; 3516ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3517ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project COPY_BUF(l,buffer,len,c); 3518ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur += l; 3519ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project c = CUR_SCHAR(cur, l); 3520ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3521ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project buffer[len] = 0; 3522ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *str = cur; 3523ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(buffer); 3524ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3525ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3526ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *str = cur; 3527ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(xmlStrndup(buf, len)); 3528ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 3529ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3530ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 3531ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlParseNmtoken: 3532ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctxt: an XML parser context 353360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * 3534ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * parse an XML Nmtoken. 3535ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 3536ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [7] Nmtoken ::= (NameChar)+ 3537ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 3538ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [8] Nmtokens ::= Nmtoken (#x20 Nmtoken)* 3539ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 3540ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the Nmtoken parsed or NULL 3541ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 3542ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3543ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlChar * 3544ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlParseNmtoken(xmlParserCtxtPtr ctxt) { 3545ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar buf[XML_MAX_NAMELEN + 5]; 3546ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int len = 0, l; 3547ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int c; 3548ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int count = 0; 3549ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3550df143a5041f03a22808b59c76698770b74692815Selim Gurun#ifdef DEBUG 355160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott nbParseNmToken++; 3552df143a5041f03a22808b59c76698770b74692815Selim Gurun#endif 355360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott 3554ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project GROW; 3555ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project c = CUR_CHAR(l); 3556ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 355760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott while (xmlIsNameChar(ctxt, c)) { 3558ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (count++ > 100) { 3559ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project count = 0; 3560ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project GROW; 3561ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3562ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project COPY_BUF(l,buf,len,c); 3563ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project NEXTL(l); 3564ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project c = CUR_CHAR(l); 3565ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (len >= XML_MAX_NAMELEN) { 3566ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 3567ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Okay someone managed to make a huge token, so he's ready to pay 3568ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * for the processing speed. 3569ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 3570ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar *buffer; 3571ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int max = len * 2; 357260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott 3573ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project buffer = (xmlChar *) xmlMallocAtomic(max * sizeof(xmlChar)); 3574ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (buffer == NULL) { 3575ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlErrMemory(ctxt, NULL); 3576ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 3577ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3578ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project memcpy(buffer, buf, len); 357960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott while (xmlIsNameChar(ctxt, c)) { 3580ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (count++ > 100) { 3581ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project count = 0; 3582ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project GROW; 3583ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3584ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (len + 10 > max) { 3585ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar *tmp; 3586ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3587ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project max *= 2; 3588ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project tmp = (xmlChar *) xmlRealloc(buffer, 3589ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project max * sizeof(xmlChar)); 3590ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (tmp == NULL) { 3591ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlErrMemory(ctxt, NULL); 3592ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree(buffer); 3593ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 3594ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3595ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project buffer = tmp; 3596ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3597ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project COPY_BUF(l,buffer,len,c); 3598ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project NEXTL(l); 3599ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project c = CUR_CHAR(l); 3600ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3601ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project buffer[len] = 0; 3602ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(buffer); 3603ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3604ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3605ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (len == 0) 3606ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 3607ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(xmlStrndup(buf, len)); 3608ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 3609ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3610ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 3611ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlParseEntityValue: 3612ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctxt: an XML parser context 3613ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @orig: if non-NULL store a copy of the original entity value 3614ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 3615ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * parse a value for ENTITY declarations 3616ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 3617ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [9] EntityValue ::= '"' ([^%&"] | PEReference | Reference)* '"' | 3618ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * "'" ([^%&'] | PEReference | Reference)* "'" 3619ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 3620ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the EntityValue parsed with reference substituted or NULL 3621ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 3622ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3623ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlChar * 3624ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlParseEntityValue(xmlParserCtxtPtr ctxt, xmlChar **orig) { 3625ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar *buf = NULL; 3626ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int len = 0; 3627ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int size = XML_PARSER_BUFFER_SIZE; 3628ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int c, l; 3629ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar stop; 3630ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar *ret = NULL; 3631ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar *cur = NULL; 3632ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParserInputPtr input; 3633ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3634ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (RAW == '"') stop = '"'; 3635ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else if (RAW == '\'') stop = '\''; 3636ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else { 3637ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErr(ctxt, XML_ERR_ENTITY_NOT_STARTED, NULL); 3638ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 3639ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3640ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project buf = (xmlChar *) xmlMallocAtomic(size * sizeof(xmlChar)); 3641ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (buf == NULL) { 3642ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlErrMemory(ctxt, NULL); 3643ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 3644ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3645ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3646ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 3647ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * The content of the entity definition is copied in a buffer. 3648ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 3649ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3650ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->instate = XML_PARSER_ENTITY_VALUE; 3651ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project input = ctxt->input; 3652ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project GROW; 3653ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project NEXT; 3654ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project c = CUR_CHAR(l); 3655ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 3656ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * NOTE: 4.4.5 Included in Literal 3657ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * When a parameter entity reference appears in a literal entity 3658ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * value, ... a single or double quote character in the replacement 3659ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * text is always treated as a normal data character and will not 3660ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * terminate the literal. 3661ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * In practice it means we stop the loop only when back at parsing 3662ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * the initial entity and the quote is found 3663ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 3664ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while ((IS_CHAR(c)) && ((c != stop) || /* checked */ 3665ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (ctxt->input != input))) { 3666ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (len + 5 >= size) { 3667ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar *tmp; 3668ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3669ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project size *= 2; 3670ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project tmp = (xmlChar *) xmlRealloc(buf, size * sizeof(xmlChar)); 3671ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (tmp == NULL) { 3672ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlErrMemory(ctxt, NULL); 3673ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree(buf); 3674ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 3675ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3676ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project buf = tmp; 3677ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3678ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project COPY_BUF(l,buf,len,c); 3679ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project NEXTL(l); 3680ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 3681ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Pop-up of finished entities. 3682ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 3683ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while ((RAW == 0) && (ctxt->inputNr > 1)) /* non input consuming */ 3684ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlPopInput(ctxt); 3685ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3686ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project GROW; 3687ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project c = CUR_CHAR(l); 3688ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (c == 0) { 3689ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project GROW; 3690ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project c = CUR_CHAR(l); 3691ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3692ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3693ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project buf[len] = 0; 3694ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3695ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 3696ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Raise problem w.r.t. '&' and '%' being used in non-entities 3697ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * reference constructs. Note Charref will be handled in 3698ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlStringDecodeEntities() 3699ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 3700ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur = buf; 3701ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while (*cur != 0) { /* non input consuming */ 3702ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((*cur == '%') || ((*cur == '&') && (cur[1] != '#'))) { 3703ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar *name; 3704ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar tmp = *cur; 3705ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3706ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur++; 3707ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project name = xmlParseStringName(ctxt, &cur); 3708ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((name == NULL) || (*cur != ';')) { 3709ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErrMsgInt(ctxt, XML_ERR_ENTITY_CHAR_ERROR, 3710ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "EntityValue: '%c' forbidden except for entities references\n", 3711ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project tmp); 3712ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3713ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((tmp == '%') && (ctxt->inSubset == 1) && 3714ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (ctxt->inputNr == 1)) { 3715ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErr(ctxt, XML_ERR_ENTITY_PE_INTERNAL, NULL); 3716ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3717ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (name != NULL) 3718ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree(name); 3719ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (*cur == 0) 3720ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 3721ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3722ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur++; 3723ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3724ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3725ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 3726ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Then PEReference entities are substituted. 3727ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 3728ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (c != stop) { 3729ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErr(ctxt, XML_ERR_ENTITY_NOT_FINISHED, NULL); 3730ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree(buf); 3731ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 3732ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project NEXT; 3733ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 3734ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * NOTE: 4.4.7 Bypassed 3735ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * When a general entity reference appears in the EntityValue in 3736ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * an entity declaration, it is bypassed and left as is. 3737ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * so XML_SUBSTITUTE_REF is not set here. 3738ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 3739ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = xmlStringDecodeEntities(ctxt, buf, XML_SUBSTITUTE_PEREF, 3740ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 0, 0, 0); 3741ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (orig != NULL) 3742ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *orig = buf; 3743ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else 3744ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree(buf); 3745ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3746ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3747ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(ret); 3748ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 3749ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3750ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 3751ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlParseAttValueComplex: 3752ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctxt: an XML parser context 3753ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @len: the resulting attribute len 3754ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @normalize: wether to apply the inner normalization 3755ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 3756ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * parse a value for an attribute, this is the fallback function 3757ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * of xmlParseAttValue() when the attribute parsing requires handling 3758ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * of non-ASCII characters, or normalization compaction. 3759ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 3760ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the AttValue parsed or NULL. The value has to be freed by the caller. 3761ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 3762ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic xmlChar * 3763ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlParseAttValueComplex(xmlParserCtxtPtr ctxt, int *attlen, int normalize) { 3764ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar limit = 0; 3765ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar *buf = NULL; 376660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott xmlChar *rep = NULL; 3767ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int len = 0; 3768ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int buf_size = 0; 3769ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int c, l, in_space = 0; 3770ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar *current = NULL; 3771ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlEntityPtr ent; 3772ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3773ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (NXT(0) == '"') { 3774ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->instate = XML_PARSER_ATTRIBUTE_VALUE; 3775ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project limit = '"'; 3776ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project NEXT; 3777ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if (NXT(0) == '\'') { 3778ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project limit = '\''; 3779ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->instate = XML_PARSER_ATTRIBUTE_VALUE; 3780ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project NEXT; 3781ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 3782ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErr(ctxt, XML_ERR_ATTRIBUTE_NOT_STARTED, NULL); 3783ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 3784ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 378560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott 3786ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 3787ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * allocate a translation buffer. 3788ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 3789ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project buf_size = XML_PARSER_BUFFER_SIZE; 3790ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project buf = (xmlChar *) xmlMallocAtomic(buf_size * sizeof(xmlChar)); 3791ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (buf == NULL) goto mem_error; 3792ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3793ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 3794ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * OK loop until we reach one of the ending char or a size limit. 3795ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 3796ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project c = CUR_CHAR(l); 3797ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while ((NXT(0) != limit) && /* checked */ 3798ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (IS_CHAR(c)) && (c != '<')) { 3799ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (c == 0) break; 3800ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (c == '&') { 3801ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project in_space = 0; 3802ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (NXT(1) == '#') { 3803ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int val = xmlParseCharRef(ctxt); 3804ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3805ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (val == '&') { 3806ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt->replaceEntities) { 3807ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (len > buf_size - 10) { 380860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott growBuffer(buf, 10); 3809ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3810ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project buf[len++] = '&'; 3811ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 3812ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 3813ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * The reparsing will be done in xmlStringGetNodeList() 3814ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * called by the attribute() function in SAX.c 3815ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 3816ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (len > buf_size - 10) { 381760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott growBuffer(buf, 10); 3818ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3819ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project buf[len++] = '&'; 3820ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project buf[len++] = '#'; 3821ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project buf[len++] = '3'; 3822ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project buf[len++] = '8'; 3823ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project buf[len++] = ';'; 3824ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 382560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } else if (val != 0) { 3826ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (len > buf_size - 10) { 382760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott growBuffer(buf, 10); 3828ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3829ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project len += xmlCopyChar(0, &buf[len], val); 3830ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3831ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 3832ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ent = xmlParseEntityRef(ctxt); 383360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ctxt->nbentities++; 383460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (ent != NULL) 383560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ctxt->nbentities += ent->owner; 3836ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ent != NULL) && 3837ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (ent->etype == XML_INTERNAL_PREDEFINED_ENTITY)) { 3838ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (len > buf_size - 10) { 383960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott growBuffer(buf, 10); 3840ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3841ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ctxt->replaceEntities == 0) && 3842ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (ent->content[0] == '&')) { 3843ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project buf[len++] = '&'; 3844ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project buf[len++] = '#'; 3845ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project buf[len++] = '3'; 3846ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project buf[len++] = '8'; 3847ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project buf[len++] = ';'; 3848ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 3849ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project buf[len++] = ent->content[0]; 3850ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3851ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if ((ent != NULL) && 3852ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (ctxt->replaceEntities != 0)) { 3853ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ent->etype != XML_INTERNAL_PREDEFINED_ENTITY) { 3854ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project rep = xmlStringDecodeEntities(ctxt, ent->content, 3855ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project XML_SUBSTITUTE_REF, 3856ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 0, 0, 0); 3857ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (rep != NULL) { 3858ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project current = rep; 3859ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while (*current != 0) { /* non input consuming */ 3860df143a5041f03a22808b59c76698770b74692815Selim Gurun if ((*current == 0xD) || (*current == 0xA) || 3861df143a5041f03a22808b59c76698770b74692815Selim Gurun (*current == 0x9)) { 3862df143a5041f03a22808b59c76698770b74692815Selim Gurun buf[len++] = 0x20; 3863df143a5041f03a22808b59c76698770b74692815Selim Gurun current++; 3864df143a5041f03a22808b59c76698770b74692815Selim Gurun } else 3865df143a5041f03a22808b59c76698770b74692815Selim Gurun buf[len++] = *current++; 3866ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (len > buf_size - 10) { 386760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott growBuffer(buf, 10); 3868ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3869ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3870ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree(rep); 387160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott rep = NULL; 3872ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3873ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 3874ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (len > buf_size - 10) { 387560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott growBuffer(buf, 10); 3876ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3877ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ent->content != NULL) 3878ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project buf[len++] = ent->content[0]; 3879ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3880ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if (ent != NULL) { 3881ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int i = xmlStrlen(ent->name); 3882ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar *cur = ent->name; 3883ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3884ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 3885ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * This may look absurd but is needed to detect 3886ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * entities problems 3887ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 3888ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ent->etype != XML_INTERNAL_PREDEFINED_ENTITY) && 3889ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (ent->content != NULL)) { 3890ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project rep = xmlStringDecodeEntities(ctxt, ent->content, 389160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott XML_SUBSTITUTE_REF, 0, 0, 0); 389260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (rep != NULL) { 3893ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree(rep); 389460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott rep = NULL; 389560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } 3896ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3897ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3898ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 3899ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Just output the reference 3900ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 3901ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project buf[len++] = '&'; 390260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott while (len > buf_size - i - 10) { 390360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott growBuffer(buf, i + 10); 3904ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3905ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project for (;i > 0;i--) 3906ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project buf[len++] = *cur++; 3907ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project buf[len++] = ';'; 3908ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3909ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3910ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 3911ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((c == 0x20) || (c == 0xD) || (c == 0xA) || (c == 0x9)) { 3912ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((len != 0) || (!normalize)) { 3913ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((!normalize) || (!in_space)) { 3914ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project COPY_BUF(l,buf,len,0x20); 391560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott while (len > buf_size - 10) { 391660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott growBuffer(buf, 10); 3917ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3918ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3919ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project in_space = 1; 3920ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3921ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 3922ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project in_space = 0; 3923ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project COPY_BUF(l,buf,len,c); 3924ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (len > buf_size - 10) { 392560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott growBuffer(buf, 10); 3926ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3927ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3928ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project NEXTL(l); 3929ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3930ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project GROW; 3931ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project c = CUR_CHAR(l); 3932ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3933ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((in_space) && (normalize)) { 3934ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while (buf[len - 1] == 0x20) len--; 3935ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3936ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project buf[len] = 0; 3937ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (RAW == '<') { 3938ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErr(ctxt, XML_ERR_LT_IN_ATTRIBUTE, NULL); 3939ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if (RAW != limit) { 3940ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((c != 0) && (!IS_CHAR(c))) { 3941ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErrMsg(ctxt, XML_ERR_INVALID_CHAR, 3942ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "invalid character in attribute value\n"); 3943ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 3944ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErrMsg(ctxt, XML_ERR_ATTRIBUTE_NOT_FINISHED, 3945ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "AttValue: ' expected\n"); 3946ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3947ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else 3948ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project NEXT; 3949ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (attlen != NULL) *attlen = len; 3950ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(buf); 3951ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3952ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectmem_error: 3953ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlErrMemory(ctxt, NULL); 395460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (buf != NULL) 395560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott xmlFree(buf); 395660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (rep != NULL) 395760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott xmlFree(rep); 3958ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 3959ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 3960ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3961ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 3962ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlParseAttValue: 3963ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctxt: an XML parser context 3964ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 3965ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * parse a value for an attribute 3966ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Note: the parser won't do substitution of entities here, this 3967ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * will be handled later in xmlStringGetNodeList 3968ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 3969ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [10] AttValue ::= '"' ([^<&"] | Reference)* '"' | 3970ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * "'" ([^<&'] | Reference)* "'" 3971ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 3972ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 3.3.3 Attribute-Value Normalization: 3973ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Before the value of an attribute is passed to the application or 3974ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * checked for validity, the XML processor must normalize it as follows: 3975ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * - a character reference is processed by appending the referenced 3976ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * character to the attribute value 3977ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * - an entity reference is processed by recursively processing the 3978ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * replacement text of the entity 3979ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * - a whitespace character (#x20, #xD, #xA, #x9) is processed by 3980ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * appending #x20 to the normalized value, except that only a single 3981ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * #x20 is appended for a "#xD#xA" sequence that is part of an external 3982ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * parsed entity or the literal entity value of an internal parsed entity 3983ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * - other characters are processed by appending them to the normalized value 3984ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * If the declared value is not CDATA, then the XML processor must further 3985ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * process the normalized attribute value by discarding any leading and 3986ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * trailing space (#x20) characters, and by replacing sequences of space 3987ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * (#x20) characters by a single space (#x20) character. 3988ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * All attributes for which no declaration has been read should be treated 3989ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * by a non-validating parser as if declared CDATA. 3990ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 3991ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the AttValue parsed or NULL. The value has to be freed by the caller. 3992ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 3993ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3994ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3995ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlChar * 3996ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlParseAttValue(xmlParserCtxtPtr ctxt) { 3997ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ctxt == NULL) || (ctxt->input == NULL)) return(NULL); 3998ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(xmlParseAttValueInternal(ctxt, NULL, NULL, 0)); 3999ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 4000ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 4001ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 4002ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlParseSystemLiteral: 4003ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctxt: an XML parser context 4004ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 4005ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * parse an XML Literal 4006ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 4007ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [11] SystemLiteral ::= ('"' [^"]* '"') | ("'" [^']* "'") 4008ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 4009ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the SystemLiteral parsed or NULL 4010ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 4011ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 4012ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlChar * 4013ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlParseSystemLiteral(xmlParserCtxtPtr ctxt) { 4014ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar *buf = NULL; 4015ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int len = 0; 4016ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int size = XML_PARSER_BUFFER_SIZE; 4017ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int cur, l; 4018ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar stop; 4019ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int state = ctxt->instate; 4020ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int count = 0; 4021ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 4022ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SHRINK; 4023ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (RAW == '"') { 4024ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project NEXT; 4025ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project stop = '"'; 4026ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if (RAW == '\'') { 4027ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project NEXT; 4028ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project stop = '\''; 4029ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 4030ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErr(ctxt, XML_ERR_LITERAL_NOT_STARTED, NULL); 4031ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 4032ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 4033ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 4034ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project buf = (xmlChar *) xmlMallocAtomic(size * sizeof(xmlChar)); 4035ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (buf == NULL) { 4036ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlErrMemory(ctxt, NULL); 4037ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 4038ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 4039ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->instate = XML_PARSER_SYSTEM_LITERAL; 4040ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur = CUR_CHAR(l); 4041ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while ((IS_CHAR(cur)) && (cur != stop)) { /* checked */ 4042ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (len + 5 >= size) { 4043ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar *tmp; 4044ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 4045ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project size *= 2; 4046ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project tmp = (xmlChar *) xmlRealloc(buf, size * sizeof(xmlChar)); 4047ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (tmp == NULL) { 4048ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree(buf); 4049ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlErrMemory(ctxt, NULL); 4050ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->instate = (xmlParserInputState) state; 4051ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 4052ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 4053ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project buf = tmp; 4054ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 4055ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project count++; 4056ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (count > 50) { 4057ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project GROW; 4058ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project count = 0; 4059ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 4060ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project COPY_BUF(l,buf,len,cur); 4061ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project NEXTL(l); 4062ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur = CUR_CHAR(l); 4063ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (cur == 0) { 4064ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project GROW; 4065ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SHRINK; 4066ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur = CUR_CHAR(l); 4067ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 4068ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 4069ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project buf[len] = 0; 4070ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->instate = (xmlParserInputState) state; 4071ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (!IS_CHAR(cur)) { 4072ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErr(ctxt, XML_ERR_LITERAL_NOT_FINISHED, NULL); 4073ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 4074ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project NEXT; 4075ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 4076ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(buf); 4077ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 4078ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 4079ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 4080ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlParsePubidLiteral: 4081ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctxt: an XML parser context 4082ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 4083ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * parse an XML public literal 4084ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 4085ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [12] PubidLiteral ::= '"' PubidChar* '"' | "'" (PubidChar - "'")* "'" 4086ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 4087ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the PubidLiteral parsed or NULL. 4088ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 4089ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 4090ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlChar * 4091ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlParsePubidLiteral(xmlParserCtxtPtr ctxt) { 4092ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar *buf = NULL; 4093ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int len = 0; 4094ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int size = XML_PARSER_BUFFER_SIZE; 4095ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar cur; 4096ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar stop; 4097ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int count = 0; 4098ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParserInputState oldstate = ctxt->instate; 4099ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 4100ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SHRINK; 4101ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (RAW == '"') { 4102ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project NEXT; 4103ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project stop = '"'; 4104ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if (RAW == '\'') { 4105ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project NEXT; 4106ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project stop = '\''; 4107ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 4108ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErr(ctxt, XML_ERR_LITERAL_NOT_STARTED, NULL); 4109ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 4110ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 4111ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project buf = (xmlChar *) xmlMallocAtomic(size * sizeof(xmlChar)); 4112ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (buf == NULL) { 4113ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlErrMemory(ctxt, NULL); 4114ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 4115ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 4116ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->instate = XML_PARSER_PUBLIC_LITERAL; 4117ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur = CUR; 4118ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while ((IS_PUBIDCHAR_CH(cur)) && (cur != stop)) { /* checked */ 4119ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (len + 1 >= size) { 4120ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar *tmp; 4121ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 4122ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project size *= 2; 4123ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project tmp = (xmlChar *) xmlRealloc(buf, size * sizeof(xmlChar)); 4124ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (tmp == NULL) { 4125ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlErrMemory(ctxt, NULL); 4126ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree(buf); 4127ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 4128ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 4129ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project buf = tmp; 4130ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 4131ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project buf[len++] = cur; 4132ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project count++; 4133ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (count > 50) { 4134ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project GROW; 4135ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project count = 0; 4136ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 4137ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project NEXT; 4138ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur = CUR; 4139ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (cur == 0) { 4140ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project GROW; 4141ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SHRINK; 4142ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur = CUR; 4143ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 4144ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 4145ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project buf[len] = 0; 4146ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (cur != stop) { 4147ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErr(ctxt, XML_ERR_LITERAL_NOT_FINISHED, NULL); 4148ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 4149ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project NEXT; 4150ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 4151ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->instate = oldstate; 4152ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(buf); 4153ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 4154ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 4155df143a5041f03a22808b59c76698770b74692815Selim Gurunstatic void xmlParseCharDataComplex(xmlParserCtxtPtr ctxt, int cdata); 4156ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 4157ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/* 4158ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * used for the test in the inner loop of the char data testing 4159ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 4160ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic const unsigned char test_char_data[256] = { 4161ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 4162ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9, CR/LF separated */ 4163ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 4164ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 4165ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x00, 0x27, /* & */ 4166ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F, 4167ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 4168ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 0x38, 0x39, 0x3A, 0x3B, 0x00, 0x3D, 0x3E, 0x3F, /* < */ 4169ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 4170ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F, 4171ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 4172ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 0x58, 0x59, 0x5A, 0x5B, 0x5C, 0x00, 0x5E, 0x5F, /* ] */ 4173ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 4174ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, 4175ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 4176ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 0x78, 0x79, 0x7A, 0x7B, 0x7C, 0x7D, 0x7E, 0x7F, 4177ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* non-ascii */ 4178ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 4179ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 4180ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 4181ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 4182ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 4183ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 4184ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 4185ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 4186ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 4187ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 4188ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 4189ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 4190ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 4191ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 4192ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 4193ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project}; 4194ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 4195ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 4196ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlParseCharData: 4197ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctxt: an XML parser context 4198ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @cdata: int indicating whether we are within a CDATA section 4199ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 4200ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * parse a CharData section. 4201ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * if we are within a CDATA section ']]>' marks an end of section. 4202ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 4203ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * The right angle bracket (>) may be represented using the string ">", 4204ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * and must, for compatibility, be escaped using ">" or a character 4205ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * reference when it appears in the string "]]>" in content, when that 4206ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * string is not marking the end of a CDATA section. 4207ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 4208ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [14] CharData ::= [^<&]* - ([^<&]* ']]>' [^<&]*) 4209ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 4210ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 4211ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectvoid 4212ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlParseCharData(xmlParserCtxtPtr ctxt, int cdata) { 4213ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar *in; 4214ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int nbchar = 0; 4215ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int line = ctxt->input->line; 4216ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int col = ctxt->input->col; 4217ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int ccol; 4218ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 4219ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SHRINK; 4220ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project GROW; 4221ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 4222ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Accelerated common case where input don't need to be 4223ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * modified before passing it to the handler. 4224ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 4225ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (!cdata) { 4226ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project in = ctxt->input->cur; 4227ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project do { 4228ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectget_more_space: 4229ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while (*in == 0x20) { in++; ctxt->input->col++; } 4230ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (*in == 0xA) { 4231ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project do { 4232ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->input->line++; ctxt->input->col = 1; 4233ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project in++; 4234ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } while (*in == 0xA); 4235ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto get_more_space; 4236ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 4237ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (*in == '<') { 4238ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project nbchar = in - ctxt->input->cur; 4239ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (nbchar > 0) { 4240ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar *tmp = ctxt->input->cur; 4241ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->input->cur = in; 4242ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 4243ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ctxt->sax != NULL) && 4244ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (ctxt->sax->ignorableWhitespace != 4245ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->sax->characters)) { 4246ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (areBlanks(ctxt, tmp, nbchar, 1)) { 4247ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt->sax->ignorableWhitespace != NULL) 4248ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->sax->ignorableWhitespace(ctxt->userData, 4249ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project tmp, nbchar); 4250ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 4251ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt->sax->characters != NULL) 4252ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->sax->characters(ctxt->userData, 4253ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project tmp, nbchar); 4254ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (*ctxt->space == -1) 4255ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *ctxt->space = -2; 4256ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 4257ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if ((ctxt->sax != NULL) && 4258ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (ctxt->sax->characters != NULL)) { 4259ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->sax->characters(ctxt->userData, 4260ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project tmp, nbchar); 4261ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 4262ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 4263ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return; 4264ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 4265ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 4266ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectget_more: 4267ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ccol = ctxt->input->col; 4268ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while (test_char_data[*in]) { 4269ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project in++; 4270ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ccol++; 4271ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 4272ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->input->col = ccol; 4273ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (*in == 0xA) { 4274ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project do { 4275ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->input->line++; ctxt->input->col = 1; 4276ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project in++; 4277ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } while (*in == 0xA); 4278ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto get_more; 4279ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 4280ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (*in == ']') { 4281ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((in[1] == ']') && (in[2] == '>')) { 4282ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErr(ctxt, XML_ERR_MISPLACED_CDATA_END, NULL); 4283ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->input->cur = in; 4284ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return; 4285ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 4286ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project in++; 4287ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->input->col++; 4288ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto get_more; 4289ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 4290ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project nbchar = in - ctxt->input->cur; 4291ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (nbchar > 0) { 4292ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ctxt->sax != NULL) && 4293ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (ctxt->sax->ignorableWhitespace != 4294ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->sax->characters) && 4295ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (IS_BLANK_CH(*ctxt->input->cur))) { 4296ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar *tmp = ctxt->input->cur; 4297ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->input->cur = in; 4298ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 4299ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (areBlanks(ctxt, tmp, nbchar, 0)) { 4300ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt->sax->ignorableWhitespace != NULL) 4301ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->sax->ignorableWhitespace(ctxt->userData, 4302ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project tmp, nbchar); 4303ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 4304ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt->sax->characters != NULL) 4305ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->sax->characters(ctxt->userData, 4306ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project tmp, nbchar); 4307ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (*ctxt->space == -1) 4308ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *ctxt->space = -2; 4309ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 4310ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project line = ctxt->input->line; 4311ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project col = ctxt->input->col; 4312ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if (ctxt->sax != NULL) { 4313ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt->sax->characters != NULL) 4314ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->sax->characters(ctxt->userData, 4315ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->input->cur, nbchar); 4316ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project line = ctxt->input->line; 4317ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project col = ctxt->input->col; 4318ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 431960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott /* something really bad happened in the SAX callback */ 432060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (ctxt->instate != XML_PARSER_CONTENT) 432160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott return; 4322ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 4323ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->input->cur = in; 4324ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (*in == 0xD) { 4325ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project in++; 4326ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (*in == 0xA) { 4327ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->input->cur = in; 4328ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project in++; 4329ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->input->line++; ctxt->input->col = 1; 4330ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project continue; /* while */ 4331ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 4332ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project in--; 4333ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 4334ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (*in == '<') { 4335ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return; 4336ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 4337ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (*in == '&') { 4338ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return; 4339ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 4340ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SHRINK; 4341ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project GROW; 4342ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project in = ctxt->input->cur; 4343ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } while (((*in >= 0x20) && (*in <= 0x7F)) || (*in == 0x09)); 4344ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project nbchar = 0; 4345ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 4346ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->input->line = line; 4347ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->input->col = col; 4348ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParseCharDataComplex(ctxt, cdata); 4349ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 4350ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 4351ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 4352ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlParseCharDataComplex: 4353ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctxt: an XML parser context 4354ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @cdata: int indicating whether we are within a CDATA section 4355ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 4356ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * parse a CharData section.this is the fallback function 4357ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * of xmlParseCharData() when the parsing requires handling 4358ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * of non-ASCII characters. 4359ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 4360df143a5041f03a22808b59c76698770b74692815Selim Gurunstatic void 4361ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlParseCharDataComplex(xmlParserCtxtPtr ctxt, int cdata) { 4362ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar buf[XML_PARSER_BIG_BUFFER_SIZE + 5]; 4363ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int nbchar = 0; 4364ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int cur, l; 4365ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int count = 0; 4366ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 4367ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SHRINK; 4368ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project GROW; 4369ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur = CUR_CHAR(l); 4370ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while ((cur != '<') && /* checked */ 4371ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (cur != '&') && 4372ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (IS_CHAR(cur))) /* test also done in xmlCurrentChar() */ { 4373ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((cur == ']') && (NXT(1) == ']') && 4374ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (NXT(2) == '>')) { 4375ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (cdata) break; 4376ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else { 4377ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErr(ctxt, XML_ERR_MISPLACED_CDATA_END, NULL); 4378ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 4379ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 4380ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project COPY_BUF(l,buf,nbchar,cur); 4381ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (nbchar >= XML_PARSER_BIG_BUFFER_SIZE) { 4382ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project buf[nbchar] = 0; 4383ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 4384ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 4385ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * OK the segment is to be consumed as chars. 4386ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 4387ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ctxt->sax != NULL) && (!ctxt->disableSAX)) { 4388ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (areBlanks(ctxt, buf, nbchar, 0)) { 4389ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt->sax->ignorableWhitespace != NULL) 4390ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->sax->ignorableWhitespace(ctxt->userData, 4391ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project buf, nbchar); 4392ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 4393ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt->sax->characters != NULL) 4394ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->sax->characters(ctxt->userData, buf, nbchar); 4395ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ctxt->sax->characters != 4396ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->sax->ignorableWhitespace) && 4397ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (*ctxt->space == -1)) 4398ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *ctxt->space = -2; 4399ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 4400ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 4401ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project nbchar = 0; 440260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott /* something really bad happened in the SAX callback */ 440360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (ctxt->instate != XML_PARSER_CONTENT) 440460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott return; 4405ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 4406ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project count++; 4407ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (count > 50) { 4408ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project GROW; 4409ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project count = 0; 4410ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 4411ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project NEXTL(l); 4412ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur = CUR_CHAR(l); 4413ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 4414ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (nbchar != 0) { 4415ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project buf[nbchar] = 0; 4416ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 4417ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * OK the segment is to be consumed as chars. 4418ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 4419ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ctxt->sax != NULL) && (!ctxt->disableSAX)) { 4420ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (areBlanks(ctxt, buf, nbchar, 0)) { 4421ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt->sax->ignorableWhitespace != NULL) 4422ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->sax->ignorableWhitespace(ctxt->userData, buf, nbchar); 4423ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 4424ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt->sax->characters != NULL) 4425ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->sax->characters(ctxt->userData, buf, nbchar); 4426ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ctxt->sax->characters != ctxt->sax->ignorableWhitespace) && 4427ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (*ctxt->space == -1)) 4428ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *ctxt->space = -2; 4429ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 4430ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 4431ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 4432ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((cur != 0) && (!IS_CHAR(cur))) { 4433ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* Generate the error and skip the offending character */ 4434ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErrMsgInt(ctxt, XML_ERR_INVALID_CHAR, 4435ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "PCDATA invalid Char value %d\n", 4436ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur); 4437ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project NEXTL(l); 4438ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 4439ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 4440ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 4441ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 4442ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlParseExternalID: 4443ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctxt: an XML parser context 4444ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @publicID: a xmlChar** receiving PubidLiteral 4445ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @strict: indicate whether we should restrict parsing to only 4446ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * production [75], see NOTE below 4447ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 4448ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Parse an External ID or a Public ID 4449ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 4450ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * NOTE: Productions [75] and [83] interact badly since [75] can generate 4451ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 'PUBLIC' S PubidLiteral S SystemLiteral 4452ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 4453ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [75] ExternalID ::= 'SYSTEM' S SystemLiteral 4454ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * | 'PUBLIC' S PubidLiteral S SystemLiteral 4455ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 4456ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [83] PublicID ::= 'PUBLIC' S PubidLiteral 4457ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 4458ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the function returns SystemLiteral and in the second 4459ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * case publicID receives PubidLiteral, is strict is off 4460ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * it is possible to return NULL and have publicID set. 4461ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 4462ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 4463ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlChar * 4464ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlParseExternalID(xmlParserCtxtPtr ctxt, xmlChar **publicID, int strict) { 4465ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar *URI = NULL; 4466ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 4467ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SHRINK; 4468ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 4469ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *publicID = NULL; 4470ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (CMP6(CUR_PTR, 'S', 'Y', 'S', 'T', 'E', 'M')) { 4471ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SKIP(6); 4472ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (!IS_BLANK_CH(CUR)) { 4473ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErrMsg(ctxt, XML_ERR_SPACE_REQUIRED, 4474ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "Space required after 'SYSTEM'\n"); 4475ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 4476ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SKIP_BLANKS; 4477ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project URI = xmlParseSystemLiteral(ctxt); 4478ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (URI == NULL) { 4479ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErr(ctxt, XML_ERR_URI_REQUIRED, NULL); 4480ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 4481ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if (CMP6(CUR_PTR, 'P', 'U', 'B', 'L', 'I', 'C')) { 4482ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SKIP(6); 4483ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (!IS_BLANK_CH(CUR)) { 4484ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErrMsg(ctxt, XML_ERR_SPACE_REQUIRED, 4485ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "Space required after 'PUBLIC'\n"); 4486ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 4487ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SKIP_BLANKS; 4488ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *publicID = xmlParsePubidLiteral(ctxt); 4489ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (*publicID == NULL) { 4490ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErr(ctxt, XML_ERR_PUBID_REQUIRED, NULL); 4491ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 4492ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (strict) { 4493ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 4494ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * We don't handle [83] so "S SystemLiteral" is required. 4495ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 4496ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (!IS_BLANK_CH(CUR)) { 4497ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErrMsg(ctxt, XML_ERR_SPACE_REQUIRED, 4498ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "Space required after the Public Identifier\n"); 4499ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 4500ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 4501ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 4502ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * We handle [83] so we return immediately, if 4503ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * "S SystemLiteral" is not detected. From a purely parsing 4504ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * point of view that's a nice mess. 4505ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 4506ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar *ptr; 4507ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project GROW; 4508ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 4509ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ptr = CUR_PTR; 4510ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (!IS_BLANK_CH(*ptr)) return(NULL); 4511ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 4512ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while (IS_BLANK_CH(*ptr)) ptr++; /* TODO: dangerous, fix ! */ 4513ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((*ptr != '\'') && (*ptr != '"')) return(NULL); 4514ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 4515ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SKIP_BLANKS; 4516ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project URI = xmlParseSystemLiteral(ctxt); 4517ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (URI == NULL) { 4518ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErr(ctxt, XML_ERR_URI_REQUIRED, NULL); 4519ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 4520ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 4521ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(URI); 4522ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 4523ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 4524ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 4525ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlParseCommentComplex: 4526ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctxt: an XML parser context 4527ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @buf: the already parsed part of the buffer 4528ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @len: number of bytes filles in the buffer 4529ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @size: allocated size of the buffer 4530ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 4531ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Skip an XML (SGML) comment <!-- .... --> 4532ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * The spec says that "For compatibility, the string "--" (double-hyphen) 4533ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * must not occur within comments. " 4534ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * This is the slow routine in case the accelerator for ascii didn't work 4535ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 4536ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [15] Comment ::= '<!--' ((Char - '-') | ('-' (Char - '-')))* '-->' 4537ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 4538ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic void 4539ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlParseCommentComplex(xmlParserCtxtPtr ctxt, xmlChar *buf, int len, int size) { 4540ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int q, ql; 4541ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int r, rl; 4542ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int cur, l; 4543ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int count = 0; 454460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott int inputid; 454560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott 454660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott inputid = ctxt->input->id; 4547ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 4548ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (buf == NULL) { 4549ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project len = 0; 4550ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project size = XML_PARSER_BUFFER_SIZE; 4551ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project buf = (xmlChar *) xmlMallocAtomic(size * sizeof(xmlChar)); 4552ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (buf == NULL) { 4553ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlErrMemory(ctxt, NULL); 4554ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return; 4555ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 4556ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 4557ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project GROW; /* Assure there's enough input data */ 4558ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project q = CUR_CHAR(ql); 4559ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (q == 0) 4560ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto not_terminated; 4561ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (!IS_CHAR(q)) { 4562ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErrMsgInt(ctxt, XML_ERR_INVALID_CHAR, 4563ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "xmlParseComment: invalid xmlChar value %d\n", 4564ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project q); 4565ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree (buf); 4566ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return; 4567ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 4568ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project NEXTL(ql); 4569ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project r = CUR_CHAR(rl); 4570ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (r == 0) 4571ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto not_terminated; 4572ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (!IS_CHAR(r)) { 4573ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErrMsgInt(ctxt, XML_ERR_INVALID_CHAR, 4574ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "xmlParseComment: invalid xmlChar value %d\n", 4575ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project q); 4576ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree (buf); 4577ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return; 4578ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 4579ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project NEXTL(rl); 4580ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur = CUR_CHAR(l); 4581ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (cur == 0) 4582ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto not_terminated; 4583ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while (IS_CHAR(cur) && /* checked */ 4584ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ((cur != '>') || 4585ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (r != '-') || (q != '-'))) { 4586ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((r == '-') && (q == '-')) { 4587ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErr(ctxt, XML_ERR_HYPHEN_IN_COMMENT, NULL); 4588ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 4589ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (len + 5 >= size) { 4590ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar *new_buf; 4591ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project size *= 2; 4592ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project new_buf = (xmlChar *) xmlRealloc(buf, size * sizeof(xmlChar)); 4593ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (new_buf == NULL) { 4594ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree (buf); 4595ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlErrMemory(ctxt, NULL); 4596ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return; 4597ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 4598ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project buf = new_buf; 4599ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 4600ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project COPY_BUF(ql,buf,len,q); 4601ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project q = r; 4602ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ql = rl; 4603ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project r = cur; 4604ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project rl = l; 4605ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 4606ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project count++; 4607ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (count > 50) { 4608ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project GROW; 4609ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project count = 0; 4610ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 4611ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project NEXTL(l); 4612ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur = CUR_CHAR(l); 4613ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (cur == 0) { 4614ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SHRINK; 4615ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project GROW; 4616ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur = CUR_CHAR(l); 4617ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 4618ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 4619ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project buf[len] = 0; 4620ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (cur == 0) { 4621ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErrMsgStr(ctxt, XML_ERR_COMMENT_NOT_FINISHED, 4622ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "Comment not terminated \n<!--%.50s\n", buf); 4623ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if (!IS_CHAR(cur)) { 4624ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErrMsgInt(ctxt, XML_ERR_INVALID_CHAR, 4625ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "xmlParseComment: invalid xmlChar value %d\n", 4626ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur); 4627ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 462860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (inputid != ctxt->input->id) { 4629ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErrMsg(ctxt, XML_ERR_ENTITY_BOUNDARY, 4630ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "Comment doesn't start and stop in the same entity\n"); 4631ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 4632ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project NEXT; 4633ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ctxt->sax != NULL) && (ctxt->sax->comment != NULL) && 4634ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (!ctxt->disableSAX)) 4635ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->sax->comment(ctxt->userData, buf); 4636ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 4637ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree(buf); 4638ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return; 4639ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectnot_terminated: 4640ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErrMsgStr(ctxt, XML_ERR_COMMENT_NOT_FINISHED, 4641ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "Comment not terminated\n", NULL); 4642ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree(buf); 4643ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return; 4644ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 4645ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 4646ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 4647ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlParseComment: 4648ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctxt: an XML parser context 4649ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 4650ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Skip an XML (SGML) comment <!-- .... --> 4651ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * The spec says that "For compatibility, the string "--" (double-hyphen) 4652ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * must not occur within comments. " 4653ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 4654ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [15] Comment ::= '<!--' ((Char - '-') | ('-' (Char - '-')))* '-->' 4655ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 4656ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectvoid 4657ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlParseComment(xmlParserCtxtPtr ctxt) { 4658ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar *buf = NULL; 4659ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int size = XML_PARSER_BUFFER_SIZE; 4660ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int len = 0; 4661ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParserInputState state; 4662ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar *in; 4663ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int nbchar = 0, ccol; 466460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott int inputid; 4665ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 4666ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 4667ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Check that there is a comment right here. 4668ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 4669ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((RAW != '<') || (NXT(1) != '!') || 4670ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (NXT(2) != '-') || (NXT(3) != '-')) return; 4671ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project state = ctxt->instate; 4672ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->instate = XML_PARSER_COMMENT; 467360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott inputid = ctxt->input->id; 4674ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SKIP(4); 4675ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SHRINK; 4676ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project GROW; 4677ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 4678ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 4679ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Accelerated common case where input don't need to be 4680ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * modified before passing it to the handler. 4681ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 4682ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project in = ctxt->input->cur; 4683ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project do { 4684ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (*in == 0xA) { 4685ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project do { 4686ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->input->line++; ctxt->input->col = 1; 4687ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project in++; 4688ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } while (*in == 0xA); 4689ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 4690ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectget_more: 4691ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ccol = ctxt->input->col; 4692ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while (((*in > '-') && (*in <= 0x7F)) || 4693ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ((*in >= 0x20) && (*in < '-')) || 4694ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (*in == 0x09)) { 4695ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project in++; 4696ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ccol++; 4697ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 4698ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->input->col = ccol; 4699ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (*in == 0xA) { 4700ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project do { 4701ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->input->line++; ctxt->input->col = 1; 4702ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project in++; 4703ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } while (*in == 0xA); 4704ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto get_more; 4705ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 4706ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project nbchar = in - ctxt->input->cur; 4707ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 4708ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * save current set of data 4709ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 4710ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (nbchar > 0) { 4711ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ctxt->sax != NULL) && 4712ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (ctxt->sax->comment != NULL)) { 4713ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (buf == NULL) { 4714ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((*in == '-') && (in[1] == '-')) 4715ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project size = nbchar + 1; 4716ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else 4717ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project size = XML_PARSER_BUFFER_SIZE + nbchar; 4718ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project buf = (xmlChar *) xmlMallocAtomic(size * sizeof(xmlChar)); 4719ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (buf == NULL) { 4720ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlErrMemory(ctxt, NULL); 4721ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->instate = state; 4722ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return; 4723ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 4724ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project len = 0; 4725ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if (len + nbchar + 1 >= size) { 4726ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar *new_buf; 4727ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project size += len + nbchar + XML_PARSER_BUFFER_SIZE; 4728ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project new_buf = (xmlChar *) xmlRealloc(buf, 4729ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project size * sizeof(xmlChar)); 4730ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (new_buf == NULL) { 4731ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree (buf); 4732ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlErrMemory(ctxt, NULL); 4733ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->instate = state; 4734ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return; 4735ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 4736ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project buf = new_buf; 4737ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 4738ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project memcpy(&buf[len], ctxt->input->cur, nbchar); 4739ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project len += nbchar; 4740ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project buf[len] = 0; 4741ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 4742ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 4743ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->input->cur = in; 4744ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (*in == 0xA) { 4745ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project in++; 4746ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->input->line++; ctxt->input->col = 1; 4747ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 4748ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (*in == 0xD) { 4749ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project in++; 4750ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (*in == 0xA) { 4751ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->input->cur = in; 4752ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project in++; 4753ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->input->line++; ctxt->input->col = 1; 4754ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project continue; /* while */ 4755ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 4756ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project in--; 4757ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 4758ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SHRINK; 4759ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project GROW; 4760ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project in = ctxt->input->cur; 4761ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (*in == '-') { 4762ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (in[1] == '-') { 4763ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (in[2] == '>') { 476460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (ctxt->input->id != inputid) { 476560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott xmlFatalErrMsg(ctxt, XML_ERR_ENTITY_BOUNDARY, 476660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott "comment doesn't start and stop in the same entity\n"); 476760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } 4768ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SKIP(3); 4769ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ctxt->sax != NULL) && (ctxt->sax->comment != NULL) && 4770ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (!ctxt->disableSAX)) { 4771ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (buf != NULL) 4772ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->sax->comment(ctxt->userData, buf); 4773ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else 4774ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->sax->comment(ctxt->userData, BAD_CAST ""); 4775ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 4776ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (buf != NULL) 4777ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree(buf); 4778ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->instate = state; 4779ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return; 4780ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 4781ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (buf != NULL) 4782ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErrMsgStr(ctxt, XML_ERR_COMMENT_NOT_FINISHED, 4783ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "Comment not terminated \n<!--%.50s\n", 4784ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project buf); 4785ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else 4786ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErrMsgStr(ctxt, XML_ERR_COMMENT_NOT_FINISHED, 4787ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "Comment not terminated \n", NULL); 4788ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project in++; 4789ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->input->col++; 4790ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 4791ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project in++; 4792ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->input->col++; 4793ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto get_more; 4794ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 4795ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } while (((*in >= 0x20) && (*in <= 0x7F)) || (*in == 0x09)); 4796ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParseCommentComplex(ctxt, buf, len, size); 4797ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->instate = state; 4798ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return; 4799ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 4800ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 4801ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 4802ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 4803ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlParsePITarget: 4804ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctxt: an XML parser context 4805ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 4806ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * parse the name of a PI 4807ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 4808ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [17] PITarget ::= Name - (('X' | 'x') ('M' | 'm') ('L' | 'l')) 4809ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 4810ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the PITarget name or NULL 4811ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 4812ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 4813ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectconst xmlChar * 4814ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlParsePITarget(xmlParserCtxtPtr ctxt) { 4815ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar *name; 4816ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 4817ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project name = xmlParseName(ctxt); 4818ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((name != NULL) && 4819ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ((name[0] == 'x') || (name[0] == 'X')) && 4820ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ((name[1] == 'm') || (name[1] == 'M')) && 4821ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ((name[2] == 'l') || (name[2] == 'L'))) { 4822ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int i; 4823ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((name[0] == 'x') && (name[1] == 'm') && 4824ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (name[2] == 'l') && (name[3] == 0)) { 4825ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErrMsg(ctxt, XML_ERR_RESERVED_XML_NAME, 4826ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "XML declaration allowed only at the start of the document\n"); 4827ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(name); 4828ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if (name[3] == 0) { 4829ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErr(ctxt, XML_ERR_RESERVED_XML_NAME, NULL); 4830ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(name); 4831ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 4832ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project for (i = 0;;i++) { 4833ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (xmlW3CPIs[i] == NULL) break; 4834ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (xmlStrEqual(name, (const xmlChar *)xmlW3CPIs[i])) 4835ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(name); 4836ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 4837ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlWarningMsg(ctxt, XML_ERR_RESERVED_XML_NAME, 4838ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "xmlParsePITarget: invalid name prefix 'xml'\n", 4839ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project NULL, NULL); 4840ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 484160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if ((name != NULL) && (xmlStrchr(name, ':') != NULL)) { 484260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott xmlNsErr(ctxt, XML_NS_ERR_COLON, 484360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott "colon are forbidden from PI names '%s'\n", name, NULL, NULL); 484460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } 4845ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(name); 4846ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 4847ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 4848ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_CATALOG_ENABLED 4849ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 4850ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlParseCatalogPI: 4851ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctxt: an XML parser context 4852ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @catalog: the PI value string 4853ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 4854ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * parse an XML Catalog Processing Instruction. 4855ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 4856ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * <?oasis-xml-catalog catalog="http://example.com/catalog.xml"?> 4857ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 4858ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Occurs only if allowed by the user and if happening in the Misc 4859ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * part of the document before any doctype informations 4860ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * This will add the given catalog to the parsing context in order 4861ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * to be used if there is a resolution need further down in the document 4862ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 4863ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 4864ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic void 4865ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlParseCatalogPI(xmlParserCtxtPtr ctxt, const xmlChar *catalog) { 4866ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar *URL = NULL; 4867ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar *tmp, *base; 4868ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar marker; 4869ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 4870ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project tmp = catalog; 4871ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while (IS_BLANK_CH(*tmp)) tmp++; 4872ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (xmlStrncmp(tmp, BAD_CAST"catalog", 7)) 4873ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto error; 4874ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project tmp += 7; 4875ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while (IS_BLANK_CH(*tmp)) tmp++; 4876ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (*tmp != '=') { 4877ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return; 4878ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 4879ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project tmp++; 4880ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while (IS_BLANK_CH(*tmp)) tmp++; 4881ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project marker = *tmp; 4882ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((marker != '\'') && (marker != '"')) 4883ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto error; 4884ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project tmp++; 4885ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project base = tmp; 4886ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while ((*tmp != 0) && (*tmp != marker)) tmp++; 4887ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (*tmp == 0) 4888ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto error; 4889ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project URL = xmlStrndup(base, tmp - base); 4890ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project tmp++; 4891ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while (IS_BLANK_CH(*tmp)) tmp++; 4892ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (*tmp != 0) 4893ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto error; 4894ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 4895ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (URL != NULL) { 4896ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->catalogs = xmlCatalogAddLocal(ctxt->catalogs, URL); 4897ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree(URL); 4898ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 4899ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return; 4900ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 4901ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projecterror: 4902ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlWarningMsg(ctxt, XML_WAR_CATALOG_PI, 4903ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "Catalog PI syntax error: %s\n", 4904ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project catalog, NULL); 4905ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (URL != NULL) 4906ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree(URL); 4907ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 4908ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 4909ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 4910ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 4911ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlParsePI: 4912ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctxt: an XML parser context 4913ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 4914ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * parse an XML Processing Instruction. 4915ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 4916ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [16] PI ::= '<?' PITarget (S (Char* - (Char* '?>' Char*)))? '?>' 4917ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 4918ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * The processing is transfered to SAX once parsed. 4919ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 4920ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 4921ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectvoid 4922ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlParsePI(xmlParserCtxtPtr ctxt) { 4923ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar *buf = NULL; 4924ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int len = 0; 4925ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int size = XML_PARSER_BUFFER_SIZE; 4926ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int cur, l; 4927ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar *target; 4928ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParserInputState state; 4929ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int count = 0; 4930ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 4931ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((RAW == '<') && (NXT(1) == '?')) { 4932ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParserInputPtr input = ctxt->input; 4933ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project state = ctxt->instate; 4934ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->instate = XML_PARSER_PI; 4935ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 4936ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * this is a Processing Instruction. 4937ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 4938ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SKIP(2); 4939ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SHRINK; 4940ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 4941ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 4942ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Parse the target name and check for special support like 4943ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * namespace. 4944ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 4945ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project target = xmlParsePITarget(ctxt); 4946ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (target != NULL) { 4947ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((RAW == '?') && (NXT(1) == '>')) { 4948ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (input != ctxt->input) { 4949ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErrMsg(ctxt, XML_ERR_ENTITY_BOUNDARY, 4950ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "PI declaration doesn't start and stop in the same entity\n"); 4951ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 4952ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SKIP(2); 4953ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 4954ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 4955ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * SAX: PI detected. 4956ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 4957ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ctxt->sax) && (!ctxt->disableSAX) && 4958ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (ctxt->sax->processingInstruction != NULL)) 4959ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->sax->processingInstruction(ctxt->userData, 4960ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project target, NULL); 4961df143a5041f03a22808b59c76698770b74692815Selim Gurun if (ctxt->instate != XML_PARSER_EOF) 4962df143a5041f03a22808b59c76698770b74692815Selim Gurun ctxt->instate = state; 4963ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return; 4964ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 4965ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project buf = (xmlChar *) xmlMallocAtomic(size * sizeof(xmlChar)); 4966ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (buf == NULL) { 4967ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlErrMemory(ctxt, NULL); 4968ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->instate = state; 4969ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return; 4970ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 4971ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur = CUR; 4972ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (!IS_BLANK(cur)) { 4973ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErrMsgStr(ctxt, XML_ERR_SPACE_REQUIRED, 4974ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "ParsePI: PI %s space expected\n", target); 4975ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 4976ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SKIP_BLANKS; 4977ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur = CUR_CHAR(l); 4978ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while (IS_CHAR(cur) && /* checked */ 4979ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ((cur != '?') || (NXT(1) != '>'))) { 4980ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (len + 5 >= size) { 4981ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar *tmp; 4982ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 4983ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project size *= 2; 4984ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project tmp = (xmlChar *) xmlRealloc(buf, size * sizeof(xmlChar)); 4985ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (tmp == NULL) { 4986ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlErrMemory(ctxt, NULL); 4987ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree(buf); 4988ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->instate = state; 4989ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return; 4990ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 4991ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project buf = tmp; 4992ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 4993ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project count++; 4994ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (count > 50) { 4995ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project GROW; 4996ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project count = 0; 4997ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 4998ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project COPY_BUF(l,buf,len,cur); 4999ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project NEXTL(l); 5000ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur = CUR_CHAR(l); 5001ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (cur == 0) { 5002ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SHRINK; 5003ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project GROW; 5004ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur = CUR_CHAR(l); 5005ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 5006ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 5007ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project buf[len] = 0; 5008ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (cur != '?') { 5009ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErrMsgStr(ctxt, XML_ERR_PI_NOT_FINISHED, 5010ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "ParsePI: PI %s never end ...\n", target); 5011ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 5012ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (input != ctxt->input) { 5013ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErrMsg(ctxt, XML_ERR_SPACE_REQUIRED, 5014ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "PI declaration doesn't start and stop in the same entity\n"); 5015ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 5016ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SKIP(2); 5017ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 5018ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_CATALOG_ENABLED 5019ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (((state == XML_PARSER_MISC) || 5020ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (state == XML_PARSER_START)) && 5021ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (xmlStrEqual(target, XML_CATALOG_PI))) { 5022ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlCatalogAllow allow = xmlCatalogGetDefaults(); 5023ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((allow == XML_CATA_ALLOW_DOCUMENT) || 5024ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (allow == XML_CATA_ALLOW_ALL)) 5025ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParseCatalogPI(ctxt, buf); 5026ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 5027ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 5028ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 5029ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 5030ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 5031ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * SAX: PI detected. 5032ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 5033ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ctxt->sax) && (!ctxt->disableSAX) && 5034ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (ctxt->sax->processingInstruction != NULL)) 5035ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->sax->processingInstruction(ctxt->userData, 5036ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project target, buf); 5037ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 5038ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree(buf); 5039ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 5040ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErr(ctxt, XML_ERR_PI_NOT_STARTED, NULL); 5041ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 5042df143a5041f03a22808b59c76698770b74692815Selim Gurun if (ctxt->instate != XML_PARSER_EOF) 5043df143a5041f03a22808b59c76698770b74692815Selim Gurun ctxt->instate = state; 5044ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 5045ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 5046ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 5047ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 5048ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlParseNotationDecl: 5049ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctxt: an XML parser context 5050ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 5051ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * parse a notation declaration 5052ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 5053ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [82] NotationDecl ::= '<!NOTATION' S Name S (ExternalID | PublicID) S? '>' 5054ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 5055ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Hence there is actually 3 choices: 5056ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 'PUBLIC' S PubidLiteral 5057ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 'PUBLIC' S PubidLiteral S SystemLiteral 5058ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * and 'SYSTEM' S SystemLiteral 5059ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 5060ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * See the NOTE on xmlParseExternalID(). 5061ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 5062ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 5063ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectvoid 5064ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlParseNotationDecl(xmlParserCtxtPtr ctxt) { 5065ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar *name; 5066ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar *Pubid; 5067ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar *Systemid; 5068ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 5069ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (CMP10(CUR_PTR, '<', '!', 'N', 'O', 'T', 'A', 'T', 'I', 'O', 'N')) { 5070ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParserInputPtr input = ctxt->input; 5071ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SHRINK; 5072ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SKIP(10); 5073ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (!IS_BLANK_CH(CUR)) { 5074ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErrMsg(ctxt, XML_ERR_SPACE_REQUIRED, 5075ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "Space required after '<!NOTATION'\n"); 5076ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return; 5077ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 5078ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SKIP_BLANKS; 5079ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 5080ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project name = xmlParseName(ctxt); 5081ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (name == NULL) { 5082ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErr(ctxt, XML_ERR_NOTATION_NOT_STARTED, NULL); 5083ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return; 5084ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 5085ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (!IS_BLANK_CH(CUR)) { 5086ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErrMsg(ctxt, XML_ERR_SPACE_REQUIRED, 5087ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "Space required after the NOTATION name'\n"); 5088ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return; 5089ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 509060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (xmlStrchr(name, ':') != NULL) { 509160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott xmlNsErr(ctxt, XML_NS_ERR_COLON, 509260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott "colon are forbidden from notation names '%s'\n", 509360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott name, NULL, NULL); 509460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } 5095ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SKIP_BLANKS; 5096ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 5097ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 5098ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Parse the IDs. 5099ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 5100ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project Systemid = xmlParseExternalID(ctxt, &Pubid, 0); 5101ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SKIP_BLANKS; 5102ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 5103ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (RAW == '>') { 5104ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (input != ctxt->input) { 5105ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErrMsg(ctxt, XML_ERR_SPACE_REQUIRED, 5106ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "Notation declaration doesn't start and stop in the same entity\n"); 5107ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 5108ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project NEXT; 5109ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ctxt->sax != NULL) && (!ctxt->disableSAX) && 5110ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (ctxt->sax->notationDecl != NULL)) 5111ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->sax->notationDecl(ctxt->userData, name, Pubid, Systemid); 5112ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 5113ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErr(ctxt, XML_ERR_NOTATION_NOT_FINISHED, NULL); 5114ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 5115ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (Systemid != NULL) xmlFree(Systemid); 5116ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (Pubid != NULL) xmlFree(Pubid); 5117ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 5118ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 5119ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 5120ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 5121ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlParseEntityDecl: 5122ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctxt: an XML parser context 5123ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 5124ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * parse <!ENTITY declarations 5125ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 5126ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [70] EntityDecl ::= GEDecl | PEDecl 5127ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 5128ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [71] GEDecl ::= '<!ENTITY' S Name S EntityDef S? '>' 5129ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 5130ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [72] PEDecl ::= '<!ENTITY' S '%' S Name S PEDef S? '>' 5131ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 5132ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [73] EntityDef ::= EntityValue | (ExternalID NDataDecl?) 5133ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 5134ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [74] PEDef ::= EntityValue | ExternalID 5135ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 5136ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [76] NDataDecl ::= S 'NDATA' S Name 5137ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 5138ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [ VC: Notation Declared ] 5139ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * The Name must match the declared name of a notation. 5140ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 5141ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 5142ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectvoid 5143ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlParseEntityDecl(xmlParserCtxtPtr ctxt) { 5144ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar *name = NULL; 5145ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar *value = NULL; 5146ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar *URI = NULL, *literal = NULL; 5147ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar *ndata = NULL; 5148ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int isParameter = 0; 5149ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar *orig = NULL; 5150ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int skipped; 5151ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 5152ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* GROW; done in the caller */ 5153ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (CMP8(CUR_PTR, '<', '!', 'E', 'N', 'T', 'I', 'T', 'Y')) { 5154ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParserInputPtr input = ctxt->input; 5155ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SHRINK; 5156ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SKIP(8); 5157ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project skipped = SKIP_BLANKS; 5158ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (skipped == 0) { 5159ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErrMsg(ctxt, XML_ERR_SPACE_REQUIRED, 5160ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "Space required after '<!ENTITY'\n"); 5161ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 5162ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 5163ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (RAW == '%') { 5164ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project NEXT; 5165ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project skipped = SKIP_BLANKS; 5166ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (skipped == 0) { 5167ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErrMsg(ctxt, XML_ERR_SPACE_REQUIRED, 5168ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "Space required after '%'\n"); 5169ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 5170ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project isParameter = 1; 5171ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 5172ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 5173ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project name = xmlParseName(ctxt); 5174ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (name == NULL) { 5175ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErrMsg(ctxt, XML_ERR_NAME_REQUIRED, 5176ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "xmlParseEntityDecl: no name\n"); 5177ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return; 5178ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 517960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (xmlStrchr(name, ':') != NULL) { 518060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott xmlNsErr(ctxt, XML_NS_ERR_COLON, 518160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott "colon are forbidden from entities names '%s'\n", 518260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott name, NULL, NULL); 518360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } 5184ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project skipped = SKIP_BLANKS; 5185ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (skipped == 0) { 5186ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErrMsg(ctxt, XML_ERR_SPACE_REQUIRED, 5187ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "Space required after the entity name\n"); 5188ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 5189ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 5190ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->instate = XML_PARSER_ENTITY_DECL; 5191ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 5192ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * handle the various case of definitions... 5193ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 5194ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (isParameter) { 5195ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((RAW == '"') || (RAW == '\'')) { 5196ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project value = xmlParseEntityValue(ctxt, &orig); 5197ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (value) { 5198ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ctxt->sax != NULL) && 5199ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (!ctxt->disableSAX) && (ctxt->sax->entityDecl != NULL)) 5200ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->sax->entityDecl(ctxt->userData, name, 5201ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project XML_INTERNAL_PARAMETER_ENTITY, 5202ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project NULL, NULL, value); 5203ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 5204ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 5205ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project URI = xmlParseExternalID(ctxt, &literal, 1); 5206ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((URI == NULL) && (literal == NULL)) { 5207ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErr(ctxt, XML_ERR_VALUE_REQUIRED, NULL); 5208ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 5209ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (URI) { 5210ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlURIPtr uri; 5211ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 5212ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project uri = xmlParseURI((const char *) URI); 5213ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (uri == NULL) { 5214ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlErrMsgStr(ctxt, XML_ERR_INVALID_URI, 5215ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "Invalid URI: %s\n", URI); 5216ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 5217ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * This really ought to be a well formedness error 5218ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * but the XML Core WG decided otherwise c.f. issue 5219ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * E26 of the XML erratas. 5220ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 5221ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 5222ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (uri->fragment != NULL) { 5223ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 5224ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Okay this is foolish to block those but not 5225ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * invalid URIs. 5226ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 5227ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErr(ctxt, XML_ERR_URI_FRAGMENT, NULL); 5228ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 5229ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ctxt->sax != NULL) && 5230ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (!ctxt->disableSAX) && 5231ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (ctxt->sax->entityDecl != NULL)) 5232ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->sax->entityDecl(ctxt->userData, name, 5233ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project XML_EXTERNAL_PARAMETER_ENTITY, 5234ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project literal, URI, NULL); 5235ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 5236ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFreeURI(uri); 5237ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 5238ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 5239ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 5240ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 5241ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((RAW == '"') || (RAW == '\'')) { 5242ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project value = xmlParseEntityValue(ctxt, &orig); 5243ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ctxt->sax != NULL) && 5244ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (!ctxt->disableSAX) && (ctxt->sax->entityDecl != NULL)) 5245ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->sax->entityDecl(ctxt->userData, name, 5246ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project XML_INTERNAL_GENERAL_ENTITY, 5247ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project NULL, NULL, value); 5248ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 5249ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * For expat compatibility in SAX mode. 5250ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 5251ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ctxt->myDoc == NULL) || 5252ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (xmlStrEqual(ctxt->myDoc->version, SAX_COMPAT_MODE))) { 5253ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt->myDoc == NULL) { 5254ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->myDoc = xmlNewDoc(SAX_COMPAT_MODE); 525560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (ctxt->myDoc == NULL) { 525660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott xmlErrMemory(ctxt, "New Doc failed"); 525760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott return; 525860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } 525960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ctxt->myDoc->properties = XML_DOC_INTERNAL; 5260ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 5261ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt->myDoc->intSubset == NULL) 5262ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->myDoc->intSubset = xmlNewDtd(ctxt->myDoc, 5263ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project BAD_CAST "fake", NULL, NULL); 5264ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 5265ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSAX2EntityDecl(ctxt, name, XML_INTERNAL_GENERAL_ENTITY, 5266ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project NULL, NULL, value); 5267ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 5268ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 5269ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project URI = xmlParseExternalID(ctxt, &literal, 1); 5270ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((URI == NULL) && (literal == NULL)) { 5271ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErr(ctxt, XML_ERR_VALUE_REQUIRED, NULL); 5272ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 5273ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (URI) { 5274ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlURIPtr uri; 5275ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 5276ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project uri = xmlParseURI((const char *)URI); 5277ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (uri == NULL) { 5278ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlErrMsgStr(ctxt, XML_ERR_INVALID_URI, 5279ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "Invalid URI: %s\n", URI); 5280ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 5281ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * This really ought to be a well formedness error 5282ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * but the XML Core WG decided otherwise c.f. issue 5283ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * E26 of the XML erratas. 5284ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 5285ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 5286ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (uri->fragment != NULL) { 5287ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 5288ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Okay this is foolish to block those but not 5289ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * invalid URIs. 5290ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 5291ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErr(ctxt, XML_ERR_URI_FRAGMENT, NULL); 5292ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 5293ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFreeURI(uri); 5294ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 5295ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 5296ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((RAW != '>') && (!IS_BLANK_CH(CUR))) { 5297ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErrMsg(ctxt, XML_ERR_SPACE_REQUIRED, 5298ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "Space required before 'NDATA'\n"); 5299ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 5300ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SKIP_BLANKS; 5301ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (CMP5(CUR_PTR, 'N', 'D', 'A', 'T', 'A')) { 5302ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SKIP(5); 5303ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (!IS_BLANK_CH(CUR)) { 5304ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErrMsg(ctxt, XML_ERR_SPACE_REQUIRED, 5305ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "Space required after 'NDATA'\n"); 5306ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 5307ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SKIP_BLANKS; 5308ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ndata = xmlParseName(ctxt); 5309ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ctxt->sax != NULL) && (!ctxt->disableSAX) && 5310ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (ctxt->sax->unparsedEntityDecl != NULL)) 5311ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->sax->unparsedEntityDecl(ctxt->userData, name, 5312ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project literal, URI, ndata); 5313ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 5314ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ctxt->sax != NULL) && 5315ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (!ctxt->disableSAX) && (ctxt->sax->entityDecl != NULL)) 5316ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->sax->entityDecl(ctxt->userData, name, 5317ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project XML_EXTERNAL_GENERAL_PARSED_ENTITY, 5318ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project literal, URI, NULL); 5319ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 5320ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * For expat compatibility in SAX mode. 5321ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * assuming the entity repalcement was asked for 5322ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 5323ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ctxt->replaceEntities != 0) && 5324ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ((ctxt->myDoc == NULL) || 5325ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (xmlStrEqual(ctxt->myDoc->version, SAX_COMPAT_MODE)))) { 5326ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt->myDoc == NULL) { 5327ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->myDoc = xmlNewDoc(SAX_COMPAT_MODE); 532860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (ctxt->myDoc == NULL) { 532960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott xmlErrMemory(ctxt, "New Doc failed"); 533060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott return; 533160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } 533260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ctxt->myDoc->properties = XML_DOC_INTERNAL; 5333ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 5334ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 5335ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt->myDoc->intSubset == NULL) 5336ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->myDoc->intSubset = xmlNewDtd(ctxt->myDoc, 5337ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project BAD_CAST "fake", NULL, NULL); 5338ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSAX2EntityDecl(ctxt, name, 5339ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project XML_EXTERNAL_GENERAL_PARSED_ENTITY, 5340ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project literal, URI, NULL); 5341ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 5342ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 5343ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 5344ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 5345ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SKIP_BLANKS; 5346ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (RAW != '>') { 5347ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErrMsgStr(ctxt, XML_ERR_ENTITY_NOT_FINISHED, 5348ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "xmlParseEntityDecl: entity %s not terminated\n", name); 5349ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 5350ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (input != ctxt->input) { 5351ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErrMsg(ctxt, XML_ERR_ENTITY_BOUNDARY, 5352ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "Entity declaration doesn't start and stop in the same entity\n"); 5353ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 5354ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project NEXT; 5355ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 5356ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (orig != NULL) { 5357ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 5358ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Ugly mechanism to save the raw entity value. 5359ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 5360ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlEntityPtr cur = NULL; 5361ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 5362ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (isParameter) { 5363ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ctxt->sax != NULL) && 5364ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (ctxt->sax->getParameterEntity != NULL)) 5365ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur = ctxt->sax->getParameterEntity(ctxt->userData, name); 5366ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 5367ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ctxt->sax != NULL) && 5368ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (ctxt->sax->getEntity != NULL)) 5369ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur = ctxt->sax->getEntity(ctxt->userData, name); 5370ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((cur == NULL) && (ctxt->userData==ctxt)) { 5371ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur = xmlSAX2GetEntity(ctxt, name); 5372ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 5373ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 5374ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (cur != NULL) { 5375ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (cur->orig != NULL) 5376ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree(orig); 5377ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else 5378ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur->orig = orig; 5379ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else 5380ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree(orig); 5381ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 5382ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (value != NULL) xmlFree(value); 5383ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (URI != NULL) xmlFree(URI); 5384ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (literal != NULL) xmlFree(literal); 5385ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 5386ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 5387ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 5388ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 5389ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlParseDefaultDecl: 5390ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctxt: an XML parser context 5391ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @value: Receive a possible fixed default value for the attribute 5392ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 5393ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Parse an attribute default declaration 5394ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 5395ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [60] DefaultDecl ::= '#REQUIRED' | '#IMPLIED' | (('#FIXED' S)? AttValue) 5396ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 5397ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [ VC: Required Attribute ] 5398ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * if the default declaration is the keyword #REQUIRED, then the 5399ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * attribute must be specified for all elements of the type in the 5400ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * attribute-list declaration. 5401ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 5402ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [ VC: Attribute Default Legal ] 5403ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * The declared default value must meet the lexical constraints of 5404ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * the declared attribute type c.f. xmlValidateAttributeDecl() 5405ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 5406ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [ VC: Fixed Attribute Default ] 5407ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * if an attribute has a default value declared with the #FIXED 5408ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * keyword, instances of that attribute must match the default value. 5409ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 5410ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [ WFC: No < in Attribute Values ] 5411ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * handled in xmlParseAttValue() 5412ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 5413ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * returns: XML_ATTRIBUTE_NONE, XML_ATTRIBUTE_REQUIRED, XML_ATTRIBUTE_IMPLIED 5414ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * or XML_ATTRIBUTE_FIXED. 5415ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 5416ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 5417ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectint 5418ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlParseDefaultDecl(xmlParserCtxtPtr ctxt, xmlChar **value) { 5419ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int val; 5420ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar *ret; 5421ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 5422ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *value = NULL; 5423ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (CMP9(CUR_PTR, '#', 'R', 'E', 'Q', 'U', 'I', 'R', 'E', 'D')) { 5424ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SKIP(9); 5425ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(XML_ATTRIBUTE_REQUIRED); 5426ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 5427ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (CMP8(CUR_PTR, '#', 'I', 'M', 'P', 'L', 'I', 'E', 'D')) { 5428ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SKIP(8); 5429ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(XML_ATTRIBUTE_IMPLIED); 5430ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 5431ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project val = XML_ATTRIBUTE_NONE; 5432ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (CMP6(CUR_PTR, '#', 'F', 'I', 'X', 'E', 'D')) { 5433ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SKIP(6); 5434ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project val = XML_ATTRIBUTE_FIXED; 5435ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (!IS_BLANK_CH(CUR)) { 5436ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErrMsg(ctxt, XML_ERR_SPACE_REQUIRED, 5437ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "Space required after '#FIXED'\n"); 5438ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 5439ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SKIP_BLANKS; 5440ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 5441ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = xmlParseAttValue(ctxt); 5442ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->instate = XML_PARSER_DTD; 5443ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ret == NULL) { 5444ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErrMsg(ctxt, (xmlParserErrors)ctxt->errNo, 5445ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "Attribute default value declaration error\n"); 5446ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else 5447ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *value = ret; 5448ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(val); 5449ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 5450ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 5451ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 5452ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlParseNotationType: 5453ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctxt: an XML parser context 5454ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 5455ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * parse an Notation attribute type. 5456ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 5457ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Note: the leading 'NOTATION' S part has already being parsed... 5458ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 5459ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [58] NotationType ::= 'NOTATION' S '(' S? Name (S? '|' S? Name)* S? ')' 5460ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 5461ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [ VC: Notation Attributes ] 5462ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Values of this type must match one of the notation names included 5463ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * in the declaration; all notation names in the declaration must be declared. 5464ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 5465ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns: the notation attribute tree built while parsing 5466ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 5467ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 5468ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlEnumerationPtr 5469ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlParseNotationType(xmlParserCtxtPtr ctxt) { 5470ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar *name; 547160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott xmlEnumerationPtr ret = NULL, last = NULL, cur, tmp; 5472ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 5473ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (RAW != '(') { 5474ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErr(ctxt, XML_ERR_NOTATION_NOT_STARTED, NULL); 5475ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 5476ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 5477ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SHRINK; 5478ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project do { 5479ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project NEXT; 5480ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SKIP_BLANKS; 5481ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project name = xmlParseName(ctxt); 5482ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (name == NULL) { 5483ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErrMsg(ctxt, XML_ERR_NAME_REQUIRED, 5484ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "Name expected in NOTATION declaration\n"); 5485df143a5041f03a22808b59c76698770b74692815Selim Gurun xmlFreeEnumeration(ret); 5486df143a5041f03a22808b59c76698770b74692815Selim Gurun return(NULL); 5487ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 548860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott tmp = ret; 548960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott while (tmp != NULL) { 549060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (xmlStrEqual(name, tmp->name)) { 549160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott xmlValidityError(ctxt, XML_DTD_DUP_TOKEN, 549260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott "standalone: attribute notation value token %s duplicated\n", 549360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott name, NULL); 549460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (!xmlDictOwns(ctxt->dict, name)) 549560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott xmlFree((xmlChar *) name); 549660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott break; 549760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } 549860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott tmp = tmp->next; 549960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } 550060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (tmp == NULL) { 550160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott cur = xmlCreateEnumeration(name); 5502df143a5041f03a22808b59c76698770b74692815Selim Gurun if (cur == NULL) { 5503df143a5041f03a22808b59c76698770b74692815Selim Gurun xmlFreeEnumeration(ret); 5504df143a5041f03a22808b59c76698770b74692815Selim Gurun return(NULL); 5505df143a5041f03a22808b59c76698770b74692815Selim Gurun } 550660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (last == NULL) ret = last = cur; 550760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott else { 550860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott last->next = cur; 550960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott last = cur; 551060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } 5511ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 5512ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SKIP_BLANKS; 5513ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } while (RAW == '|'); 5514ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (RAW != ')') { 5515ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErr(ctxt, XML_ERR_NOTATION_NOT_FINISHED, NULL); 5516df143a5041f03a22808b59c76698770b74692815Selim Gurun xmlFreeEnumeration(ret); 5517df143a5041f03a22808b59c76698770b74692815Selim Gurun return(NULL); 5518ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 5519ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project NEXT; 5520ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(ret); 5521ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 5522ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 5523ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 5524ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlParseEnumerationType: 5525ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctxt: an XML parser context 5526ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 5527ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * parse an Enumeration attribute type. 5528ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 5529ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [59] Enumeration ::= '(' S? Nmtoken (S? '|' S? Nmtoken)* S? ')' 5530ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 5531ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [ VC: Enumeration ] 5532ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Values of this type must match one of the Nmtoken tokens in 5533ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * the declaration 5534ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 5535ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns: the enumeration attribute tree built while parsing 5536ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 5537ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 5538ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlEnumerationPtr 5539ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlParseEnumerationType(xmlParserCtxtPtr ctxt) { 5540ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar *name; 554160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott xmlEnumerationPtr ret = NULL, last = NULL, cur, tmp; 5542ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 5543ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (RAW != '(') { 5544ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErr(ctxt, XML_ERR_ATTLIST_NOT_STARTED, NULL); 5545ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 5546ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 5547ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SHRINK; 5548ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project do { 5549ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project NEXT; 5550ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SKIP_BLANKS; 5551ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project name = xmlParseNmtoken(ctxt); 5552ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (name == NULL) { 5553ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErr(ctxt, XML_ERR_NMTOKEN_REQUIRED, NULL); 5554ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(ret); 5555ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 555660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott tmp = ret; 555760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott while (tmp != NULL) { 555860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (xmlStrEqual(name, tmp->name)) { 555960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott xmlValidityError(ctxt, XML_DTD_DUP_TOKEN, 556060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott "standalone: attribute enumeration value token %s duplicated\n", 556160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott name, NULL); 556260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (!xmlDictOwns(ctxt->dict, name)) 556360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott xmlFree(name); 556460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott break; 556560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } 556660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott tmp = tmp->next; 556760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } 556860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (tmp == NULL) { 556960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott cur = xmlCreateEnumeration(name); 557060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (!xmlDictOwns(ctxt->dict, name)) 557160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott xmlFree(name); 5572df143a5041f03a22808b59c76698770b74692815Selim Gurun if (cur == NULL) { 5573df143a5041f03a22808b59c76698770b74692815Selim Gurun xmlFreeEnumeration(ret); 5574df143a5041f03a22808b59c76698770b74692815Selim Gurun return(NULL); 5575df143a5041f03a22808b59c76698770b74692815Selim Gurun } 557660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (last == NULL) ret = last = cur; 557760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott else { 557860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott last->next = cur; 557960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott last = cur; 558060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } 5581ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 5582ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SKIP_BLANKS; 5583ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } while (RAW == '|'); 5584ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (RAW != ')') { 5585ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErr(ctxt, XML_ERR_ATTLIST_NOT_FINISHED, NULL); 5586ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(ret); 5587ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 5588ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project NEXT; 5589ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(ret); 5590ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 5591ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 5592ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 5593ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlParseEnumeratedType: 5594ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctxt: an XML parser context 5595ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @tree: the enumeration tree built while parsing 5596ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 5597ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * parse an Enumerated attribute type. 5598ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 5599ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [57] EnumeratedType ::= NotationType | Enumeration 5600ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 5601ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [58] NotationType ::= 'NOTATION' S '(' S? Name (S? '|' S? Name)* S? ')' 5602ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 5603ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 5604ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns: XML_ATTRIBUTE_ENUMERATION or XML_ATTRIBUTE_NOTATION 5605ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 5606ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 5607ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectint 5608ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlParseEnumeratedType(xmlParserCtxtPtr ctxt, xmlEnumerationPtr *tree) { 5609ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (CMP8(CUR_PTR, 'N', 'O', 'T', 'A', 'T', 'I', 'O', 'N')) { 5610ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SKIP(8); 5611ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (!IS_BLANK_CH(CUR)) { 5612ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErrMsg(ctxt, XML_ERR_SPACE_REQUIRED, 5613ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "Space required after 'NOTATION'\n"); 5614ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(0); 5615ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 5616ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SKIP_BLANKS; 5617ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *tree = xmlParseNotationType(ctxt); 5618ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (*tree == NULL) return(0); 5619ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(XML_ATTRIBUTE_NOTATION); 5620ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 5621ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *tree = xmlParseEnumerationType(ctxt); 5622ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (*tree == NULL) return(0); 5623ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(XML_ATTRIBUTE_ENUMERATION); 5624ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 5625ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 5626ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 5627ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlParseAttributeType: 5628ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctxt: an XML parser context 5629ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @tree: the enumeration tree built while parsing 5630ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 5631ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * parse the Attribute list def for an element 5632ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 5633ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [54] AttType ::= StringType | TokenizedType | EnumeratedType 5634ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 5635ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [55] StringType ::= 'CDATA' 5636ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 5637ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [56] TokenizedType ::= 'ID' | 'IDREF' | 'IDREFS' | 'ENTITY' | 5638ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 'ENTITIES' | 'NMTOKEN' | 'NMTOKENS' 5639ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 5640ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Validity constraints for attribute values syntax are checked in 5641ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlValidateAttributeValue() 5642ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 5643ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [ VC: ID ] 5644ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Values of type ID must match the Name production. A name must not 5645ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * appear more than once in an XML document as a value of this type; 5646ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * i.e., ID values must uniquely identify the elements which bear them. 5647ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 5648ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [ VC: One ID per Element Type ] 5649ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * No element type may have more than one ID attribute specified. 5650ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 5651ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [ VC: ID Attribute Default ] 5652ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * An ID attribute must have a declared default of #IMPLIED or #REQUIRED. 5653ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 5654ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [ VC: IDREF ] 5655ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Values of type IDREF must match the Name production, and values 5656ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * of type IDREFS must match Names; each IDREF Name must match the value 5657ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * of an ID attribute on some element in the XML document; i.e. IDREF 5658ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * values must match the value of some ID attribute. 5659ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 5660ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [ VC: Entity Name ] 5661ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Values of type ENTITY must match the Name production, values 5662ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * of type ENTITIES must match Names; each Entity Name must match the 5663ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * name of an unparsed entity declared in the DTD. 5664ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 5665ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [ VC: Name Token ] 5666ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Values of type NMTOKEN must match the Nmtoken production; values 5667ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * of type NMTOKENS must match Nmtokens. 5668ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 5669ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the attribute type 5670ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 5671ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectint 5672ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlParseAttributeType(xmlParserCtxtPtr ctxt, xmlEnumerationPtr *tree) { 5673ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SHRINK; 5674ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (CMP5(CUR_PTR, 'C', 'D', 'A', 'T', 'A')) { 5675ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SKIP(5); 5676ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(XML_ATTRIBUTE_CDATA); 5677ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if (CMP6(CUR_PTR, 'I', 'D', 'R', 'E', 'F', 'S')) { 5678ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SKIP(6); 5679ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(XML_ATTRIBUTE_IDREFS); 5680ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if (CMP5(CUR_PTR, 'I', 'D', 'R', 'E', 'F')) { 5681ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SKIP(5); 5682ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(XML_ATTRIBUTE_IDREF); 5683ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if ((RAW == 'I') && (NXT(1) == 'D')) { 5684ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SKIP(2); 5685ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(XML_ATTRIBUTE_ID); 5686ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if (CMP6(CUR_PTR, 'E', 'N', 'T', 'I', 'T', 'Y')) { 5687ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SKIP(6); 5688ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(XML_ATTRIBUTE_ENTITY); 5689ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if (CMP8(CUR_PTR, 'E', 'N', 'T', 'I', 'T', 'I', 'E', 'S')) { 5690ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SKIP(8); 5691ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(XML_ATTRIBUTE_ENTITIES); 5692ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if (CMP8(CUR_PTR, 'N', 'M', 'T', 'O', 'K', 'E', 'N', 'S')) { 5693ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SKIP(8); 5694ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(XML_ATTRIBUTE_NMTOKENS); 5695ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if (CMP7(CUR_PTR, 'N', 'M', 'T', 'O', 'K', 'E', 'N')) { 5696ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SKIP(7); 5697ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(XML_ATTRIBUTE_NMTOKEN); 5698ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 5699ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(xmlParseEnumeratedType(ctxt, tree)); 5700ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 5701ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 5702ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 5703ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlParseAttributeListDecl: 5704ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctxt: an XML parser context 5705ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 5706ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * : parse the Attribute list def for an element 5707ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 5708ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [52] AttlistDecl ::= '<!ATTLIST' S Name AttDef* S? '>' 5709ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 5710ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [53] AttDef ::= S Name S AttType S DefaultDecl 5711ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 5712ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 5713ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectvoid 5714ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlParseAttributeListDecl(xmlParserCtxtPtr ctxt) { 5715ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar *elemName; 5716ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar *attrName; 5717ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlEnumerationPtr tree; 5718ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 5719ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (CMP9(CUR_PTR, '<', '!', 'A', 'T', 'T', 'L', 'I', 'S', 'T')) { 5720ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParserInputPtr input = ctxt->input; 5721ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 5722ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SKIP(9); 5723ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (!IS_BLANK_CH(CUR)) { 5724ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErrMsg(ctxt, XML_ERR_SPACE_REQUIRED, 5725ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "Space required after '<!ATTLIST'\n"); 5726ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 5727ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SKIP_BLANKS; 5728ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project elemName = xmlParseName(ctxt); 5729ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (elemName == NULL) { 5730ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErrMsg(ctxt, XML_ERR_NAME_REQUIRED, 5731ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "ATTLIST: no name for Element\n"); 5732ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return; 5733ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 5734ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SKIP_BLANKS; 5735ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project GROW; 5736ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while (RAW != '>') { 5737ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar *check = CUR_PTR; 5738ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int type; 5739ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int def; 5740ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar *defaultValue = NULL; 5741ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 5742ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project GROW; 5743ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project tree = NULL; 5744ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project attrName = xmlParseName(ctxt); 5745ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (attrName == NULL) { 5746ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErrMsg(ctxt, XML_ERR_NAME_REQUIRED, 5747ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "ATTLIST: no name for Attribute\n"); 5748ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 5749ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 5750ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project GROW; 5751ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (!IS_BLANK_CH(CUR)) { 5752ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErrMsg(ctxt, XML_ERR_SPACE_REQUIRED, 5753ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "Space required after the attribute name\n"); 5754ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 5755ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 5756ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SKIP_BLANKS; 5757ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 5758ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project type = xmlParseAttributeType(ctxt, &tree); 5759ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (type <= 0) { 5760ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 5761ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 5762ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 5763ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project GROW; 5764ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (!IS_BLANK_CH(CUR)) { 5765ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErrMsg(ctxt, XML_ERR_SPACE_REQUIRED, 5766ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "Space required after the attribute type\n"); 5767ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (tree != NULL) 5768ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFreeEnumeration(tree); 5769ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 5770ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 5771ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SKIP_BLANKS; 5772ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 5773ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project def = xmlParseDefaultDecl(ctxt, &defaultValue); 5774ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (def <= 0) { 5775ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (defaultValue != NULL) 5776ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree(defaultValue); 5777ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (tree != NULL) 5778ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFreeEnumeration(tree); 5779ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 5780ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 578160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if ((type != XML_ATTRIBUTE_CDATA) && (defaultValue != NULL)) 578260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott xmlAttrNormalizeSpace(defaultValue, defaultValue); 5783ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 5784ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project GROW; 5785ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (RAW != '>') { 5786ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (!IS_BLANK_CH(CUR)) { 5787ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErrMsg(ctxt, XML_ERR_SPACE_REQUIRED, 5788ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "Space required after the attribute default value\n"); 5789ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (defaultValue != NULL) 5790ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree(defaultValue); 5791ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (tree != NULL) 5792ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFreeEnumeration(tree); 5793ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 5794ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 5795ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SKIP_BLANKS; 5796ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 5797ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (check == CUR_PTR) { 5798ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErr(ctxt, XML_ERR_INTERNAL_ERROR, 5799ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "in xmlParseAttributeListDecl\n"); 5800ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (defaultValue != NULL) 5801ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree(defaultValue); 5802ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (tree != NULL) 5803ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFreeEnumeration(tree); 5804ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 5805ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 5806ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ctxt->sax != NULL) && (!ctxt->disableSAX) && 5807ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (ctxt->sax->attributeDecl != NULL)) 5808ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->sax->attributeDecl(ctxt->userData, elemName, attrName, 5809ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project type, def, defaultValue, tree); 5810ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else if (tree != NULL) 5811ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFreeEnumeration(tree); 5812ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 5813ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ctxt->sax2) && (defaultValue != NULL) && 5814ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (def != XML_ATTRIBUTE_IMPLIED) && 5815ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (def != XML_ATTRIBUTE_REQUIRED)) { 5816ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlAddDefAttrs(ctxt, elemName, attrName, defaultValue); 5817ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 5818ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt->sax2) { 5819ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlAddSpecialAttr(ctxt, elemName, attrName, type); 5820ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 5821ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (defaultValue != NULL) 5822ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree(defaultValue); 5823ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project GROW; 5824ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 5825ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (RAW == '>') { 5826ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (input != ctxt->input) { 582760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott xmlValidityError(ctxt, XML_ERR_ENTITY_BOUNDARY, 582860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott "Attribute list declaration doesn't start and stop in the same entity\n", 582960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott NULL, NULL); 5830ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 5831ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project NEXT; 5832ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 5833ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 5834ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 5835ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 5836ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 5837ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlParseElementMixedContentDecl: 5838ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctxt: an XML parser context 5839ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @inputchk: the input used for the current entity, needed for boundary checks 5840ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 5841ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * parse the declaration for a Mixed Element content 5842ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * The leading '(' and spaces have been skipped in xmlParseElementContentDecl 5843ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 5844ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [51] Mixed ::= '(' S? '#PCDATA' (S? '|' S? Name)* S? ')*' | 5845ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * '(' S? '#PCDATA' S? ')' 5846ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 5847ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [ VC: Proper Group/PE Nesting ] applies to [51] too (see [49]) 5848ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 5849ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [ VC: No Duplicate Types ] 5850ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * The same name must not appear more than once in a single 5851ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * mixed-content declaration. 5852ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 5853ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * returns: the list of the xmlElementContentPtr describing the element choices 5854ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 5855ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlElementContentPtr 5856ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlParseElementMixedContentDecl(xmlParserCtxtPtr ctxt, int inputchk) { 5857ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlElementContentPtr ret = NULL, cur = NULL, n; 5858ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar *elem = NULL; 5859ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 5860ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project GROW; 5861ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (CMP7(CUR_PTR, '#', 'P', 'C', 'D', 'A', 'T', 'A')) { 5862ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SKIP(7); 5863ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SKIP_BLANKS; 5864ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SHRINK; 5865ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (RAW == ')') { 5866ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ctxt->validate) && (ctxt->input->id != inputchk)) { 5867ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlValidityError(ctxt, XML_ERR_ENTITY_BOUNDARY, 5868ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project"Element content declaration doesn't start and stop in the same entity\n", 586960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott NULL, NULL); 5870ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 5871ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project NEXT; 5872ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = xmlNewDocElementContent(ctxt->myDoc, NULL, XML_ELEMENT_CONTENT_PCDATA); 587360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (ret == NULL) 587460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott return(NULL); 5875ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (RAW == '*') { 5876ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret->ocur = XML_ELEMENT_CONTENT_MULT; 5877ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project NEXT; 5878ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 5879ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(ret); 5880ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 5881ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((RAW == '(') || (RAW == '|')) { 5882ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = cur = xmlNewDocElementContent(ctxt->myDoc, NULL, XML_ELEMENT_CONTENT_PCDATA); 5883ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ret == NULL) return(NULL); 5884ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 5885ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while (RAW == '|') { 5886ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project NEXT; 5887ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (elem == NULL) { 5888ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = xmlNewDocElementContent(ctxt->myDoc, NULL, XML_ELEMENT_CONTENT_OR); 5889ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ret == NULL) return(NULL); 5890ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret->c1 = cur; 5891ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (cur != NULL) 5892ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur->parent = ret; 5893ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur = ret; 5894ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 5895ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project n = xmlNewDocElementContent(ctxt->myDoc, NULL, XML_ELEMENT_CONTENT_OR); 5896ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (n == NULL) return(NULL); 5897ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project n->c1 = xmlNewDocElementContent(ctxt->myDoc, elem, XML_ELEMENT_CONTENT_ELEMENT); 5898ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (n->c1 != NULL) 5899ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project n->c1->parent = n; 5900ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur->c2 = n; 5901ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (n != NULL) 5902ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project n->parent = cur; 5903ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur = n; 5904ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 5905ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SKIP_BLANKS; 5906ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project elem = xmlParseName(ctxt); 5907ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (elem == NULL) { 5908ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErrMsg(ctxt, XML_ERR_NAME_REQUIRED, 5909ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "xmlParseElementMixedContentDecl : Name expected\n"); 5910ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFreeDocElementContent(ctxt->myDoc, cur); 5911ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 5912ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 5913ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SKIP_BLANKS; 5914ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project GROW; 5915ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 5916ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((RAW == ')') && (NXT(1) == '*')) { 5917ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (elem != NULL) { 5918ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur->c2 = xmlNewDocElementContent(ctxt->myDoc, elem, 5919ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project XML_ELEMENT_CONTENT_ELEMENT); 5920ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (cur->c2 != NULL) 5921ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur->c2->parent = cur; 5922ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 5923df143a5041f03a22808b59c76698770b74692815Selim Gurun if (ret != NULL) 5924df143a5041f03a22808b59c76698770b74692815Selim Gurun ret->ocur = XML_ELEMENT_CONTENT_MULT; 5925ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ctxt->validate) && (ctxt->input->id != inputchk)) { 5926ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlValidityError(ctxt, XML_ERR_ENTITY_BOUNDARY, 5927ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project"Element content declaration doesn't start and stop in the same entity\n", 592860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott NULL, NULL); 5929ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 5930ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SKIP(2); 5931ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 5932ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFreeDocElementContent(ctxt->myDoc, ret); 5933ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErr(ctxt, XML_ERR_MIXED_NOT_STARTED, NULL); 5934ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 5935ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 5936ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 5937ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 5938ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErr(ctxt, XML_ERR_PCDATA_REQUIRED, NULL); 5939ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 5940ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(ret); 5941ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 5942ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 5943ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 5944df143a5041f03a22808b59c76698770b74692815Selim Gurun * xmlParseElementChildrenContentDeclPriv: 5945ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctxt: an XML parser context 5946ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @inputchk: the input used for the current entity, needed for boundary checks 5947df143a5041f03a22808b59c76698770b74692815Selim Gurun * @depth: the level of recursion 5948ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 5949ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * parse the declaration for a Mixed Element content 5950ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * The leading '(' and spaces have been skipped in xmlParseElementContentDecl 5951ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 5952ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 5953ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [47] children ::= (choice | seq) ('?' | '*' | '+')? 5954ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 5955ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [48] cp ::= (Name | choice | seq) ('?' | '*' | '+')? 5956ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 5957ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [49] choice ::= '(' S? cp ( S? '|' S? cp )* S? ')' 5958ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 5959ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [50] seq ::= '(' S? cp ( S? ',' S? cp )* S? ')' 5960ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 5961ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [ VC: Proper Group/PE Nesting ] applies to [49] and [50] 5962ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * TODO Parameter-entity replacement text must be properly nested 5963ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * with parenthesized groups. That is to say, if either of the 5964ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * opening or closing parentheses in a choice, seq, or Mixed 5965ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * construct is contained in the replacement text for a parameter 5966ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * entity, both must be contained in the same replacement text. For 5967ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * interoperability, if a parameter-entity reference appears in a 5968ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * choice, seq, or Mixed construct, its replacement text should not 5969ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * be empty, and neither the first nor last non-blank character of 5970ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * the replacement text should be a connector (| or ,). 5971ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 5972ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the tree of xmlElementContentPtr describing the element 5973ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * hierarchy. 5974ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 5975df143a5041f03a22808b59c76698770b74692815Selim Gurunstatic xmlElementContentPtr 5976df143a5041f03a22808b59c76698770b74692815Selim GurunxmlParseElementChildrenContentDeclPriv(xmlParserCtxtPtr ctxt, int inputchk, 5977df143a5041f03a22808b59c76698770b74692815Selim Gurun int depth) { 5978ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlElementContentPtr ret = NULL, cur = NULL, last = NULL, op = NULL; 5979ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar *elem; 5980ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar type = 0; 5981ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 5982df143a5041f03a22808b59c76698770b74692815Selim Gurun if (((depth > 128) && ((ctxt->options & XML_PARSE_HUGE) == 0)) || 5983df143a5041f03a22808b59c76698770b74692815Selim Gurun (depth > 2048)) { 5984df143a5041f03a22808b59c76698770b74692815Selim Gurun xmlFatalErrMsgInt(ctxt, XML_ERR_ELEMCONTENT_NOT_FINISHED, 5985df143a5041f03a22808b59c76698770b74692815Selim Gurun"xmlParseElementChildrenContentDecl : depth %d too deep, use XML_PARSE_HUGE\n", 5986df143a5041f03a22808b59c76698770b74692815Selim Gurun depth); 5987df143a5041f03a22808b59c76698770b74692815Selim Gurun return(NULL); 5988df143a5041f03a22808b59c76698770b74692815Selim Gurun } 5989ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SKIP_BLANKS; 5990ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project GROW; 5991ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (RAW == '(') { 5992ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int inputid = ctxt->input->id; 5993ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 5994ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* Recurse on first child */ 5995ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project NEXT; 5996ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SKIP_BLANKS; 5997df143a5041f03a22808b59c76698770b74692815Selim Gurun cur = ret = xmlParseElementChildrenContentDeclPriv(ctxt, inputid, 5998df143a5041f03a22808b59c76698770b74692815Selim Gurun depth + 1); 5999ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SKIP_BLANKS; 6000ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project GROW; 6001ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 6002ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project elem = xmlParseName(ctxt); 6003ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (elem == NULL) { 6004ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErr(ctxt, XML_ERR_ELEMCONTENT_NOT_STARTED, NULL); 6005ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 6006ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 6007ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur = ret = xmlNewDocElementContent(ctxt->myDoc, elem, XML_ELEMENT_CONTENT_ELEMENT); 6008ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (cur == NULL) { 6009ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlErrMemory(ctxt, NULL); 6010ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 6011ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 6012ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project GROW; 6013ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (RAW == '?') { 6014ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur->ocur = XML_ELEMENT_CONTENT_OPT; 6015ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project NEXT; 6016ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if (RAW == '*') { 6017ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur->ocur = XML_ELEMENT_CONTENT_MULT; 6018ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project NEXT; 6019ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if (RAW == '+') { 6020ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur->ocur = XML_ELEMENT_CONTENT_PLUS; 6021ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project NEXT; 6022ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 6023ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur->ocur = XML_ELEMENT_CONTENT_ONCE; 6024ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 6025ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project GROW; 6026ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 6027ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SKIP_BLANKS; 6028ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SHRINK; 6029ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while (RAW != ')') { 6030ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 6031ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Each loop we parse one separator and one element. 6032ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 6033ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (RAW == ',') { 6034ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (type == 0) type = CUR; 6035ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 6036ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 6037ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Detect "Name | Name , Name" error 6038ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 6039ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else if (type != CUR) { 6040ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErrMsgInt(ctxt, XML_ERR_SEPARATOR_REQUIRED, 6041ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "xmlParseElementChildrenContentDecl : '%c' expected\n", 6042ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project type); 6043ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((last != NULL) && (last != ret)) 6044ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFreeDocElementContent(ctxt->myDoc, last); 6045ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ret != NULL) 6046ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFreeDocElementContent(ctxt->myDoc, ret); 6047ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 6048ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 6049ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project NEXT; 6050ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 6051ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project op = xmlNewDocElementContent(ctxt->myDoc, NULL, XML_ELEMENT_CONTENT_SEQ); 6052ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (op == NULL) { 6053ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((last != NULL) && (last != ret)) 6054ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFreeDocElementContent(ctxt->myDoc, last); 6055ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFreeDocElementContent(ctxt->myDoc, ret); 6056ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 6057ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 6058ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (last == NULL) { 6059ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project op->c1 = ret; 6060ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ret != NULL) 6061ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret->parent = op; 6062ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = cur = op; 6063ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 6064ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur->c2 = op; 6065ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (op != NULL) 6066ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project op->parent = cur; 6067ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project op->c1 = last; 6068ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (last != NULL) 6069ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project last->parent = op; 6070ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur =op; 6071ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project last = NULL; 6072ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 6073ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if (RAW == '|') { 6074ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (type == 0) type = CUR; 6075ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 6076ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 6077ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Detect "Name , Name | Name" error 6078ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 6079ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else if (type != CUR) { 6080ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErrMsgInt(ctxt, XML_ERR_SEPARATOR_REQUIRED, 6081ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "xmlParseElementChildrenContentDecl : '%c' expected\n", 6082ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project type); 6083ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((last != NULL) && (last != ret)) 6084ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFreeDocElementContent(ctxt->myDoc, last); 6085ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ret != NULL) 6086ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFreeDocElementContent(ctxt->myDoc, ret); 6087ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 6088ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 6089ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project NEXT; 6090ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 6091ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project op = xmlNewDocElementContent(ctxt->myDoc, NULL, XML_ELEMENT_CONTENT_OR); 6092ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (op == NULL) { 6093ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((last != NULL) && (last != ret)) 6094ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFreeDocElementContent(ctxt->myDoc, last); 6095ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ret != NULL) 6096ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFreeDocElementContent(ctxt->myDoc, ret); 6097ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 6098ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 6099ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (last == NULL) { 6100ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project op->c1 = ret; 6101ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ret != NULL) 6102ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret->parent = op; 6103ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = cur = op; 6104ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 6105ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur->c2 = op; 6106ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (op != NULL) 6107ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project op->parent = cur; 6108ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project op->c1 = last; 6109ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (last != NULL) 6110ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project last->parent = op; 6111ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur =op; 6112ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project last = NULL; 6113ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 6114ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 6115ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErr(ctxt, XML_ERR_ELEMCONTENT_NOT_FINISHED, NULL); 611660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if ((last != NULL) && (last != ret)) 611760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott xmlFreeDocElementContent(ctxt->myDoc, last); 6118ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ret != NULL) 6119ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFreeDocElementContent(ctxt->myDoc, ret); 6120ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 6121ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 6122ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project GROW; 6123ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SKIP_BLANKS; 6124ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project GROW; 6125ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (RAW == '(') { 6126ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int inputid = ctxt->input->id; 6127ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* Recurse on second child */ 6128ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project NEXT; 6129ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SKIP_BLANKS; 6130df143a5041f03a22808b59c76698770b74692815Selim Gurun last = xmlParseElementChildrenContentDeclPriv(ctxt, inputid, 6131df143a5041f03a22808b59c76698770b74692815Selim Gurun depth + 1); 6132ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SKIP_BLANKS; 6133ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 6134ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project elem = xmlParseName(ctxt); 6135ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (elem == NULL) { 6136ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErr(ctxt, XML_ERR_ELEMCONTENT_NOT_STARTED, NULL); 6137ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ret != NULL) 6138ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFreeDocElementContent(ctxt->myDoc, ret); 6139ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 6140ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 6141ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project last = xmlNewDocElementContent(ctxt->myDoc, elem, XML_ELEMENT_CONTENT_ELEMENT); 614260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (last == NULL) { 614360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (ret != NULL) 614460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott xmlFreeDocElementContent(ctxt->myDoc, ret); 614560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott return(NULL); 614660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } 6147ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (RAW == '?') { 6148ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project last->ocur = XML_ELEMENT_CONTENT_OPT; 6149ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project NEXT; 6150ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if (RAW == '*') { 6151ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project last->ocur = XML_ELEMENT_CONTENT_MULT; 6152ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project NEXT; 6153ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if (RAW == '+') { 6154ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project last->ocur = XML_ELEMENT_CONTENT_PLUS; 6155ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project NEXT; 6156ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 6157ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project last->ocur = XML_ELEMENT_CONTENT_ONCE; 6158ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 6159ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 6160ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SKIP_BLANKS; 6161ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project GROW; 6162ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 6163ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((cur != NULL) && (last != NULL)) { 6164ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur->c2 = last; 6165ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (last != NULL) 6166ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project last->parent = cur; 6167ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 6168ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ctxt->validate) && (ctxt->input->id != inputchk)) { 6169ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlValidityError(ctxt, XML_ERR_ENTITY_BOUNDARY, 6170ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project"Element content declaration doesn't start and stop in the same entity\n", 617160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott NULL, NULL); 6172ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 6173ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project NEXT; 6174ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (RAW == '?') { 6175ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ret != NULL) { 6176ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ret->ocur == XML_ELEMENT_CONTENT_PLUS) || 6177ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (ret->ocur == XML_ELEMENT_CONTENT_MULT)) 6178ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret->ocur = XML_ELEMENT_CONTENT_MULT; 6179ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else 6180ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret->ocur = XML_ELEMENT_CONTENT_OPT; 6181ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 6182ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project NEXT; 6183ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if (RAW == '*') { 6184ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ret != NULL) { 6185ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret->ocur = XML_ELEMENT_CONTENT_MULT; 6186ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur = ret; 6187ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 6188ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Some normalization: 6189ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * (a | b* | c?)* == (a | b | c)* 6190ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 6191ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while ((cur != NULL) && (cur->type == XML_ELEMENT_CONTENT_OR)) { 6192ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((cur->c1 != NULL) && 6193ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ((cur->c1->ocur == XML_ELEMENT_CONTENT_OPT) || 6194ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (cur->c1->ocur == XML_ELEMENT_CONTENT_MULT))) 6195ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur->c1->ocur = XML_ELEMENT_CONTENT_ONCE; 6196ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((cur->c2 != NULL) && 6197ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ((cur->c2->ocur == XML_ELEMENT_CONTENT_OPT) || 6198ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (cur->c2->ocur == XML_ELEMENT_CONTENT_MULT))) 6199ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur->c2->ocur = XML_ELEMENT_CONTENT_ONCE; 6200ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur = cur->c2; 6201ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 6202ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 6203ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project NEXT; 6204ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if (RAW == '+') { 6205ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ret != NULL) { 6206ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int found = 0; 6207ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 6208ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ret->ocur == XML_ELEMENT_CONTENT_OPT) || 6209ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (ret->ocur == XML_ELEMENT_CONTENT_MULT)) 6210ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret->ocur = XML_ELEMENT_CONTENT_MULT; 6211ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else 6212ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret->ocur = XML_ELEMENT_CONTENT_PLUS; 6213ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 6214ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Some normalization: 6215ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * (a | b*)+ == (a | b)* 6216ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * (a | b?)+ == (a | b)* 6217ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 6218ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while ((cur != NULL) && (cur->type == XML_ELEMENT_CONTENT_OR)) { 6219ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((cur->c1 != NULL) && 6220ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ((cur->c1->ocur == XML_ELEMENT_CONTENT_OPT) || 6221ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (cur->c1->ocur == XML_ELEMENT_CONTENT_MULT))) { 6222ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur->c1->ocur = XML_ELEMENT_CONTENT_ONCE; 6223ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project found = 1; 6224ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 6225ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((cur->c2 != NULL) && 6226ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ((cur->c2->ocur == XML_ELEMENT_CONTENT_OPT) || 6227ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (cur->c2->ocur == XML_ELEMENT_CONTENT_MULT))) { 6228ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur->c2->ocur = XML_ELEMENT_CONTENT_ONCE; 6229ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project found = 1; 6230ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 6231ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur = cur->c2; 6232ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 6233ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (found) 6234ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret->ocur = XML_ELEMENT_CONTENT_MULT; 6235ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 6236ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project NEXT; 6237ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 6238ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(ret); 6239ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 6240ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 6241ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 6242df143a5041f03a22808b59c76698770b74692815Selim Gurun * xmlParseElementChildrenContentDecl: 6243df143a5041f03a22808b59c76698770b74692815Selim Gurun * @ctxt: an XML parser context 6244df143a5041f03a22808b59c76698770b74692815Selim Gurun * @inputchk: the input used for the current entity, needed for boundary checks 6245df143a5041f03a22808b59c76698770b74692815Selim Gurun * 6246df143a5041f03a22808b59c76698770b74692815Selim Gurun * parse the declaration for a Mixed Element content 6247df143a5041f03a22808b59c76698770b74692815Selim Gurun * The leading '(' and spaces have been skipped in xmlParseElementContentDecl 6248df143a5041f03a22808b59c76698770b74692815Selim Gurun * 6249df143a5041f03a22808b59c76698770b74692815Selim Gurun * [47] children ::= (choice | seq) ('?' | '*' | '+')? 6250df143a5041f03a22808b59c76698770b74692815Selim Gurun * 6251df143a5041f03a22808b59c76698770b74692815Selim Gurun * [48] cp ::= (Name | choice | seq) ('?' | '*' | '+')? 6252df143a5041f03a22808b59c76698770b74692815Selim Gurun * 6253df143a5041f03a22808b59c76698770b74692815Selim Gurun * [49] choice ::= '(' S? cp ( S? '|' S? cp )* S? ')' 6254df143a5041f03a22808b59c76698770b74692815Selim Gurun * 6255df143a5041f03a22808b59c76698770b74692815Selim Gurun * [50] seq ::= '(' S? cp ( S? ',' S? cp )* S? ')' 6256df143a5041f03a22808b59c76698770b74692815Selim Gurun * 6257df143a5041f03a22808b59c76698770b74692815Selim Gurun * [ VC: Proper Group/PE Nesting ] applies to [49] and [50] 6258df143a5041f03a22808b59c76698770b74692815Selim Gurun * TODO Parameter-entity replacement text must be properly nested 6259df143a5041f03a22808b59c76698770b74692815Selim Gurun * with parenthesized groups. That is to say, if either of the 6260df143a5041f03a22808b59c76698770b74692815Selim Gurun * opening or closing parentheses in a choice, seq, or Mixed 6261df143a5041f03a22808b59c76698770b74692815Selim Gurun * construct is contained in the replacement text for a parameter 6262df143a5041f03a22808b59c76698770b74692815Selim Gurun * entity, both must be contained in the same replacement text. For 6263df143a5041f03a22808b59c76698770b74692815Selim Gurun * interoperability, if a parameter-entity reference appears in a 6264df143a5041f03a22808b59c76698770b74692815Selim Gurun * choice, seq, or Mixed construct, its replacement text should not 6265df143a5041f03a22808b59c76698770b74692815Selim Gurun * be empty, and neither the first nor last non-blank character of 6266df143a5041f03a22808b59c76698770b74692815Selim Gurun * the replacement text should be a connector (| or ,). 6267df143a5041f03a22808b59c76698770b74692815Selim Gurun * 6268df143a5041f03a22808b59c76698770b74692815Selim Gurun * Returns the tree of xmlElementContentPtr describing the element 6269df143a5041f03a22808b59c76698770b74692815Selim Gurun * hierarchy. 6270df143a5041f03a22808b59c76698770b74692815Selim Gurun */ 6271df143a5041f03a22808b59c76698770b74692815Selim GurunxmlElementContentPtr 6272df143a5041f03a22808b59c76698770b74692815Selim GurunxmlParseElementChildrenContentDecl(xmlParserCtxtPtr ctxt, int inputchk) { 6273df143a5041f03a22808b59c76698770b74692815Selim Gurun /* stub left for API/ABI compat */ 6274df143a5041f03a22808b59c76698770b74692815Selim Gurun return(xmlParseElementChildrenContentDeclPriv(ctxt, inputchk, 1)); 6275df143a5041f03a22808b59c76698770b74692815Selim Gurun} 6276df143a5041f03a22808b59c76698770b74692815Selim Gurun 6277df143a5041f03a22808b59c76698770b74692815Selim Gurun/** 6278ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlParseElementContentDecl: 6279ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctxt: an XML parser context 6280ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @name: the name of the element being defined. 6281ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @result: the Element Content pointer will be stored here if any 6282ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 6283ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * parse the declaration for an Element content either Mixed or Children, 6284ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * the cases EMPTY and ANY are handled directly in xmlParseElementDecl 6285ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 6286ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [46] contentspec ::= 'EMPTY' | 'ANY' | Mixed | children 6287ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 6288ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * returns: the type of element content XML_ELEMENT_TYPE_xxx 6289ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 6290ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 6291ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectint 6292ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlParseElementContentDecl(xmlParserCtxtPtr ctxt, const xmlChar *name, 6293ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlElementContentPtr *result) { 6294ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 6295ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlElementContentPtr tree = NULL; 6296ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int inputid = ctxt->input->id; 6297ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int res; 6298ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 6299ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *result = NULL; 6300ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 6301ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (RAW != '(') { 6302ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErrMsgStr(ctxt, XML_ERR_ELEMCONTENT_NOT_STARTED, 6303ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "xmlParseElementContentDecl : %s '(' expected\n", name); 6304ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(-1); 6305ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 6306ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project NEXT; 6307ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project GROW; 6308ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SKIP_BLANKS; 6309ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (CMP7(CUR_PTR, '#', 'P', 'C', 'D', 'A', 'T', 'A')) { 6310ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project tree = xmlParseElementMixedContentDecl(ctxt, inputid); 6311ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project res = XML_ELEMENT_TYPE_MIXED; 6312ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 6313df143a5041f03a22808b59c76698770b74692815Selim Gurun tree = xmlParseElementChildrenContentDeclPriv(ctxt, inputid, 1); 6314ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project res = XML_ELEMENT_TYPE_ELEMENT; 6315ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 6316ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SKIP_BLANKS; 6317ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *result = tree; 6318ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(res); 6319ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 6320ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 6321ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 6322ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlParseElementDecl: 6323ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctxt: an XML parser context 6324ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 6325ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * parse an Element declaration. 6326ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 6327ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [45] elementdecl ::= '<!ELEMENT' S Name S contentspec S? '>' 6328ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 6329ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [ VC: Unique Element Type Declaration ] 6330ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * No element type may be declared more than once 6331ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 6332ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the type of the element, or -1 in case of error 6333ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 6334ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectint 6335ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlParseElementDecl(xmlParserCtxtPtr ctxt) { 6336ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar *name; 6337ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int ret = -1; 6338ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlElementContentPtr content = NULL; 6339ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 6340ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* GROW; done in the caller */ 6341ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (CMP9(CUR_PTR, '<', '!', 'E', 'L', 'E', 'M', 'E', 'N', 'T')) { 6342ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParserInputPtr input = ctxt->input; 6343ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 6344ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SKIP(9); 6345ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (!IS_BLANK_CH(CUR)) { 6346ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErrMsg(ctxt, XML_ERR_SPACE_REQUIRED, 6347ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "Space required after 'ELEMENT'\n"); 6348ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 6349ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SKIP_BLANKS; 6350ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project name = xmlParseName(ctxt); 6351ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (name == NULL) { 6352ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErrMsg(ctxt, XML_ERR_NAME_REQUIRED, 6353ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "xmlParseElementDecl: no name for Element\n"); 6354ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(-1); 6355ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 6356ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while ((RAW == 0) && (ctxt->inputNr > 1)) 6357ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlPopInput(ctxt); 6358ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (!IS_BLANK_CH(CUR)) { 6359ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErrMsg(ctxt, XML_ERR_SPACE_REQUIRED, 6360ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "Space required after the element name\n"); 6361ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 6362ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SKIP_BLANKS; 6363ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (CMP5(CUR_PTR, 'E', 'M', 'P', 'T', 'Y')) { 6364ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SKIP(5); 6365ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 6366ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Element must always be empty. 6367ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 6368ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = XML_ELEMENT_TYPE_EMPTY; 6369ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if ((RAW == 'A') && (NXT(1) == 'N') && 6370ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (NXT(2) == 'Y')) { 6371ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SKIP(3); 6372ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 6373ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Element is a generic container. 6374ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 6375ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = XML_ELEMENT_TYPE_ANY; 6376ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if (RAW == '(') { 6377ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = xmlParseElementContentDecl(ctxt, name, &content); 6378ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 6379ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 6380ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [ WFC: PEs in Internal Subset ] error handling. 6381ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 6382ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((RAW == '%') && (ctxt->external == 0) && 6383ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (ctxt->inputNr == 1)) { 6384ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErrMsg(ctxt, XML_ERR_PEREF_IN_INT_SUBSET, 6385ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "PEReference: forbidden within markup decl in internal subset\n"); 6386ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 6387ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErrMsg(ctxt, XML_ERR_ELEMCONTENT_NOT_STARTED, 6388ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "xmlParseElementDecl: 'EMPTY', 'ANY' or '(' expected\n"); 6389ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 6390ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(-1); 6391ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 6392ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 6393ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SKIP_BLANKS; 6394ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 6395ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Pop-up of finished entities. 6396ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 6397ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while ((RAW == 0) && (ctxt->inputNr > 1)) 6398ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlPopInput(ctxt); 6399ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SKIP_BLANKS; 6400ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 6401ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (RAW != '>') { 6402ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErr(ctxt, XML_ERR_GT_REQUIRED, NULL); 6403ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (content != NULL) { 6404ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFreeDocElementContent(ctxt->myDoc, content); 6405ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 6406ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 6407ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (input != ctxt->input) { 6408ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErrMsg(ctxt, XML_ERR_ENTITY_BOUNDARY, 6409ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "Element declaration doesn't start and stop in the same entity\n"); 6410ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 6411ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 6412ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project NEXT; 6413ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ctxt->sax != NULL) && (!ctxt->disableSAX) && 6414ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (ctxt->sax->elementDecl != NULL)) { 6415ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (content != NULL) 6416ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project content->parent = NULL; 6417ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->sax->elementDecl(ctxt->userData, name, ret, 6418ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project content); 6419ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((content != NULL) && (content->parent == NULL)) { 6420ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 6421ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * this is a trick: if xmlAddElementDecl is called, 6422ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * instead of copying the full tree it is plugged directly 6423ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * if called from the parser. Avoid duplicating the 6424ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * interfaces or change the API/ABI 6425ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 6426ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFreeDocElementContent(ctxt->myDoc, content); 6427ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 6428ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if (content != NULL) { 6429ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFreeDocElementContent(ctxt->myDoc, content); 6430ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 6431ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 6432ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 6433ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(ret); 6434ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 6435ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 6436ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 6437ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlParseConditionalSections 6438ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctxt: an XML parser context 6439ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 6440ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [61] conditionalSect ::= includeSect | ignoreSect 6441ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [62] includeSect ::= '<![' S? 'INCLUDE' S? '[' extSubsetDecl ']]>' 6442ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [63] ignoreSect ::= '<![' S? 'IGNORE' S? '[' ignoreSectContents* ']]>' 6443ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [64] ignoreSectContents ::= Ignore ('<![' ignoreSectContents ']]>' Ignore)* 6444ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [65] Ignore ::= Char* - (Char* ('<![' | ']]>') Char*) 6445ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 6446ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 6447ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic void 6448ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlParseConditionalSections(xmlParserCtxtPtr ctxt) { 644960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott int id = ctxt->input->id; 645060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott 6451ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SKIP(3); 6452ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SKIP_BLANKS; 6453ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (CMP7(CUR_PTR, 'I', 'N', 'C', 'L', 'U', 'D', 'E')) { 6454ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SKIP(7); 6455ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SKIP_BLANKS; 6456ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (RAW != '[') { 6457ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErr(ctxt, XML_ERR_CONDSEC_INVALID, NULL); 6458ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 645960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (ctxt->input->id != id) { 646060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott xmlValidityError(ctxt, XML_ERR_ENTITY_BOUNDARY, 646160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott "All markup of the conditional section is not in the same entity\n", 646260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott NULL, NULL); 646360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } 6464ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project NEXT; 6465ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 6466ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (xmlParserDebugEntities) { 6467ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ctxt->input != NULL) && (ctxt->input->filename)) 6468ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlGenericError(xmlGenericErrorContext, 6469ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "%s(%d): ", ctxt->input->filename, 6470ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->input->line); 6471ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlGenericError(xmlGenericErrorContext, 6472ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "Entering INCLUDE Conditional Section\n"); 6473ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 6474ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 6475ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while ((RAW != 0) && ((RAW != ']') || (NXT(1) != ']') || 6476ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (NXT(2) != '>'))) { 6477ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar *check = CUR_PTR; 6478ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project unsigned int cons = ctxt->input->consumed; 6479ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 6480ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((RAW == '<') && (NXT(1) == '!') && (NXT(2) == '[')) { 6481ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParseConditionalSections(ctxt); 6482ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if (IS_BLANK_CH(CUR)) { 6483ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project NEXT; 6484ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if (RAW == '%') { 6485ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParsePEReference(ctxt); 6486ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else 6487ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParseMarkupDecl(ctxt); 6488ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 6489ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 6490ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Pop-up of finished entities. 6491ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 6492ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while ((RAW == 0) && (ctxt->inputNr > 1)) 6493ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlPopInput(ctxt); 6494ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 6495ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((CUR_PTR == check) && (cons == ctxt->input->consumed)) { 6496ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErr(ctxt, XML_ERR_EXT_SUBSET_NOT_FINISHED, NULL); 6497ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 6498ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 6499ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 6500ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (xmlParserDebugEntities) { 6501ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ctxt->input != NULL) && (ctxt->input->filename)) 6502ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlGenericError(xmlGenericErrorContext, 6503ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "%s(%d): ", ctxt->input->filename, 6504ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->input->line); 6505ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlGenericError(xmlGenericErrorContext, 6506ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "Leaving INCLUDE Conditional Section\n"); 6507ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 6508ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 6509ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if (CMP6(CUR_PTR, 'I', 'G', 'N', 'O', 'R', 'E')) { 6510ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int state; 6511ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParserInputState instate; 6512ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int depth = 0; 6513ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 6514ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SKIP(6); 6515ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SKIP_BLANKS; 6516ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (RAW != '[') { 6517ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErr(ctxt, XML_ERR_CONDSEC_INVALID, NULL); 6518ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 651960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (ctxt->input->id != id) { 652060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott xmlValidityError(ctxt, XML_ERR_ENTITY_BOUNDARY, 652160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott "All markup of the conditional section is not in the same entity\n", 652260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott NULL, NULL); 652360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } 6524ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project NEXT; 6525ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 6526ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (xmlParserDebugEntities) { 6527ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ctxt->input != NULL) && (ctxt->input->filename)) 6528ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlGenericError(xmlGenericErrorContext, 6529ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "%s(%d): ", ctxt->input->filename, 6530ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->input->line); 6531ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlGenericError(xmlGenericErrorContext, 6532ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "Entering IGNORE Conditional Section\n"); 6533ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 6534ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 6535ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 6536ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Parse up to the end of the conditional section 6537ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * But disable SAX event generating DTD building in the meantime 6538ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 6539ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project state = ctxt->disableSAX; 6540ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project instate = ctxt->instate; 6541ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt->recovery == 0) ctxt->disableSAX = 1; 6542ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->instate = XML_PARSER_IGNORE; 6543ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 6544ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while ((depth >= 0) && (RAW != 0)) { 6545ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((RAW == '<') && (NXT(1) == '!') && (NXT(2) == '[')) { 6546ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project depth++; 6547ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SKIP(3); 6548ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project continue; 6549ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 6550ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((RAW == ']') && (NXT(1) == ']') && (NXT(2) == '>')) { 6551ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (--depth >= 0) SKIP(3); 6552ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project continue; 6553ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 6554ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project NEXT; 6555ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project continue; 6556ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 6557ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 6558ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->disableSAX = state; 6559ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->instate = instate; 6560ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 6561ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (xmlParserDebugEntities) { 6562ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ctxt->input != NULL) && (ctxt->input->filename)) 6563ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlGenericError(xmlGenericErrorContext, 6564ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "%s(%d): ", ctxt->input->filename, 6565ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->input->line); 6566ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlGenericError(xmlGenericErrorContext, 6567ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "Leaving IGNORE Conditional Section\n"); 6568ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 6569ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 6570ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 6571ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErr(ctxt, XML_ERR_CONDSEC_INVALID_KEYWORD, NULL); 6572ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 6573ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 6574ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (RAW == 0) 6575ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SHRINK; 6576ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 6577ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (RAW == 0) { 6578ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErr(ctxt, XML_ERR_CONDSEC_NOT_FINISHED, NULL); 6579ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 658060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (ctxt->input->id != id) { 658160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott xmlValidityError(ctxt, XML_ERR_ENTITY_BOUNDARY, 658260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott "All markup of the conditional section is not in the same entity\n", 658360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott NULL, NULL); 658460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } 6585ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SKIP(3); 6586ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 6587ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 6588ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 6589ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 6590ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlParseMarkupDecl: 6591ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctxt: an XML parser context 6592ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 6593ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * parse Markup declarations 6594ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 6595ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [29] markupdecl ::= elementdecl | AttlistDecl | EntityDecl | 6596ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * NotationDecl | PI | Comment 6597ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 6598ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [ VC: Proper Declaration/PE Nesting ] 6599ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Parameter-entity replacement text must be properly nested with 6600ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * markup declarations. That is to say, if either the first character 6601ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * or the last character of a markup declaration (markupdecl above) is 6602ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * contained in the replacement text for a parameter-entity reference, 6603ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * both must be contained in the same replacement text. 6604ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 6605ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [ WFC: PEs in Internal Subset ] 6606ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * In the internal DTD subset, parameter-entity references can occur 6607ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * only where markup declarations can occur, not within markup declarations. 6608ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * (This does not apply to references that occur in external parameter 6609ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * entities or to the external subset.) 6610ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 6611ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectvoid 6612ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlParseMarkupDecl(xmlParserCtxtPtr ctxt) { 6613ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project GROW; 6614ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (CUR == '<') { 6615ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (NXT(1) == '!') { 6616ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project switch (NXT(2)) { 6617ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case 'E': 6618ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (NXT(3) == 'L') 6619ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParseElementDecl(ctxt); 6620ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else if (NXT(3) == 'N') 6621ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParseEntityDecl(ctxt); 6622ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 6623ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case 'A': 6624ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParseAttributeListDecl(ctxt); 6625ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 6626ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case 'N': 6627ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParseNotationDecl(ctxt); 6628ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 6629ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case '-': 6630ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParseComment(ctxt); 6631ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 6632ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project default: 6633ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* there is an error but it will be detected later */ 6634ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 6635ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 6636ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if (NXT(1) == '?') { 6637ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParsePI(ctxt); 6638ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 6639ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 6640ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 6641ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * This is only for internal subset. On external entities, 6642ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * the replacement is done before parsing stage 6643ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 6644ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ctxt->external == 0) && (ctxt->inputNr == 1)) 6645ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParsePEReference(ctxt); 6646ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 6647ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 6648ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Conditional sections are allowed from entities included 6649ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * by PE References in the internal subset. 6650ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 6651ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ctxt->external == 0) && (ctxt->inputNr > 1)) { 6652ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((RAW == '<') && (NXT(1) == '!') && (NXT(2) == '[')) { 6653ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParseConditionalSections(ctxt); 6654ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 6655ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 6656ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 6657ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->instate = XML_PARSER_DTD; 6658ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 6659ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 6660ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 6661ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlParseTextDecl: 6662ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctxt: an XML parser context 666360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * 6664ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * parse an XML declaration header for external entities 6665ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 6666ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [77] TextDecl ::= '<?xml' VersionInfo? EncodingDecl S? '?>' 6667ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 6668ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 6669ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectvoid 6670ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlParseTextDecl(xmlParserCtxtPtr ctxt) { 6671ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar *version; 6672ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar *encoding; 6673ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 6674ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 6675ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * We know that '<?xml' is here. 6676ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 6677ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((CMP5(CUR_PTR, '<', '?', 'x', 'm', 'l')) && (IS_BLANK_CH(NXT(5)))) { 6678ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SKIP(5); 6679ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 6680ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErr(ctxt, XML_ERR_XMLDECL_NOT_STARTED, NULL); 6681ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return; 6682ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 6683ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 6684ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (!IS_BLANK_CH(CUR)) { 6685ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErrMsg(ctxt, XML_ERR_SPACE_REQUIRED, 6686ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "Space needed after '<?xml'\n"); 6687ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 6688ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SKIP_BLANKS; 6689ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 6690ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 6691ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * We may have the VersionInfo here. 6692ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 6693ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project version = xmlParseVersionInfo(ctxt); 6694ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (version == NULL) 6695ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project version = xmlCharStrdup(XML_DEFAULT_VERSION); 6696ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else { 6697ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (!IS_BLANK_CH(CUR)) { 6698ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErrMsg(ctxt, XML_ERR_SPACE_REQUIRED, 6699ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "Space needed here\n"); 6700ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 6701ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 6702ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->input->version = version; 6703ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 6704ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 6705ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * We must have the encoding declaration 6706ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 6707ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project encoding = xmlParseEncodingDecl(ctxt); 6708ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt->errNo == XML_ERR_UNSUPPORTED_ENCODING) { 6709ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 6710ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * The XML REC instructs us to stop parsing right here 6711ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 6712ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return; 6713ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 6714ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((encoding == NULL) && (ctxt->errNo == XML_ERR_OK)) { 6715ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErrMsg(ctxt, XML_ERR_MISSING_ENCODING, 6716ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "Missing encoding in text declaration\n"); 6717ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 6718ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 6719ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SKIP_BLANKS; 6720ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((RAW == '?') && (NXT(1) == '>')) { 6721ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SKIP(2); 6722ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if (RAW == '>') { 6723ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* Deprecated old WD ... */ 6724ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErr(ctxt, XML_ERR_XMLDECL_NOT_FINISHED, NULL); 6725ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project NEXT; 6726ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 6727ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErr(ctxt, XML_ERR_XMLDECL_NOT_FINISHED, NULL); 6728ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project MOVETO_ENDTAG(CUR_PTR); 6729ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project NEXT; 6730ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 6731ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 6732ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 6733ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 6734ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlParseExternalSubset: 6735ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctxt: an XML parser context 6736ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ExternalID: the external identifier 6737ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @SystemID: the system identifier (or URL) 6738ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 6739ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * parse Markup declarations from an external subset 6740ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 6741ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [30] extSubset ::= textDecl? extSubsetDecl 6742ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 6743ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [31] extSubsetDecl ::= (markupdecl | conditionalSect | PEReference | S) * 6744ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 6745ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectvoid 6746ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlParseExternalSubset(xmlParserCtxtPtr ctxt, const xmlChar *ExternalID, 6747ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar *SystemID) { 6748ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlDetectSAX2(ctxt); 6749ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project GROW; 675060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott 6751df143a5041f03a22808b59c76698770b74692815Selim Gurun if ((ctxt->encoding == NULL) && 675260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott (ctxt->input->end - ctxt->input->cur >= 4)) { 675360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott xmlChar start[4]; 675460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott xmlCharEncoding enc; 675560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott 675660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott start[0] = RAW; 675760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott start[1] = NXT(1); 675860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott start[2] = NXT(2); 675960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott start[3] = NXT(3); 676060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott enc = xmlDetectCharEncoding(start, 4); 676160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (enc != XML_CHAR_ENCODING_NONE) 676260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott xmlSwitchEncoding(ctxt, enc); 676360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } 676460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott 6765ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (CMP5(CUR_PTR, '<', '?', 'x', 'm', 'l')) { 6766ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParseTextDecl(ctxt); 6767ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt->errNo == XML_ERR_UNSUPPORTED_ENCODING) { 6768ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 6769ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * The XML REC instructs us to stop parsing right here 6770ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 6771ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->instate = XML_PARSER_EOF; 6772ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return; 6773ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 6774ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 6775ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt->myDoc == NULL) { 6776ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->myDoc = xmlNewDoc(BAD_CAST "1.0"); 677760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (ctxt->myDoc == NULL) { 677860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott xmlErrMemory(ctxt, "New Doc failed"); 677960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott return; 678060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } 678160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ctxt->myDoc->properties = XML_DOC_INTERNAL; 6782ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 6783ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ctxt->myDoc != NULL) && (ctxt->myDoc->intSubset == NULL)) 6784ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlCreateIntSubset(ctxt->myDoc, NULL, ExternalID, SystemID); 6785ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 6786ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->instate = XML_PARSER_DTD; 6787ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->external = 1; 6788ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while (((RAW == '<') && (NXT(1) == '?')) || 6789ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ((RAW == '<') && (NXT(1) == '!')) || 6790ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (RAW == '%') || IS_BLANK_CH(CUR)) { 6791ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar *check = CUR_PTR; 6792ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project unsigned int cons = ctxt->input->consumed; 6793ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 6794ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project GROW; 6795ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((RAW == '<') && (NXT(1) == '!') && (NXT(2) == '[')) { 6796ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParseConditionalSections(ctxt); 6797ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if (IS_BLANK_CH(CUR)) { 6798ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project NEXT; 6799ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if (RAW == '%') { 6800ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParsePEReference(ctxt); 6801ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else 6802ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParseMarkupDecl(ctxt); 6803ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 6804ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 6805ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Pop-up of finished entities. 6806ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 6807ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while ((RAW == 0) && (ctxt->inputNr > 1)) 6808ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlPopInput(ctxt); 6809ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 6810ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((CUR_PTR == check) && (cons == ctxt->input->consumed)) { 6811ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErr(ctxt, XML_ERR_EXT_SUBSET_NOT_FINISHED, NULL); 6812ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 6813ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 6814ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 6815ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 6816ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (RAW != 0) { 6817ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErr(ctxt, XML_ERR_EXT_SUBSET_NOT_FINISHED, NULL); 6818ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 6819ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 6820ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 6821ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 6822ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 6823ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlParseReference: 6824ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctxt: an XML parser context 682560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * 6826ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * parse and handle entity references in content, depending on the SAX 6827ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * interface, this may end-up in a call to character() if this is a 6828ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * CharRef, a predefined entity, if there is no reference() callback. 6829ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * or if the parser was asked to switch to that mode. 6830ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 6831ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [67] Reference ::= EntityRef | CharRef 6832ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 6833ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectvoid 6834ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlParseReference(xmlParserCtxtPtr ctxt) { 6835ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlEntityPtr ent; 6836ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar *val; 683760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott int was_checked; 683860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott xmlNodePtr list = NULL; 683960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott xmlParserErrors ret = XML_ERR_OK; 684060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott 684160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott 684260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (RAW != '&') 684360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott return; 6844ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 684560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott /* 684660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * Simple case of a CharRef 684760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott */ 6848ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (NXT(1) == '#') { 6849ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int i = 0; 6850ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar out[10]; 6851ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int hex = NXT(2); 6852ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int value = xmlParseCharRef(ctxt); 685360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott 685460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (value == 0) 685560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott return; 6856ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt->charset != XML_CHAR_ENCODING_UTF8) { 6857ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 6858ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * So we are using non-UTF-8 buffers 6859ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Check that the char fit on 8bits, if not 6860ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * generate a CharRef. 6861ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 6862ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (value <= 0xFF) { 6863ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project out[0] = value; 6864ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project out[1] = 0; 6865ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ctxt->sax != NULL) && (ctxt->sax->characters != NULL) && 6866ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (!ctxt->disableSAX)) 6867ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->sax->characters(ctxt->userData, out, 1); 6868ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 6869ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((hex == 'x') || (hex == 'X')) 6870ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project snprintf((char *)out, sizeof(out), "#x%X", value); 6871ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else 6872ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project snprintf((char *)out, sizeof(out), "#%d", value); 6873ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ctxt->sax != NULL) && (ctxt->sax->reference != NULL) && 6874ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (!ctxt->disableSAX)) 6875ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->sax->reference(ctxt->userData, out); 6876ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 6877ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 6878ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 6879ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Just encode the value in UTF-8 6880ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 6881ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project COPY_BUF(0 ,out, i, value); 6882ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project out[i] = 0; 6883ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ctxt->sax != NULL) && (ctxt->sax->characters != NULL) && 6884ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (!ctxt->disableSAX)) 6885ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->sax->characters(ctxt->userData, out, i); 6886ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 688760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott return; 688860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } 6889ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 689060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott /* 689160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * We are seeing an entity reference 689260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott */ 689360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ent = xmlParseEntityRef(ctxt); 689460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (ent == NULL) return; 689560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (!ctxt->wellFormed) 689660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott return; 689760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott was_checked = ent->checked; 6898ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 689960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott /* special case of predefined entities */ 690060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if ((ent->name == NULL) || 690160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott (ent->etype == XML_INTERNAL_PREDEFINED_ENTITY)) { 690260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott val = ent->content; 690360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (val == NULL) return; 690460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott /* 690560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * inline the entity. 690660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott */ 690760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if ((ctxt->sax != NULL) && (ctxt->sax->characters != NULL) && 690860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott (!ctxt->disableSAX)) 690960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ctxt->sax->characters(ctxt->userData, val, xmlStrlen(val)); 691060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott return; 691160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } 6912ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 691360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott /* 691460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * The first reference to the entity trigger a parsing phase 691560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * where the ent->children is filled with the result from 691660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * the parsing. 691760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott */ 691860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (ent->checked == 0) { 691960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott unsigned long oldnbent = ctxt->nbentities; 6920ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 692160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott /* 692260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * This is a bit hackish but this seems the best 692360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * way to make sure both SAX and DOM entity support 692460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * behaves okay. 692560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott */ 692660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott void *user_data; 692760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (ctxt->userData == ctxt) 692860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott user_data = NULL; 692960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott else 693060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott user_data = ctxt->userData; 6931ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 693260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott /* 693360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * Check that this entity is well formed 693460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * 4.3.2: An internal general parsed entity is well-formed 693560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * if its replacement text matches the production labeled 693660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * content. 693760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott */ 693860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (ent->etype == XML_INTERNAL_GENERAL_ENTITY) { 693960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ctxt->depth++; 694060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ret = xmlParseBalancedChunkMemoryInternal(ctxt, ent->content, 694160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott user_data, &list); 694260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ctxt->depth--; 694360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott 694460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } else if (ent->etype == XML_EXTERNAL_GENERAL_PARSED_ENTITY) { 694560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ctxt->depth++; 694660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ret = xmlParseExternalEntityPrivate(ctxt->myDoc, ctxt, ctxt->sax, 694760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott user_data, ctxt->depth, ent->URI, 694860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ent->ExternalID, &list); 694960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ctxt->depth--; 695060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } else { 695160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ret = XML_ERR_ENTITY_PE_INTERNAL; 695260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott xmlErrMsgStr(ctxt, XML_ERR_INTERNAL_ERROR, 695360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott "invalid entity type found\n", NULL); 695460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } 695560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott 695660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott /* 695760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * Store the number of entities needing parsing for this entity 695860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * content and do checkings 695960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott */ 696060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ent->checked = ctxt->nbentities - oldnbent; 696160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (ret == XML_ERR_ENTITY_LOOP) { 696260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott xmlFatalErr(ctxt, XML_ERR_ENTITY_LOOP, NULL); 696360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott xmlFreeNodeList(list); 696460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott return; 696560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } 696660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (xmlParserEntityCheck(ctxt, 0, ent)) { 696760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott xmlFreeNodeList(list); 696860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott return; 696960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } 6970ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 697160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if ((ret == XML_ERR_OK) && (list != NULL)) { 697260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (((ent->etype == XML_INTERNAL_GENERAL_ENTITY) || 697360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott (ent->etype == XML_EXTERNAL_GENERAL_PARSED_ENTITY))&& 697460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott (ent->children == NULL)) { 697560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ent->children = list; 697660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (ctxt->replaceEntities) { 6977ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 697860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * Prune it directly in the generated document 697960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * except for single text nodes. 6980ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 698160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (((list->type == XML_TEXT_NODE) && 698260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott (list->next == NULL)) || 698360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott (ctxt->parseMode == XML_PARSE_READER)) { 698460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott list->parent = (xmlNodePtr) ent; 698560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott list = NULL; 698660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ent->owner = 1; 6987ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 698860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ent->owner = 0; 698960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott while (list != NULL) { 699060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott list->parent = (xmlNodePtr) ctxt->node; 699160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott list->doc = ctxt->myDoc; 699260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (list->next == NULL) 699360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ent->last = list; 699460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott list = list->next; 699560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } 699660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott list = ent->children; 6997ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_LEGACY_ENABLED 699860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (ent->etype == XML_EXTERNAL_GENERAL_PARSED_ENTITY) 699960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott xmlAddEntityReference(ent, list, NULL); 7000ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif /* LIBXML_LEGACY_ENABLED */ 7001ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 700260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } else { 700360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ent->owner = 1; 700460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott while (list != NULL) { 700560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott list->parent = (xmlNodePtr) ent; 7006df143a5041f03a22808b59c76698770b74692815Selim Gurun xmlSetTreeDoc(list, ent->doc); 700760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (list->next == NULL) 700860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ent->last = list; 700960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott list = list->next; 7010ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 7011ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 701260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } else { 701360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott xmlFreeNodeList(list); 701460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott list = NULL; 7015ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 701660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } else if ((ret != XML_ERR_OK) && 701760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott (ret != XML_WAR_UNDECLARED_ENTITY)) { 701860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott xmlFatalErrMsgStr(ctxt, XML_ERR_UNDECLARED_ENTITY, 701960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott "Entity '%s' failed to parse\n", ent->name); 702060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } else if (list != NULL) { 702160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott xmlFreeNodeList(list); 702260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott list = NULL; 702360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } 702460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (ent->checked == 0) 702560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ent->checked = 1; 702660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } else if (ent->checked != 1) { 702760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ctxt->nbentities += ent->checked; 702860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } 702960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott 703060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott /* 703160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * Now that the entity content has been gathered 703260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * provide it to the application, this can take different forms based 703360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * on the parsing modes. 703460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott */ 703560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (ent->children == NULL) { 703660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott /* 703760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * Probably running in SAX mode and the callbacks don't 703860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * build the entity content. So unless we already went 703960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * though parsing for first checking go though the entity 704060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * content to generate callbacks associated to the entity 704160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott */ 704260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (was_checked != 0) { 704360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott void *user_data; 704460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott /* 704560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * This is a bit hackish but this seems the best 704660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * way to make sure both SAX and DOM entity support 704760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * behaves okay. 704860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott */ 704960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (ctxt->userData == ctxt) 705060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott user_data = NULL; 705160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott else 705260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott user_data = ctxt->userData; 705360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott 705460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (ent->etype == XML_INTERNAL_GENERAL_ENTITY) { 705560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ctxt->depth++; 705660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ret = xmlParseBalancedChunkMemoryInternal(ctxt, 705760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ent->content, user_data, NULL); 705860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ctxt->depth--; 705960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } else if (ent->etype == 706060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott XML_EXTERNAL_GENERAL_PARSED_ENTITY) { 706160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ctxt->depth++; 706260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ret = xmlParseExternalEntityPrivate(ctxt->myDoc, ctxt, 706360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ctxt->sax, user_data, ctxt->depth, 706460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ent->URI, ent->ExternalID, NULL); 706560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ctxt->depth--; 706660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } else { 706760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ret = XML_ERR_ENTITY_PE_INTERNAL; 706860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott xmlErrMsgStr(ctxt, XML_ERR_INTERNAL_ERROR, 706960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott "invalid entity type found\n", NULL); 707060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } 707160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (ret == XML_ERR_ENTITY_LOOP) { 707260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott xmlFatalErr(ctxt, XML_ERR_ENTITY_LOOP, NULL); 7073ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return; 7074ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 707560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } 707660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if ((ctxt->sax != NULL) && (ctxt->sax->reference != NULL) && 707760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott (ctxt->replaceEntities == 0) && (!ctxt->disableSAX)) { 707860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott /* 707960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * Entity reference callback comes second, it's somewhat 708060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * superfluous but a compatibility to historical behaviour 708160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott */ 708260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ctxt->sax->reference(ctxt->userData, ent->name); 708360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } 708460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott return; 708560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } 708660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott 708760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott /* 708860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * If we didn't get any children for the entity being built 708960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott */ 709060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if ((ctxt->sax != NULL) && (ctxt->sax->reference != NULL) && 709160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott (ctxt->replaceEntities == 0) && (!ctxt->disableSAX)) { 709260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott /* 709360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * Create a node. 709460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott */ 709560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ctxt->sax->reference(ctxt->userData, ent->name); 709660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott return; 709760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } 709860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott 709960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if ((ctxt->replaceEntities) || (ent->children == NULL)) { 710060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott /* 710160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * There is a problem on the handling of _private for entities 710260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * (bug 155816): Should we copy the content of the field from 710360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * the entity (possibly overwriting some value set by the user 710460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * when a copy is created), should we leave it alone, or should 710560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * we try to take care of different situations? The problem 710660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * is exacerbated by the usage of this field by the xmlReader. 710760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * To fix this bug, we look at _private on the created node 710860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * and, if it's NULL, we copy in whatever was in the entity. 710960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * If it's not NULL we leave it alone. This is somewhat of a 711060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * hack - maybe we should have further tests to determine 711160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * what to do. 711260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott */ 711360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if ((ctxt->node != NULL) && (ent->children != NULL)) { 711460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott /* 711560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * Seems we are generating the DOM content, do 711660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * a simple tree copy for all references except the first 711760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * In the first occurrence list contains the replacement. 711860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * progressive == 2 means we are operating on the Reader 711960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * and since nodes are discarded we must copy all the time. 712060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott */ 712160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (((list == NULL) && (ent->owner == 0)) || 712260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott (ctxt->parseMode == XML_PARSE_READER)) { 712360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott xmlNodePtr nw = NULL, cur, firstChild = NULL; 712460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott 7125ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 712660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * when operating on a reader, the entities definitions 712760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * are always owning the entities subtree. 712860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (ctxt->parseMode == XML_PARSE_READER) 712960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ent->owner = 1; 7130ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 7131ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 713260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott cur = ent->children; 713360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott while (cur != NULL) { 713460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott nw = xmlDocCopyNode(cur, ctxt->myDoc, 1); 713560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (nw != NULL) { 713660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (nw->_private == NULL) 713760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott nw->_private = cur->_private; 713860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (firstChild == NULL){ 713960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott firstChild = nw; 714060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } 714160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott nw = xmlAddChild(ctxt->node, nw); 714260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } 714360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (cur == ent->last) { 7144ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 714560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * needed to detect some strange empty 714660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * node cases in the reader tests 7147ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 714860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if ((ctxt->parseMode == XML_PARSE_READER) && 714960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott (nw != NULL) && 715060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott (nw->type == XML_ELEMENT_NODE) && 715160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott (nw->children == NULL)) 715260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott nw->extra = 1; 7153ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 715460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott break; 715560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } 715660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott cur = cur->next; 715760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } 7158ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_LEGACY_ENABLED 715960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (ent->etype == XML_EXTERNAL_GENERAL_PARSED_ENTITY) 716060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott xmlAddEntityReference(ent, firstChild, nw); 7161ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif /* LIBXML_LEGACY_ENABLED */ 716260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } else if (list == NULL) { 716360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott xmlNodePtr nw = NULL, cur, next, last, 716460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott firstChild = NULL; 716560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott /* 716660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * Copy the entity child list and make it the new 716760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * entity child list. The goal is to make sure any 716860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * ID or REF referenced will be the one from the 716960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * document content and not the entity copy. 717060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott */ 717160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott cur = ent->children; 717260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ent->children = NULL; 717360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott last = ent->last; 717460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ent->last = NULL; 717560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott while (cur != NULL) { 717660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott next = cur->next; 717760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott cur->next = NULL; 717860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott cur->parent = NULL; 717960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott nw = xmlDocCopyNode(cur, ctxt->myDoc, 1); 718060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (nw != NULL) { 718160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (nw->_private == NULL) 718260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott nw->_private = cur->_private; 718360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (firstChild == NULL){ 718460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott firstChild = cur; 7185ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 718660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott xmlAddChild((xmlNodePtr) ent, nw); 718760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott xmlAddChild(ctxt->node, cur); 718860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } 718960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (cur == last) 719060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott break; 719160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott cur = next; 719260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } 719360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (ent->owner == 0) 719460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ent->owner = 1; 7195ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_LEGACY_ENABLED 719660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (ent->etype == XML_EXTERNAL_GENERAL_PARSED_ENTITY) 719760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott xmlAddEntityReference(ent, firstChild, nw); 7198ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif /* LIBXML_LEGACY_ENABLED */ 719960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } else { 720060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott const xmlChar *nbktext; 7201ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 720260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott /* 720360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * the name change is to avoid coalescing of the 720460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * node with a possible previous text one which 720560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * would make ent->children a dangling pointer 720660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott */ 720760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott nbktext = xmlDictLookup(ctxt->dict, BAD_CAST "nbktext", 720860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott -1); 720960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (ent->children->type == XML_TEXT_NODE) 721060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ent->children->name = nbktext; 721160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if ((ent->last != ent->children) && 721260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott (ent->last->type == XML_TEXT_NODE)) 721360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ent->last->name = nbktext; 721460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott xmlAddChildList(ctxt->node, ent->children); 7215ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 721660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott 7217ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 721860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * This is to avoid a nasty side effect, see 721960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * characters() in SAX.c 7220ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 722160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ctxt->nodemem = 0; 722260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ctxt->nodelen = 0; 722360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott return; 7224ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 7225ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 7226ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 7227ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 7228ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 7229ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlParseEntityRef: 7230ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctxt: an XML parser context 7231ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 7232ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * parse ENTITY references declarations 7233ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 7234ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [68] EntityRef ::= '&' Name ';' 7235ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 7236ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [ WFC: Entity Declared ] 7237ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * In a document without any DTD, a document with only an internal DTD 7238ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * subset which contains no parameter entity references, or a document 7239ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * with "standalone='yes'", the Name given in the entity reference 7240ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * must match that in an entity declaration, except that well-formed 7241ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * documents need not declare any of the following entities: amp, lt, 7242ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * gt, apos, quot. The declaration of a parameter entity must precede 7243ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * any reference to it. Similarly, the declaration of a general entity 7244ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * must precede any reference to it which appears in a default value in an 7245ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * attribute-list declaration. Note that if entities are declared in the 7246ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * external subset or in external parameter entities, a non-validating 7247ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * processor is not obligated to read and process their declarations; 7248ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * for such documents, the rule that an entity must be declared is a 7249ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * well-formedness constraint only if standalone='yes'. 7250ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 7251ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [ WFC: Parsed Entity ] 7252ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * An entity reference must not contain the name of an unparsed entity 7253ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 7254ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the xmlEntityPtr if found, or NULL otherwise. 7255ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 7256ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlEntityPtr 7257ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlParseEntityRef(xmlParserCtxtPtr ctxt) { 7258ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar *name; 7259ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlEntityPtr ent = NULL; 7260ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 7261ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project GROW; 7262ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 726360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (RAW != '&') 726460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott return(NULL); 726560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott NEXT; 726660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott name = xmlParseName(ctxt); 726760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (name == NULL) { 726860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott xmlFatalErrMsg(ctxt, XML_ERR_NAME_REQUIRED, 726960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott "xmlParseEntityRef: no name\n"); 727060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott return(NULL); 727160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } 727260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (RAW != ';') { 727360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott xmlFatalErr(ctxt, XML_ERR_ENTITYREF_SEMICOL_MISSING, NULL); 727460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott return(NULL); 727560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } 727660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott NEXT; 7277ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 727860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott /* 727960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * Predefined entites override any extra definition 728060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott */ 728160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if ((ctxt->options & XML_PARSE_OLDSAX) == 0) { 728260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ent = xmlGetPredefinedEntity(name); 728360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (ent != NULL) 728460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott return(ent); 728560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } 7286ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 728760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott /* 728860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * Increate the number of entity references parsed 728960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott */ 729060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ctxt->nbentities++; 7291ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 729260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott /* 729360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * Ask first SAX for entity resolution, otherwise try the 729460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * entities which may have stored in the parser context. 729560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott */ 729660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (ctxt->sax != NULL) { 729760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (ctxt->sax->getEntity != NULL) 729860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ent = ctxt->sax->getEntity(ctxt->userData, name); 729960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if ((ctxt->wellFormed == 1 ) && (ent == NULL) && 730060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott (ctxt->options & XML_PARSE_OLDSAX)) 730160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ent = xmlGetPredefinedEntity(name); 730260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if ((ctxt->wellFormed == 1 ) && (ent == NULL) && 730360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott (ctxt->userData==ctxt)) { 730460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ent = xmlSAX2GetEntity(ctxt, name); 730560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } 730660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } 730760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott /* 730860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * [ WFC: Entity Declared ] 730960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * In a document without any DTD, a document with only an 731060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * internal DTD subset which contains no parameter entity 731160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * references, or a document with "standalone='yes'", the 731260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * Name given in the entity reference must match that in an 731360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * entity declaration, except that well-formed documents 731460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * need not declare any of the following entities: amp, lt, 731560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * gt, apos, quot. 731660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * The declaration of a parameter entity must precede any 731760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * reference to it. 731860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * Similarly, the declaration of a general entity must 731960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * precede any reference to it which appears in a default 732060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * value in an attribute-list declaration. Note that if 732160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * entities are declared in the external subset or in 732260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * external parameter entities, a non-validating processor 732360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * is not obligated to read and process their declarations; 732460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * for such documents, the rule that an entity must be 732560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * declared is a well-formedness constraint only if 732660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * standalone='yes'. 732760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott */ 732860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (ent == NULL) { 732960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if ((ctxt->standalone == 1) || 733060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ((ctxt->hasExternalSubset == 0) && 733160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott (ctxt->hasPErefs == 0))) { 733260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott xmlFatalErrMsgStr(ctxt, XML_ERR_UNDECLARED_ENTITY, 733360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott "Entity '%s' not defined\n", name); 733460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } else { 733560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott xmlErrMsgStr(ctxt, XML_WAR_UNDECLARED_ENTITY, 733660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott "Entity '%s' not defined\n", name); 733760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if ((ctxt->inSubset == 0) && 733860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott (ctxt->sax != NULL) && 733960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott (ctxt->sax->reference != NULL)) { 734060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ctxt->sax->reference(ctxt->userData, name); 7341ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 7342ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 734360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ctxt->valid = 0; 734460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } 734560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott 734660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott /* 734760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * [ WFC: Parsed Entity ] 734860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * An entity reference must not contain the name of an 734960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * unparsed entity 735060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott */ 735160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott else if (ent->etype == XML_EXTERNAL_GENERAL_UNPARSED_ENTITY) { 735260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott xmlFatalErrMsgStr(ctxt, XML_ERR_UNPARSED_ENTITY, 735360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott "Entity reference to unparsed entity %s\n", name); 735460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } 735560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott 735660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott /* 735760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * [ WFC: No External Entity References ] 735860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * Attribute values cannot contain direct or indirect 735960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * entity references to external entities. 736060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott */ 736160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott else if ((ctxt->instate == XML_PARSER_ATTRIBUTE_VALUE) && 736260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott (ent->etype == XML_EXTERNAL_GENERAL_PARSED_ENTITY)) { 736360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott xmlFatalErrMsgStr(ctxt, XML_ERR_ENTITY_IS_EXTERNAL, 736460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott "Attribute references external entity '%s'\n", name); 736560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } 736660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott /* 736760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * [ WFC: No < in Attribute Values ] 736860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * The replacement text of any entity referred to directly or 736960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * indirectly in an attribute value (other than "<") must 737060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * not contain a <. 737160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott */ 737260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott else if ((ctxt->instate == XML_PARSER_ATTRIBUTE_VALUE) && 737360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott (ent != NULL) && (ent->content != NULL) && 737460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott (ent->etype != XML_INTERNAL_PREDEFINED_ENTITY) && 737560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott (xmlStrchr(ent->content, '<'))) { 737660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott xmlFatalErrMsgStr(ctxt, XML_ERR_LT_IN_ATTRIBUTE, 737760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott "'<' in entity '%s' is not allowed in attributes values\n", name); 737860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } 737960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott 738060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott /* 738160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * Internal check, no parameter entities here ... 738260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott */ 738360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott else { 738460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott switch (ent->etype) { 738560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott case XML_INTERNAL_PARAMETER_ENTITY: 738660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott case XML_EXTERNAL_PARAMETER_ENTITY: 738760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott xmlFatalErrMsgStr(ctxt, XML_ERR_ENTITY_IS_PARAMETER, 738860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott "Attempt to reference the parameter entity '%s'\n", 738960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott name); 739060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott break; 739160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott default: 739260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott break; 739360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } 7394ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 739560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott 739660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott /* 739760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * [ WFC: No Recursion ] 739860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * A parsed entity must not contain a recursive reference 739960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * to itself, either directly or indirectly. 740060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * Done somewhere else 740160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott */ 7402ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(ent); 7403ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 7404ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 7405ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 7406ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlParseStringEntityRef: 7407ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctxt: an XML parser context 7408ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @str: a pointer to an index in the string 7409ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 7410ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * parse ENTITY references declarations, but this version parses it from 7411ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * a string value. 7412ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 7413ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [68] EntityRef ::= '&' Name ';' 7414ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 7415ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [ WFC: Entity Declared ] 7416ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * In a document without any DTD, a document with only an internal DTD 7417ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * subset which contains no parameter entity references, or a document 7418ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * with "standalone='yes'", the Name given in the entity reference 7419ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * must match that in an entity declaration, except that well-formed 7420ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * documents need not declare any of the following entities: amp, lt, 7421ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * gt, apos, quot. The declaration of a parameter entity must precede 7422ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * any reference to it. Similarly, the declaration of a general entity 7423ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * must precede any reference to it which appears in a default value in an 7424ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * attribute-list declaration. Note that if entities are declared in the 7425ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * external subset or in external parameter entities, a non-validating 7426ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * processor is not obligated to read and process their declarations; 7427ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * for such documents, the rule that an entity must be declared is a 7428ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * well-formedness constraint only if standalone='yes'. 7429ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 7430ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [ WFC: Parsed Entity ] 7431ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * An entity reference must not contain the name of an unparsed entity 7432ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 7433ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the xmlEntityPtr if found, or NULL otherwise. The str pointer 7434ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * is updated to the current location in the string. 7435ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 7436df143a5041f03a22808b59c76698770b74692815Selim Gurunstatic xmlEntityPtr 7437ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlParseStringEntityRef(xmlParserCtxtPtr ctxt, const xmlChar ** str) { 7438ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar *name; 7439ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar *ptr; 7440ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar cur; 7441ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlEntityPtr ent = NULL; 7442ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 7443ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((str == NULL) || (*str == NULL)) 7444ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 7445ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ptr = *str; 7446ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur = *ptr; 744760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (cur != '&') 744860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott return(NULL); 7449ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 745060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ptr++; 745160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott name = xmlParseStringName(ctxt, &ptr); 745260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (name == NULL) { 745360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott xmlFatalErrMsg(ctxt, XML_ERR_NAME_REQUIRED, 745460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott "xmlParseStringEntityRef: no name\n"); 745560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott *str = ptr; 745660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott return(NULL); 745760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } 745860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (*ptr != ';') { 745960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott xmlFatalErr(ctxt, XML_ERR_ENTITYREF_SEMICOL_MISSING, NULL); 746060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott xmlFree(name); 746160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott *str = ptr; 746260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott return(NULL); 746360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } 746460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ptr++; 7465ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 7466ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 746760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott /* 746860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * Predefined entites override any extra definition 746960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott */ 747060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if ((ctxt->options & XML_PARSE_OLDSAX) == 0) { 747160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ent = xmlGetPredefinedEntity(name); 747260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (ent != NULL) { 747360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott xmlFree(name); 747460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott *str = ptr; 747560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott return(ent); 747660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } 747760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } 7478ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 747960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott /* 748060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * Increate the number of entity references parsed 748160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott */ 748260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ctxt->nbentities++; 7483ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 748460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott /* 748560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * Ask first SAX for entity resolution, otherwise try the 748660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * entities which may have stored in the parser context. 748760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott */ 748860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (ctxt->sax != NULL) { 748960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (ctxt->sax->getEntity != NULL) 749060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ent = ctxt->sax->getEntity(ctxt->userData, name); 749160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if ((ent == NULL) && (ctxt->options & XML_PARSE_OLDSAX)) 749260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ent = xmlGetPredefinedEntity(name); 749360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if ((ent == NULL) && (ctxt->userData==ctxt)) { 749460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ent = xmlSAX2GetEntity(ctxt, name); 7495ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 7496ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 749760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott 749860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott /* 749960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * [ WFC: Entity Declared ] 750060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * In a document without any DTD, a document with only an 750160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * internal DTD subset which contains no parameter entity 750260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * references, or a document with "standalone='yes'", the 750360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * Name given in the entity reference must match that in an 750460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * entity declaration, except that well-formed documents 750560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * need not declare any of the following entities: amp, lt, 750660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * gt, apos, quot. 750760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * The declaration of a parameter entity must precede any 750860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * reference to it. 750960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * Similarly, the declaration of a general entity must 751060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * precede any reference to it which appears in a default 751160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * value in an attribute-list declaration. Note that if 751260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * entities are declared in the external subset or in 751360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * external parameter entities, a non-validating processor 751460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * is not obligated to read and process their declarations; 751560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * for such documents, the rule that an entity must be 751660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * declared is a well-formedness constraint only if 751760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * standalone='yes'. 751860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott */ 751960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (ent == NULL) { 752060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if ((ctxt->standalone == 1) || 752160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ((ctxt->hasExternalSubset == 0) && 752260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott (ctxt->hasPErefs == 0))) { 752360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott xmlFatalErrMsgStr(ctxt, XML_ERR_UNDECLARED_ENTITY, 752460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott "Entity '%s' not defined\n", name); 752560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } else { 752660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott xmlErrMsgStr(ctxt, XML_WAR_UNDECLARED_ENTITY, 752760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott "Entity '%s' not defined\n", 752860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott name); 752960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } 753060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott /* TODO ? check regressions ctxt->valid = 0; */ 753160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } 753260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott 753360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott /* 753460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * [ WFC: Parsed Entity ] 753560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * An entity reference must not contain the name of an 753660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * unparsed entity 753760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott */ 753860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott else if (ent->etype == XML_EXTERNAL_GENERAL_UNPARSED_ENTITY) { 753960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott xmlFatalErrMsgStr(ctxt, XML_ERR_UNPARSED_ENTITY, 754060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott "Entity reference to unparsed entity %s\n", name); 754160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } 754260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott 754360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott /* 754460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * [ WFC: No External Entity References ] 754560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * Attribute values cannot contain direct or indirect 754660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * entity references to external entities. 754760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott */ 754860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott else if ((ctxt->instate == XML_PARSER_ATTRIBUTE_VALUE) && 754960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott (ent->etype == XML_EXTERNAL_GENERAL_PARSED_ENTITY)) { 755060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott xmlFatalErrMsgStr(ctxt, XML_ERR_ENTITY_IS_EXTERNAL, 755160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott "Attribute references external entity '%s'\n", name); 755260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } 755360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott /* 755460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * [ WFC: No < in Attribute Values ] 755560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * The replacement text of any entity referred to directly or 755660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * indirectly in an attribute value (other than "<") must 755760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * not contain a <. 755860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott */ 755960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott else if ((ctxt->instate == XML_PARSER_ATTRIBUTE_VALUE) && 756060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott (ent != NULL) && (ent->content != NULL) && 756160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott (ent->etype != XML_INTERNAL_PREDEFINED_ENTITY) && 756260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott (xmlStrchr(ent->content, '<'))) { 756360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott xmlFatalErrMsgStr(ctxt, XML_ERR_LT_IN_ATTRIBUTE, 756460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott "'<' in entity '%s' is not allowed in attributes values\n", 756560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott name); 756660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } 756760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott 756860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott /* 756960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * Internal check, no parameter entities here ... 757060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott */ 757160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott else { 757260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott switch (ent->etype) { 757360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott case XML_INTERNAL_PARAMETER_ENTITY: 757460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott case XML_EXTERNAL_PARAMETER_ENTITY: 757560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott xmlFatalErrMsgStr(ctxt, XML_ERR_ENTITY_IS_PARAMETER, 757660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott "Attempt to reference the parameter entity '%s'\n", 757760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott name); 757860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott break; 757960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott default: 758060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott break; 758160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } 758260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } 758360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott 758460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott /* 758560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * [ WFC: No Recursion ] 758660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * A parsed entity must not contain a recursive reference 758760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * to itself, either directly or indirectly. 758860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * Done somewhere else 758960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott */ 759060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott 759160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott xmlFree(name); 7592ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *str = ptr; 7593ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(ent); 7594ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 7595ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 7596ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 7597ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlParsePEReference: 7598ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctxt: an XML parser context 7599ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 7600ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * parse PEReference declarations 7601ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * The entity content is handled directly by pushing it's content as 7602ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * a new input stream. 7603ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 7604ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [69] PEReference ::= '%' Name ';' 7605ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 7606ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [ WFC: No Recursion ] 7607ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * A parsed entity must not contain a recursive 7608ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * reference to itself, either directly or indirectly. 7609ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 7610ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [ WFC: Entity Declared ] 7611ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * In a document without any DTD, a document with only an internal DTD 7612ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * subset which contains no parameter entity references, or a document 7613ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * with "standalone='yes'", ... ... The declaration of a parameter 7614ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * entity must precede any reference to it... 7615ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 7616ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [ VC: Entity Declared ] 7617ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * In a document with an external subset or external parameter entities 7618ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * with "standalone='no'", ... ... The declaration of a parameter entity 7619ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * must precede any reference to it... 7620ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 7621ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [ WFC: In DTD ] 7622ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Parameter-entity references may only appear in the DTD. 7623ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * NOTE: misleading but this is handled. 7624ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 7625ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectvoid 7626ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlParsePEReference(xmlParserCtxtPtr ctxt) 7627ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{ 7628ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar *name; 7629ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlEntityPtr entity = NULL; 7630ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParserInputPtr input; 7631ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 763260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (RAW != '%') 763360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott return; 763460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott NEXT; 763560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott name = xmlParseName(ctxt); 763660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (name == NULL) { 763760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott xmlFatalErrMsg(ctxt, XML_ERR_NAME_REQUIRED, 763860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott "xmlParsePEReference: no name\n"); 763960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott return; 764060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } 764160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (RAW != ';') { 764260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott xmlFatalErr(ctxt, XML_ERR_ENTITYREF_SEMICOL_MISSING, NULL); 764360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott return; 764460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } 764560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott 764660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott NEXT; 764760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott 764860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott /* 764960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * Increate the number of entity references parsed 765060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott */ 765160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ctxt->nbentities++; 765260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott 765360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott /* 765460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * Request the entity from SAX 765560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott */ 765660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if ((ctxt->sax != NULL) && 765760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott (ctxt->sax->getParameterEntity != NULL)) 765860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott entity = ctxt->sax->getParameterEntity(ctxt->userData, 765960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott name); 766060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (entity == NULL) { 766160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott /* 766260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * [ WFC: Entity Declared ] 766360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * In a document without any DTD, a document with only an 766460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * internal DTD subset which contains no parameter entity 766560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * references, or a document with "standalone='yes'", ... 766660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * ... The declaration of a parameter entity must precede 766760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * any reference to it... 766860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott */ 766960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if ((ctxt->standalone == 1) || 767060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ((ctxt->hasExternalSubset == 0) && 767160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott (ctxt->hasPErefs == 0))) { 767260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott xmlFatalErrMsgStr(ctxt, XML_ERR_UNDECLARED_ENTITY, 767360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott "PEReference: %%%s; not found\n", 767460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott name); 767560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } else { 767660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott /* 767760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * [ VC: Entity Declared ] 767860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * In a document with an external subset or external 767960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * parameter entities with "standalone='no'", ... 768060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * ... The declaration of a parameter entity must 768160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * precede any reference to it... 768260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott */ 768360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott xmlWarningMsg(ctxt, XML_WAR_UNDECLARED_ENTITY, 768460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott "PEReference: %%%s; not found\n", 768560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott name, NULL); 768660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ctxt->valid = 0; 768760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } 768860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } else { 768960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott /* 769060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * Internal checking in case the entity quest barfed 769160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott */ 769260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if ((entity->etype != XML_INTERNAL_PARAMETER_ENTITY) && 769360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott (entity->etype != XML_EXTERNAL_PARAMETER_ENTITY)) { 769460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott xmlWarningMsg(ctxt, XML_WAR_UNDECLARED_ENTITY, 769560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott "Internal: %%%s; is not a parameter entity\n", 769660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott name, NULL); 769760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } else if (ctxt->input->free != deallocblankswrapper) { 769860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott input = xmlNewBlanksWrapperInputStream(ctxt, entity); 769960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (xmlPushInput(ctxt, input) < 0) 770060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott return; 770160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } else { 770260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott /* 770360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * TODO !!! 770460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * handle the extra spaces added before and after 770560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * c.f. http://www.w3.org/TR/REC-xml#as-PE 770660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott */ 770760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott input = xmlNewEntityInputStream(ctxt, entity); 770860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (xmlPushInput(ctxt, input) < 0) 770960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott return; 771060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if ((entity->etype == XML_EXTERNAL_PARAMETER_ENTITY) && 771160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott (CMP5(CUR_PTR, '<', '?', 'x', 'm', 'l')) && 771260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott (IS_BLANK_CH(NXT(5)))) { 771360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott xmlParseTextDecl(ctxt); 771460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (ctxt->errNo == 771560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott XML_ERR_UNSUPPORTED_ENCODING) { 771660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott /* 771760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * The XML REC instructs us to stop parsing 771860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * right here 771960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott */ 772060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ctxt->instate = XML_PARSER_EOF; 772160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott return; 772260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } 772360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } 772460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } 7725ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 772660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ctxt->hasPErefs = 1; 772760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott} 772860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott 772960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott/** 773060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * xmlLoadEntityContent: 773160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * @ctxt: an XML parser context 773260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * @entity: an unloaded system entity 773360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * 773460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * Load the original content of the given system entity from the 773560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * ExternalID/SystemID given. This is to be used for Included in Literal 773660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * http://www.w3.org/TR/REC-xml/#inliteral processing of entities references 773760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * 773860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * Returns 0 in case of success and -1 in case of failure 773960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott */ 774060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scottstatic int 774160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick ScottxmlLoadEntityContent(xmlParserCtxtPtr ctxt, xmlEntityPtr entity) { 774260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott xmlParserInputPtr input; 774360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott xmlBufferPtr buf; 774460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott int l, c; 774560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott int count = 0; 774660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott 774760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if ((ctxt == NULL) || (entity == NULL) || 774860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ((entity->etype != XML_EXTERNAL_PARAMETER_ENTITY) && 774960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott (entity->etype != XML_EXTERNAL_GENERAL_PARSED_ENTITY)) || 775060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott (entity->content != NULL)) { 775160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott xmlFatalErr(ctxt, XML_ERR_INTERNAL_ERROR, 775260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott "xmlLoadEntityContent parameter error"); 775360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott return(-1); 775460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } 775560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott 775660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (xmlParserDebugEntities) 775760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott xmlGenericError(xmlGenericErrorContext, 775860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott "Reading %s entity content input\n", entity->name); 775960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott 776060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott buf = xmlBufferCreate(); 776160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (buf == NULL) { 776260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott xmlFatalErr(ctxt, XML_ERR_INTERNAL_ERROR, 776360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott "xmlLoadEntityContent parameter error"); 776460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott return(-1); 776560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } 776660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott 776760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott input = xmlNewEntityInputStream(ctxt, entity); 776860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (input == NULL) { 776960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott xmlFatalErr(ctxt, XML_ERR_INTERNAL_ERROR, 777060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott "xmlLoadEntityContent input error"); 777160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott xmlBufferFree(buf); 777260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott return(-1); 777360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } 777460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott 777560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott /* 777660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * Push the entity as the current input, read char by char 777760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * saving to the buffer until the end of the entity or an error 777860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott */ 777960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (xmlPushInput(ctxt, input) < 0) { 778060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott xmlBufferFree(buf); 778160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott return(-1); 778260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } 778360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott 778460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott GROW; 778560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott c = CUR_CHAR(l); 778660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott while ((ctxt->input == input) && (ctxt->input->cur < ctxt->input->end) && 778760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott (IS_CHAR(c))) { 778860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott xmlBufferAdd(buf, ctxt->input->cur, l); 778960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (count++ > 100) { 779060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott count = 0; 779160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott GROW; 779260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } 779360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott NEXTL(l); 779460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott c = CUR_CHAR(l); 779560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } 779660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott 779760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if ((ctxt->input == input) && (ctxt->input->cur >= ctxt->input->end)) { 779860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott xmlPopInput(ctxt); 779960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } else if (!IS_CHAR(c)) { 780060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott xmlFatalErrMsgInt(ctxt, XML_ERR_INVALID_CHAR, 780160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott "xmlLoadEntityContent: invalid char value %d\n", 780260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott c); 780360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott xmlBufferFree(buf); 780460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott return(-1); 780560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } 780660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott entity->content = buf->content; 780760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott buf->content = NULL; 780860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott xmlBufferFree(buf); 780960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott 781060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott return(0); 7811ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 7812ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 7813ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 7814ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlParseStringPEReference: 7815ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctxt: an XML parser context 7816ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @str: a pointer to an index in the string 7817ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 7818ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * parse PEReference declarations 7819ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 7820ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [69] PEReference ::= '%' Name ';' 7821ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 7822ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [ WFC: No Recursion ] 7823ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * A parsed entity must not contain a recursive 782460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * reference to itself, either directly or indirectly. 7825ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 7826ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [ WFC: Entity Declared ] 7827ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * In a document without any DTD, a document with only an internal DTD 7828ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * subset which contains no parameter entity references, or a document 7829ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * with "standalone='yes'", ... ... The declaration of a parameter 7830ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * entity must precede any reference to it... 7831ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 7832ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [ VC: Entity Declared ] 7833ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * In a document with an external subset or external parameter entities 7834ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * with "standalone='no'", ... ... The declaration of a parameter entity 7835ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * must precede any reference to it... 7836ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 7837ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [ WFC: In DTD ] 7838ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Parameter-entity references may only appear in the DTD. 7839ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * NOTE: misleading but this is handled. 7840ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 7841ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the string of the entity content. 7842ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * str is updated to the current value of the index 7843ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 7844df143a5041f03a22808b59c76698770b74692815Selim Gurunstatic xmlEntityPtr 7845ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlParseStringPEReference(xmlParserCtxtPtr ctxt, const xmlChar **str) { 7846ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar *ptr; 7847ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar cur; 7848ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar *name; 7849ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlEntityPtr entity = NULL; 7850ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 7851ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((str == NULL) || (*str == NULL)) return(NULL); 7852ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ptr = *str; 7853ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur = *ptr; 785460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (cur != '%') 785560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott return(NULL); 785660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ptr++; 785760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott name = xmlParseStringName(ctxt, &ptr); 785860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (name == NULL) { 785960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott xmlFatalErrMsg(ctxt, XML_ERR_NAME_REQUIRED, 786060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott "xmlParseStringPEReference: no name\n"); 786160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott *str = ptr; 786260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott return(NULL); 786360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } 786460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott cur = *ptr; 786560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (cur != ';') { 786660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott xmlFatalErr(ctxt, XML_ERR_ENTITYREF_SEMICOL_MISSING, NULL); 786760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott xmlFree(name); 786860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott *str = ptr; 786960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott return(NULL); 787060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } 787160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ptr++; 787260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott 787360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott /* 787460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * Increate the number of entity references parsed 787560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott */ 787660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ctxt->nbentities++; 787760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott 787860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott /* 787960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * Request the entity from SAX 788060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott */ 788160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if ((ctxt->sax != NULL) && 788260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott (ctxt->sax->getParameterEntity != NULL)) 788360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott entity = ctxt->sax->getParameterEntity(ctxt->userData, 788460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott name); 788560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (entity == NULL) { 788660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott /* 788760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * [ WFC: Entity Declared ] 788860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * In a document without any DTD, a document with only an 788960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * internal DTD subset which contains no parameter entity 789060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * references, or a document with "standalone='yes'", ... 789160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * ... The declaration of a parameter entity must precede 789260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * any reference to it... 789360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott */ 789460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if ((ctxt->standalone == 1) || 789560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ((ctxt->hasExternalSubset == 0) && (ctxt->hasPErefs == 0))) { 789660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott xmlFatalErrMsgStr(ctxt, XML_ERR_UNDECLARED_ENTITY, 789760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott "PEReference: %%%s; not found\n", name); 7898ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 789960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott /* 790060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * [ VC: Entity Declared ] 790160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * In a document with an external subset or external 790260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * parameter entities with "standalone='no'", ... 790360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * ... The declaration of a parameter entity must 790460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * precede any reference to it... 790560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott */ 790660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott xmlWarningMsg(ctxt, XML_WAR_UNDECLARED_ENTITY, 790760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott "PEReference: %%%s; not found\n", 790860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott name, NULL); 790960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ctxt->valid = 0; 791060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } 791160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } else { 791260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott /* 791360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * Internal checking in case the entity quest barfed 791460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott */ 791560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if ((entity->etype != XML_INTERNAL_PARAMETER_ENTITY) && 791660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott (entity->etype != XML_EXTERNAL_PARAMETER_ENTITY)) { 791760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott xmlWarningMsg(ctxt, XML_WAR_UNDECLARED_ENTITY, 791860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott "%%%s; is not a parameter entity\n", 791960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott name, NULL); 7920ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 7921ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 792260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ctxt->hasPErefs = 1; 792360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott xmlFree(name); 7924ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *str = ptr; 7925ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(entity); 7926ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 7927ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 7928ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 7929ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlParseDocTypeDecl: 7930ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctxt: an XML parser context 7931ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 7932ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * parse a DOCTYPE declaration 7933ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 7934ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [28] doctypedecl ::= '<!DOCTYPE' S Name (S ExternalID)? S? 7935ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * ('[' (markupdecl | PEReference | S)* ']' S?)? '>' 7936ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 7937ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [ VC: Root Element Type ] 7938ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * The Name in the document type declaration must match the element 7939ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * type of the root element. 7940ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 7941ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 7942ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectvoid 7943ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlParseDocTypeDecl(xmlParserCtxtPtr ctxt) { 7944ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar *name = NULL; 7945ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar *ExternalID = NULL; 7946ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar *URI = NULL; 7947ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 7948ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 7949ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * We know that '<!DOCTYPE' has been detected. 7950ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 7951ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SKIP(9); 7952ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 7953ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SKIP_BLANKS; 7954ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 7955ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 7956ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Parse the DOCTYPE name. 7957ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 7958ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project name = xmlParseName(ctxt); 7959ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (name == NULL) { 7960ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErrMsg(ctxt, XML_ERR_NAME_REQUIRED, 7961ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "xmlParseDocTypeDecl : no DOCTYPE name !\n"); 7962ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 7963ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->intSubName = name; 7964ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 7965ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SKIP_BLANKS; 7966ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 7967ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 7968ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Check for SystemID and ExternalID 7969ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 7970ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project URI = xmlParseExternalID(ctxt, &ExternalID, 1); 7971ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 7972ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((URI != NULL) || (ExternalID != NULL)) { 7973ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->hasExternalSubset = 1; 7974ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 7975ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->extSubURI = URI; 7976ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->extSubSystem = ExternalID; 7977ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 7978ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SKIP_BLANKS; 7979ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 7980ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 7981ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Create and update the internal subset. 7982ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 7983ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ctxt->sax != NULL) && (ctxt->sax->internalSubset != NULL) && 7984ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (!ctxt->disableSAX)) 7985ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->sax->internalSubset(ctxt->userData, name, ExternalID, URI); 7986ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 7987ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 7988ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Is there any internal subset declarations ? 7989ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * they are handled separately in xmlParseInternalSubset() 7990ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 7991ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (RAW == '[') 7992ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return; 7993ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 7994ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 7995ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * We should be at the end of the DOCTYPE declaration. 7996ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 7997ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (RAW != '>') { 7998ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErr(ctxt, XML_ERR_DOCTYPE_NOT_FINISHED, NULL); 7999ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 8000ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project NEXT; 8001ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 8002ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 8003ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 8004ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlParseInternalSubset: 8005ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctxt: an XML parser context 8006ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 8007ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * parse the internal subset declaration 8008ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 8009ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [28 end] ('[' (markupdecl | PEReference | S)* ']' S?)? '>' 8010ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 8011ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 8012ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic void 8013ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlParseInternalSubset(xmlParserCtxtPtr ctxt) { 8014ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 8015ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Is there any DTD definition ? 8016ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 8017ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (RAW == '[') { 8018ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->instate = XML_PARSER_DTD; 8019ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project NEXT; 8020ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 8021ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Parse the succession of Markup declarations and 8022ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * PEReferences. 8023ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Subsequence (markupdecl | PEReference | S)* 8024ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 8025ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while (RAW != ']') { 8026ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar *check = CUR_PTR; 8027ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project unsigned int cons = ctxt->input->consumed; 8028ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 8029ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SKIP_BLANKS; 8030ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParseMarkupDecl(ctxt); 8031ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParsePEReference(ctxt); 8032ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 8033ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 8034ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Pop-up of finished entities. 8035ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 8036ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while ((RAW == 0) && (ctxt->inputNr > 1)) 8037ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlPopInput(ctxt); 8038ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 8039ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((CUR_PTR == check) && (cons == ctxt->input->consumed)) { 8040ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErr(ctxt, XML_ERR_INTERNAL_ERROR, 8041ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "xmlParseInternalSubset: error detected in Markup declaration\n"); 8042ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 8043ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 8044ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 8045ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (RAW == ']') { 8046ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project NEXT; 8047ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SKIP_BLANKS; 8048ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 8049ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 8050ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 8051ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 8052ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * We should be at the end of the DOCTYPE declaration. 8053ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 8054ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (RAW != '>') { 8055ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErr(ctxt, XML_ERR_DOCTYPE_NOT_FINISHED, NULL); 8056ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 8057ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project NEXT; 8058ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 8059ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 8060ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_SAX1_ENABLED 8061ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 8062ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlParseAttribute: 8063ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctxt: an XML parser context 8064ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @value: a xmlChar ** used to store the value of the attribute 8065ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 8066ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * parse an attribute 8067ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 8068ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [41] Attribute ::= Name Eq AttValue 8069ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 8070ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [ WFC: No External Entity References ] 8071ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Attribute values cannot contain direct or indirect entity references 8072ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * to external entities. 8073ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 8074ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [ WFC: No < in Attribute Values ] 8075ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * The replacement text of any entity referred to directly or indirectly in 8076ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * an attribute value (other than "<") must not contain a <. 8077ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 8078ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [ VC: Attribute Value Type ] 8079ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * The attribute must have been declared; the value must be of the type 8080ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * declared for it. 8081ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 8082ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [25] Eq ::= S? '=' S? 8083ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 8084ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * With namespace: 8085ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 8086ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [NS 11] Attribute ::= QName Eq AttValue 8087ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 8088ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Also the case QName == xmlns:??? is handled independently as a namespace 8089ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * definition. 8090ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 8091ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the attribute name, and the value in *value. 8092ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 8093ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 8094ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectconst xmlChar * 8095ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlParseAttribute(xmlParserCtxtPtr ctxt, xmlChar **value) { 8096ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar *name; 8097ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar *val; 8098ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 8099ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *value = NULL; 8100ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project GROW; 8101ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project name = xmlParseName(ctxt); 8102ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (name == NULL) { 8103ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErrMsg(ctxt, XML_ERR_NAME_REQUIRED, 8104ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "error parsing attribute name\n"); 8105ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 8106ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 8107ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 8108ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 8109ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * read the value 8110ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 8111ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SKIP_BLANKS; 8112ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (RAW == '=') { 8113ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project NEXT; 8114ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SKIP_BLANKS; 8115ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project val = xmlParseAttValue(ctxt); 8116ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->instate = XML_PARSER_CONTENT; 8117ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 8118ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErrMsgStr(ctxt, XML_ERR_ATTRIBUTE_WITHOUT_VALUE, 8119ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "Specification mandate value for attribute %s\n", name); 8120ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 8121ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 8122ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 8123ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 8124ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Check that xml:lang conforms to the specification 8125ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * No more registered as an error, just generate a warning now 8126ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * since this was deprecated in XML second edition 8127ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 8128ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ctxt->pedantic) && (xmlStrEqual(name, BAD_CAST "xml:lang"))) { 8129ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (!xmlCheckLanguageID(val)) { 8130ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlWarningMsg(ctxt, XML_WAR_LANG_VALUE, 8131ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "Malformed value for xml:lang : %s\n", 8132ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project val, NULL); 8133ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 8134ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 8135ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 8136ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 8137ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Check that xml:space conforms to the specification 8138ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 8139ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (xmlStrEqual(name, BAD_CAST "xml:space")) { 8140ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (xmlStrEqual(val, BAD_CAST "default")) 8141ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *(ctxt->space) = 0; 8142ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else if (xmlStrEqual(val, BAD_CAST "preserve")) 8143ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *(ctxt->space) = 1; 8144ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else { 8145ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlWarningMsg(ctxt, XML_WAR_SPACE_VALUE, 8146ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project"Invalid value \"%s\" for xml:space : \"default\" or \"preserve\" expected\n", 8147ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project val, NULL); 8148ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 8149ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 8150ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 8151ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *value = val; 8152ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(name); 8153ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 8154ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 8155ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 8156ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlParseStartTag: 8157ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctxt: an XML parser context 8158ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 8159ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * parse a start of tag either for rule element or 8160ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * EmptyElement. In both case we don't parse the tag closing chars. 8161ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 8162ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [40] STag ::= '<' Name (S Attribute)* S? '>' 8163ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 8164ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [ WFC: Unique Att Spec ] 8165ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * No attribute name may appear more than once in the same start-tag or 8166ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * empty-element tag. 8167ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 8168ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [44] EmptyElemTag ::= '<' Name (S Attribute)* S? '/>' 8169ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 8170ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [ WFC: Unique Att Spec ] 8171ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * No attribute name may appear more than once in the same start-tag or 8172ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * empty-element tag. 8173ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 8174ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * With namespace: 8175ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 8176ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [NS 8] STag ::= '<' QName (S Attribute)* S? '>' 8177ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 8178ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [NS 10] EmptyElement ::= '<' QName (S Attribute)* S? '/>' 8179ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 8180ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the element name parsed 8181ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 8182ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 8183ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectconst xmlChar * 8184ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlParseStartTag(xmlParserCtxtPtr ctxt) { 8185ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar *name; 8186ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar *attname; 8187ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar *attvalue; 8188ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar **atts = ctxt->atts; 8189ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int nbatts = 0; 8190ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int maxatts = ctxt->maxatts; 8191ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int i; 8192ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 8193ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (RAW != '<') return(NULL); 8194ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project NEXT1; 8195ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 8196ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project name = xmlParseName(ctxt); 8197ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (name == NULL) { 8198ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErrMsg(ctxt, XML_ERR_NAME_REQUIRED, 8199ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "xmlParseStartTag: invalid element name\n"); 8200ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 8201ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 8202ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 8203ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 8204ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Now parse the attributes, it ends up with the ending 8205ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 8206ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * (S Attribute)* S? 8207ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 8208ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SKIP_BLANKS; 8209ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project GROW; 8210ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 8211ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while ((RAW != '>') && 8212ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ((RAW != '/') || (NXT(1) != '>')) && 8213ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (IS_BYTE_CHAR(RAW))) { 8214ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar *q = CUR_PTR; 8215ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project unsigned int cons = ctxt->input->consumed; 8216ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 8217ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project attname = xmlParseAttribute(ctxt, &attvalue); 8218ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((attname != NULL) && (attvalue != NULL)) { 8219ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 8220ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [ WFC: Unique Att Spec ] 8221ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * No attribute name may appear more than once in the same 8222ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * start-tag or empty-element tag. 8223ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 8224ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project for (i = 0; i < nbatts;i += 2) { 8225ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (xmlStrEqual(atts[i], attname)) { 8226ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlErrAttributeDup(ctxt, NULL, attname); 8227ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree(attvalue); 8228ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto failed; 8229ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 8230ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 8231ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 8232ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Add the pair to atts 8233ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 8234ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (atts == NULL) { 8235ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project maxatts = 22; /* allow for 10 attrs by default */ 8236ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project atts = (const xmlChar **) 8237ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlMalloc(maxatts * sizeof(xmlChar *)); 8238ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (atts == NULL) { 8239ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlErrMemory(ctxt, NULL); 8240ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (attvalue != NULL) 8241ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree(attvalue); 8242ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto failed; 8243ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 8244ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->atts = atts; 8245ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->maxatts = maxatts; 8246ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if (nbatts + 4 > maxatts) { 8247ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar **n; 8248ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 8249ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project maxatts *= 2; 8250ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project n = (const xmlChar **) xmlRealloc((void *) atts, 8251ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project maxatts * sizeof(const xmlChar *)); 8252ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (n == NULL) { 8253ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlErrMemory(ctxt, NULL); 8254ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (attvalue != NULL) 8255ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree(attvalue); 8256ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto failed; 8257ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 8258ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project atts = n; 8259ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->atts = atts; 8260ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->maxatts = maxatts; 8261ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 8262ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project atts[nbatts++] = attname; 8263ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project atts[nbatts++] = attvalue; 8264ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project atts[nbatts] = NULL; 8265ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project atts[nbatts + 1] = NULL; 8266ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 8267ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (attvalue != NULL) 8268ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree(attvalue); 8269ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 8270ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 8271ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectfailed: 8272ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 8273ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project GROW 8274ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((RAW == '>') || (((RAW == '/') && (NXT(1) == '>')))) 8275ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 8276ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (!IS_BLANK_CH(RAW)) { 8277ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErrMsg(ctxt, XML_ERR_SPACE_REQUIRED, 8278ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "attributes construct error\n"); 8279ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 8280ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SKIP_BLANKS; 8281ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((cons == ctxt->input->consumed) && (q == CUR_PTR) && 8282ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (attname == NULL) && (attvalue == NULL)) { 8283ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErrMsg(ctxt, XML_ERR_INTERNAL_ERROR, 8284ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "xmlParseStartTag: problem parsing attributes\n"); 8285ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 8286ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 8287ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SHRINK; 8288ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project GROW; 8289ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 8290ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 8291ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 8292ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * SAX: Start of Element ! 8293ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 8294ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ctxt->sax != NULL) && (ctxt->sax->startElement != NULL) && 8295ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (!ctxt->disableSAX)) { 8296ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (nbatts > 0) 8297ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->sax->startElement(ctxt->userData, name, atts); 8298ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else 8299ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->sax->startElement(ctxt->userData, name, NULL); 8300ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 8301ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 8302ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (atts != NULL) { 8303ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* Free only the content strings */ 8304ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project for (i = 1;i < nbatts;i+=2) 8305ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (atts[i] != NULL) 8306ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree((xmlChar *) atts[i]); 8307ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 8308ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(name); 8309ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 8310ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 8311ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 8312ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlParseEndTag1: 8313ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctxt: an XML parser context 8314ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @line: line of the start tag 8315ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @nsNr: number of namespaces on the start tag 8316ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 8317ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * parse an end of tag 8318ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 8319ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [42] ETag ::= '</' Name S? '>' 8320ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 8321ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * With namespace 8322ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 8323ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [NS 9] ETag ::= '</' QName S? '>' 8324ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 8325ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 8326ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic void 8327ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlParseEndTag1(xmlParserCtxtPtr ctxt, int line) { 8328ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar *name; 8329ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 8330ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project GROW; 8331ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((RAW != '<') || (NXT(1) != '/')) { 8332ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErrMsg(ctxt, XML_ERR_LTSLASH_REQUIRED, 8333ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "xmlParseEndTag: '</' not found\n"); 8334ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return; 8335ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 8336ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SKIP(2); 8337ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 8338ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project name = xmlParseNameAndCompare(ctxt,ctxt->name); 8339ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 8340ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 8341ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * We should definitely be at the ending "S? '>'" part 8342ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 8343ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project GROW; 8344ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SKIP_BLANKS; 8345ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((!IS_BYTE_CHAR(RAW)) || (RAW != '>')) { 8346ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErr(ctxt, XML_ERR_GT_REQUIRED, NULL); 8347ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else 8348ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project NEXT1; 8349ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 8350ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 8351ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [ WFC: Element Type Match ] 8352ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * The Name in an element's end-tag must match the element type in the 8353ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * start-tag. 8354ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 8355ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 8356ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (name != (xmlChar*)1) { 8357ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (name == NULL) name = BAD_CAST "unparseable"; 8358ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErrMsgStrIntStr(ctxt, XML_ERR_TAG_NAME_MISMATCH, 8359ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "Opening and ending tag mismatch: %s line %d and %s\n", 8360ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->name, line, name); 8361ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 8362ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 8363ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 8364ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * SAX: End of Tag 8365ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 8366ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ctxt->sax != NULL) && (ctxt->sax->endElement != NULL) && 8367ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (!ctxt->disableSAX)) 8368ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->sax->endElement(ctxt->userData, ctxt->name); 8369ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 8370ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project namePop(ctxt); 8371ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project spacePop(ctxt); 8372ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return; 8373ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 8374ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 8375ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 8376ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlParseEndTag: 8377ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctxt: an XML parser context 8378ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 8379ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * parse an end of tag 8380ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 8381ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [42] ETag ::= '</' Name S? '>' 8382ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 8383ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * With namespace 8384ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 8385ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [NS 9] ETag ::= '</' QName S? '>' 8386ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 8387ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 8388ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectvoid 8389ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlParseEndTag(xmlParserCtxtPtr ctxt) { 8390ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParseEndTag1(ctxt, 0); 8391ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 8392ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif /* LIBXML_SAX1_ENABLED */ 839360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott 839460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott/************************************************************************ 839560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * * 839660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * SAX 2 specific operations * 839760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * * 839860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ************************************************************************/ 839960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott 840060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott/* 840160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * xmlGetNamespace: 840260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * @ctxt: an XML parser context 840360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * @prefix: the prefix to lookup 840460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * 840560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * Lookup the namespace name for the @prefix (which ca be NULL) 840660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * The prefix must come from the @ctxt->dict dictionnary 840760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * 840860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * Returns the namespace name or NULL if not bound 840960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott */ 841060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scottstatic const xmlChar * 841160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick ScottxmlGetNamespace(xmlParserCtxtPtr ctxt, const xmlChar *prefix) { 841260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott int i; 841360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott 841460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (prefix == ctxt->str_xml) return(ctxt->str_xml_ns); 841560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott for (i = ctxt->nsNr - 2;i >= 0;i-=2) 841660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (ctxt->nsTab[i] == prefix) { 841760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if ((prefix == NULL) && (*ctxt->nsTab[i + 1] == 0)) 841860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott return(NULL); 841960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott return(ctxt->nsTab[i + 1]); 8420ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 842160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott return(NULL); 8422ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 8423ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 8424ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 8425ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlParseQName: 8426ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctxt: an XML parser context 8427ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @prefix: pointer to store the prefix part 8428ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 8429ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * parse an XML Namespace QName 8430ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 8431ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [6] QName ::= (Prefix ':')? LocalPart 8432ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [7] Prefix ::= NCName 8433ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [8] LocalPart ::= NCName 8434ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 8435ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the Name parsed or NULL 8436ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 8437ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 8438ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic const xmlChar * 8439ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlParseQName(xmlParserCtxtPtr ctxt, const xmlChar **prefix) { 8440ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar *l, *p; 8441ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 8442ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project GROW; 8443ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 8444ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project l = xmlParseNCName(ctxt); 8445ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (l == NULL) { 8446ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (CUR == ':') { 8447ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project l = xmlParseName(ctxt); 8448ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (l != NULL) { 8449ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlNsErr(ctxt, XML_NS_ERR_QNAME, 8450ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "Failed to parse QName '%s'\n", l, NULL, NULL); 8451ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *prefix = NULL; 8452ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(l); 8453ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 8454ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 8455ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 8456ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 8457ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (CUR == ':') { 8458ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project NEXT; 8459ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project p = l; 8460ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project l = xmlParseNCName(ctxt); 8461ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (l == NULL) { 8462ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar *tmp; 8463ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 8464ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlNsErr(ctxt, XML_NS_ERR_QNAME, 8465ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "Failed to parse QName '%s:'\n", p, NULL, NULL); 846660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott l = xmlParseNmtoken(ctxt); 846760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (l == NULL) 846860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott tmp = xmlBuildQName(BAD_CAST "", p, NULL, 0); 846960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott else { 847060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott tmp = xmlBuildQName(l, p, NULL, 0); 847160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott xmlFree((char *)l); 847260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } 8473ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project p = xmlDictLookup(ctxt->dict, tmp, -1); 8474ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (tmp != NULL) xmlFree(tmp); 8475ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *prefix = NULL; 8476ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(p); 8477ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 8478ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (CUR == ':') { 8479ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar *tmp; 8480ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 8481ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlNsErr(ctxt, XML_NS_ERR_QNAME, 8482ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "Failed to parse QName '%s:%s:'\n", p, l, NULL); 8483ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project NEXT; 8484ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project tmp = (xmlChar *) xmlParseName(ctxt); 8485ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (tmp != NULL) { 8486ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project tmp = xmlBuildQName(tmp, l, NULL, 0); 8487ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project l = xmlDictLookup(ctxt->dict, tmp, -1); 8488ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (tmp != NULL) xmlFree(tmp); 8489ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *prefix = p; 8490ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(l); 8491ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 8492ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project tmp = xmlBuildQName(BAD_CAST "", l, NULL, 0); 8493ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project l = xmlDictLookup(ctxt->dict, tmp, -1); 8494ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (tmp != NULL) xmlFree(tmp); 8495ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *prefix = p; 8496ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(l); 8497ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 8498ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *prefix = p; 8499ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else 8500ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *prefix = NULL; 8501ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(l); 8502ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 8503ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 8504ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 8505ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlParseQNameAndCompare: 8506ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctxt: an XML parser context 8507ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @name: the localname 8508ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @prefix: the prefix, if any. 8509ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 8510ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * parse an XML name and compares for match 8511ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * (specialized for endtag parsing) 8512ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 8513ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns NULL for an illegal name, (xmlChar*) 1 for success 8514ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * and the name for mismatch 8515ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 8516ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 8517ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic const xmlChar * 8518ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlParseQNameAndCompare(xmlParserCtxtPtr ctxt, xmlChar const *name, 8519ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar const *prefix) { 8520df143a5041f03a22808b59c76698770b74692815Selim Gurun const xmlChar *cmp; 8521ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar *in; 8522ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar *ret; 8523ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar *prefix2; 8524ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 8525ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (prefix == NULL) return(xmlParseNameAndCompare(ctxt, name)); 8526ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 8527ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project GROW; 8528ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project in = ctxt->input->cur; 8529df143a5041f03a22808b59c76698770b74692815Selim Gurun 8530ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cmp = prefix; 8531ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while (*in != 0 && *in == *cmp) { 8532ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ++in; 8533ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ++cmp; 8534ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 8535ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((*cmp == 0) && (*in == ':')) { 8536ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project in++; 8537ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cmp = name; 8538ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while (*in != 0 && *in == *cmp) { 8539ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ++in; 8540ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ++cmp; 8541ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 8542ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (*cmp == 0 && (*in == '>' || IS_BLANK_CH (*in))) { 8543ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* success */ 8544ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->input->cur = in; 8545ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return((const xmlChar*) 1); 8546ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 8547ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 8548ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 8549ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * all strings coms from the dictionary, equality can be done directly 8550ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 8551ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = xmlParseQName (ctxt, &prefix2); 8552ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ret == name) && (prefix == prefix2)) 8553ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return((const xmlChar*) 1); 8554ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return ret; 8555ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 8556ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 8557ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 8558ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlParseAttValueInternal: 8559ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctxt: an XML parser context 8560ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @len: attribute len result 8561ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @alloc: whether the attribute was reallocated as a new string 8562ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @normalize: if 1 then further non-CDATA normalization must be done 8563ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 8564ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * parse a value for an attribute. 8565ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * NOTE: if no normalization is needed, the routine will return pointers 8566ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * directly from the data buffer. 8567ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 8568ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 3.3.3 Attribute-Value Normalization: 8569ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Before the value of an attribute is passed to the application or 8570ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * checked for validity, the XML processor must normalize it as follows: 8571ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * - a character reference is processed by appending the referenced 8572ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * character to the attribute value 8573ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * - an entity reference is processed by recursively processing the 8574ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * replacement text of the entity 8575ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * - a whitespace character (#x20, #xD, #xA, #x9) is processed by 8576ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * appending #x20 to the normalized value, except that only a single 8577ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * #x20 is appended for a "#xD#xA" sequence that is part of an external 8578ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * parsed entity or the literal entity value of an internal parsed entity 8579ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * - other characters are processed by appending them to the normalized value 8580ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * If the declared value is not CDATA, then the XML processor must further 8581ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * process the normalized attribute value by discarding any leading and 8582ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * trailing space (#x20) characters, and by replacing sequences of space 8583ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * (#x20) characters by a single space (#x20) character. 8584ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * All attributes for which no declaration has been read should be treated 8585ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * by a non-validating parser as if declared CDATA. 8586ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 8587ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the AttValue parsed or NULL. The value has to be freed by the 8588ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * caller if it was copied, this can be detected by val[*len] == 0. 8589ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 8590ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 8591ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic xmlChar * 8592ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlParseAttValueInternal(xmlParserCtxtPtr ctxt, int *len, int *alloc, 8593ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int normalize) 8594ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{ 8595ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar limit = 0; 8596ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar *in = NULL, *start, *end, *last; 8597ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar *ret = NULL; 8598ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 8599ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project GROW; 8600ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project in = (xmlChar *) CUR_PTR; 8601ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (*in != '"' && *in != '\'') { 8602ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErr(ctxt, XML_ERR_ATTRIBUTE_NOT_STARTED, NULL); 8603ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (NULL); 8604ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 8605ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->instate = XML_PARSER_ATTRIBUTE_VALUE; 8606ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 8607ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 8608ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * try to handle in this routine the most common case where no 8609ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * allocation of a new string is required and where content is 8610ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * pure ASCII. 8611ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 8612ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project limit = *in++; 8613ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project end = ctxt->input->end; 8614ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project start = in; 8615ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (in >= end) { 8616ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar *oldbase = ctxt->input->base; 8617ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project GROW; 8618ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (oldbase != ctxt->input->base) { 8619ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project long delta = ctxt->input->base - oldbase; 8620ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project start = start + delta; 8621ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project in = in + delta; 8622ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 8623ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project end = ctxt->input->end; 8624ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 8625ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (normalize) { 8626ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 8627ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Skip any leading spaces 8628ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 8629ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while ((in < end) && (*in != limit) && 8630ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ((*in == 0x20) || (*in == 0x9) || 8631ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (*in == 0xA) || (*in == 0xD))) { 8632ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project in++; 8633ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project start = in; 8634ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (in >= end) { 8635ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar *oldbase = ctxt->input->base; 8636ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project GROW; 8637ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (oldbase != ctxt->input->base) { 8638ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project long delta = ctxt->input->base - oldbase; 8639ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project start = start + delta; 8640ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project in = in + delta; 8641ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 8642ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project end = ctxt->input->end; 8643ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 8644ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 8645ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while ((in < end) && (*in != limit) && (*in >= 0x20) && 8646ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (*in <= 0x7f) && (*in != '&') && (*in != '<')) { 8647ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((*in++ == 0x20) && (*in == 0x20)) break; 8648ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (in >= end) { 8649ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar *oldbase = ctxt->input->base; 8650ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project GROW; 8651ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (oldbase != ctxt->input->base) { 8652ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project long delta = ctxt->input->base - oldbase; 8653ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project start = start + delta; 8654ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project in = in + delta; 8655ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 8656ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project end = ctxt->input->end; 8657ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 8658ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 8659ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project last = in; 8660ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 8661ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * skip the trailing blanks 8662ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 8663ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while ((last[-1] == 0x20) && (last > start)) last--; 8664ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while ((in < end) && (*in != limit) && 8665ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ((*in == 0x20) || (*in == 0x9) || 8666ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (*in == 0xA) || (*in == 0xD))) { 8667ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project in++; 8668ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (in >= end) { 8669ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar *oldbase = ctxt->input->base; 8670ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project GROW; 8671ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (oldbase != ctxt->input->base) { 8672ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project long delta = ctxt->input->base - oldbase; 8673ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project start = start + delta; 8674ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project in = in + delta; 8675ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project last = last + delta; 8676ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 8677ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project end = ctxt->input->end; 8678ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 8679ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 8680ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (*in != limit) goto need_complex; 8681ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 8682ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while ((in < end) && (*in != limit) && (*in >= 0x20) && 8683ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (*in <= 0x7f) && (*in != '&') && (*in != '<')) { 8684ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project in++; 8685ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (in >= end) { 8686ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar *oldbase = ctxt->input->base; 8687ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project GROW; 8688ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (oldbase != ctxt->input->base) { 8689ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project long delta = ctxt->input->base - oldbase; 8690ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project start = start + delta; 8691ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project in = in + delta; 8692ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 8693ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project end = ctxt->input->end; 8694ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 8695ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 8696ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project last = in; 8697ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (*in != limit) goto need_complex; 8698ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 8699ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project in++; 8700ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (len != NULL) { 8701ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *len = last - start; 8702ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = (xmlChar *) start; 8703ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 8704ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (alloc) *alloc = 1; 8705ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = xmlStrndup(start, last - start); 8706ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 8707ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project CUR_PTR = in; 8708ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (alloc) *alloc = 0; 8709ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return ret; 8710ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectneed_complex: 8711ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (alloc) *alloc = 1; 8712ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return xmlParseAttValueComplex(ctxt, len, normalize); 8713ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 8714ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 8715ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 8716ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlParseAttribute2: 8717ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctxt: an XML parser context 8718ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @pref: the element prefix 8719ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @elem: the element name 8720ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @prefix: a xmlChar ** used to store the value of the attribute prefix 8721ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @value: a xmlChar ** used to store the value of the attribute 8722ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @len: an int * to save the length of the attribute 8723ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @alloc: an int * to indicate if the attribute was allocated 8724ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 8725ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * parse an attribute in the new SAX2 framework. 8726ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 8727ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the attribute name, and the value in *value, . 8728ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 8729ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 8730ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic const xmlChar * 8731ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlParseAttribute2(xmlParserCtxtPtr ctxt, 873260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott const xmlChar * pref, const xmlChar * elem, 873360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott const xmlChar ** prefix, xmlChar ** value, 873460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott int *len, int *alloc) 873560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott{ 8736ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar *name; 8737ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar *val, *internal_val = NULL; 8738ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int normalize = 0; 8739ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 8740ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *value = NULL; 8741ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project GROW; 8742ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project name = xmlParseQName(ctxt, prefix); 8743ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (name == NULL) { 874460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott xmlFatalErrMsg(ctxt, XML_ERR_NAME_REQUIRED, 874560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott "error parsing attribute name\n"); 874660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott return (NULL); 8747ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 8748ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 8749ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 8750ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * get the type if needed 8751ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 8752ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt->attsSpecial != NULL) { 8753ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int type; 8754ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 8755ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project type = (int) (long) xmlHashQLookup2(ctxt->attsSpecial, 875660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott pref, elem, *prefix, name); 875760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (type != 0) 875860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott normalize = 1; 8759ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 8760ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 8761ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 8762ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * read the value 8763ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 8764ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SKIP_BLANKS; 8765ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (RAW == '=') { 8766ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project NEXT; 876760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott SKIP_BLANKS; 876860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott val = xmlParseAttValueInternal(ctxt, len, alloc, normalize); 876960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (normalize) { 877060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott /* 877160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * Sometimes a second normalisation pass for spaces is needed 877260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * but that only happens if charrefs or entities refernces 877360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * have been used in the attribute value, i.e. the attribute 877460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * value have been extracted in an allocated string already. 877560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott */ 877660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (*alloc) { 877760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott const xmlChar *val2; 877860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott 877960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott val2 = xmlAttrNormalizeSpace2(ctxt, val, len); 878060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if ((val2 != NULL) && (val2 != val)) { 878160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott xmlFree(val); 878260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott val = (xmlChar *) val2; 878360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } 878460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } 878560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } 878660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ctxt->instate = XML_PARSER_CONTENT; 8787ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 878860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott xmlFatalErrMsgStr(ctxt, XML_ERR_ATTRIBUTE_WITHOUT_VALUE, 878960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott "Specification mandate value for attribute %s\n", 879060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott name); 879160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott return (NULL); 8792ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 8793ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 879460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (*prefix == ctxt->str_xml) { 879560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott /* 879660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * Check that xml:lang conforms to the specification 879760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * No more registered as an error, just generate a warning now 879860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * since this was deprecated in XML second edition 879960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott */ 880060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if ((ctxt->pedantic) && (xmlStrEqual(name, BAD_CAST "lang"))) { 880160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott internal_val = xmlStrndup(val, *len); 880260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (!xmlCheckLanguageID(internal_val)) { 880360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott xmlWarningMsg(ctxt, XML_WAR_LANG_VALUE, 880460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott "Malformed value for xml:lang : %s\n", 880560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott internal_val, NULL); 880660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } 880760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } 8808ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 880960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott /* 881060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * Check that xml:space conforms to the specification 881160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott */ 881260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (xmlStrEqual(name, BAD_CAST "space")) { 881360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott internal_val = xmlStrndup(val, *len); 881460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (xmlStrEqual(internal_val, BAD_CAST "default")) 881560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott *(ctxt->space) = 0; 881660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott else if (xmlStrEqual(internal_val, BAD_CAST "preserve")) 881760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott *(ctxt->space) = 1; 881860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott else { 881960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott xmlWarningMsg(ctxt, XML_WAR_SPACE_VALUE, 882060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott "Invalid value \"%s\" for xml:space : \"default\" or \"preserve\" expected\n", 882160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott internal_val, NULL); 882260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } 882360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } 882460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (internal_val) { 882560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott xmlFree(internal_val); 882660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } 882760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } 8828ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 8829ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *value = val; 883060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott return (name); 8831ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 8832ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 8833ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlParseStartTag2: 8834ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctxt: an XML parser context 8835ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 8836ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * parse a start of tag either for rule element or 8837ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * EmptyElement. In both case we don't parse the tag closing chars. 8838ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * This routine is called when running SAX2 parsing 8839ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 8840ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [40] STag ::= '<' Name (S Attribute)* S? '>' 8841ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 8842ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [ WFC: Unique Att Spec ] 8843ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * No attribute name may appear more than once in the same start-tag or 8844ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * empty-element tag. 8845ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 8846ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [44] EmptyElemTag ::= '<' Name (S Attribute)* S? '/>' 8847ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 8848ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [ WFC: Unique Att Spec ] 8849ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * No attribute name may appear more than once in the same start-tag or 8850ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * empty-element tag. 8851ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 8852ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * With namespace: 8853ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 8854ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [NS 8] STag ::= '<' QName (S Attribute)* S? '>' 8855ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 8856ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [NS 10] EmptyElement ::= '<' QName (S Attribute)* S? '/>' 8857ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 8858ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the element name parsed 8859ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 8860ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 8861ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic const xmlChar * 8862ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlParseStartTag2(xmlParserCtxtPtr ctxt, const xmlChar **pref, 8863ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar **URI, int *tlen) { 8864ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar *localname; 8865ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar *prefix; 8866ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar *attname; 8867ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar *aprefix; 8868ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar *nsname; 8869ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar *attvalue; 8870ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar **atts = ctxt->atts; 8871ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int maxatts = ctxt->maxatts; 8872ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int nratts, nbatts, nbdef; 8873ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int i, j, nbNs, attval, oldline, oldcol; 8874ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar *base; 8875ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project unsigned long cur; 8876ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int nsNr = ctxt->nsNr; 8877ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 8878ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (RAW != '<') return(NULL); 8879ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project NEXT1; 8880ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 8881ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 8882ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * NOTE: it is crucial with the SAX2 API to never call SHRINK beyond that 8883ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * point since the attribute values may be stored as pointers to 8884ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * the buffer and calling SHRINK would destroy them ! 8885ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * The Shrinking is only possible once the full set of attribute 8886ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * callbacks have been done. 8887ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 8888ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectreparse: 8889ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SHRINK; 8890ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project base = ctxt->input->base; 8891ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur = ctxt->input->cur - ctxt->input->base; 8892ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project oldline = ctxt->input->line; 8893ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project oldcol = ctxt->input->col; 8894ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project nbatts = 0; 8895ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project nratts = 0; 8896ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project nbdef = 0; 8897ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project nbNs = 0; 8898ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project attval = 0; 8899ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* Forget any namespaces added during an earlier parse of this element. */ 8900ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->nsNr = nsNr; 8901ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 8902ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project localname = xmlParseQName(ctxt, &prefix); 8903ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (localname == NULL) { 8904ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErrMsg(ctxt, XML_ERR_NAME_REQUIRED, 8905ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "StartTag: invalid element name\n"); 8906ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 8907ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 8908ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *tlen = ctxt->input->cur - ctxt->input->base - cur; 8909ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 8910ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 8911ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Now parse the attributes, it ends up with the ending 8912ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 8913ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * (S Attribute)* S? 8914ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 8915ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SKIP_BLANKS; 8916ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project GROW; 8917ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt->input->base != base) goto base_changed; 8918ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 8919ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while ((RAW != '>') && 8920ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ((RAW != '/') || (NXT(1) != '>')) && 8921ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (IS_BYTE_CHAR(RAW))) { 8922ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar *q = CUR_PTR; 8923ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project unsigned int cons = ctxt->input->consumed; 8924ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int len = -1, alloc = 0; 8925ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 8926ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project attname = xmlParseAttribute2(ctxt, prefix, localname, 8927ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project &aprefix, &attvalue, &len, &alloc); 8928ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt->input->base != base) { 8929ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((attvalue != NULL) && (alloc != 0)) 8930ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree(attvalue); 8931ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project attvalue = NULL; 8932ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto base_changed; 8933ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 8934ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((attname != NULL) && (attvalue != NULL)) { 8935ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (len < 0) len = xmlStrlen(attvalue); 8936ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((attname == ctxt->str_xmlns) && (aprefix == NULL)) { 8937ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar *URL = xmlDictLookup(ctxt->dict, attvalue, len); 8938ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlURIPtr uri; 8939ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 8940ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (*URL != 0) { 8941ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project uri = xmlParseURI((const char *) URL); 8942ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (uri == NULL) { 894360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott xmlNsErr(ctxt, XML_WAR_NS_URI, 894460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott "xmlns: '%s' is not a valid URI\n", 894560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott URL, NULL, NULL); 8946ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 8947ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (uri->scheme == NULL) { 894860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott xmlNsWarn(ctxt, XML_WAR_NS_URI_RELATIVE, 894960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott "xmlns: URI %s is not absolute\n", 895060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott URL, NULL, NULL); 8951ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 8952ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFreeURI(uri); 8953ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 895460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (URL == ctxt->str_xml_ns) { 895560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (attname != ctxt->str_xml) { 895660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott xmlNsErr(ctxt, XML_NS_ERR_XML_NAMESPACE, 895760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott "xml namespace URI cannot be the default namespace\n", 895860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott NULL, NULL, NULL); 895960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } 896060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott goto skip_default_ns; 896160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } 896260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if ((len == 29) && 896360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott (xmlStrEqual(URL, 896460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott BAD_CAST "http://www.w3.org/2000/xmlns/"))) { 896560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott xmlNsErr(ctxt, XML_NS_ERR_XML_NAMESPACE, 896660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott "reuse of the xmlns namespace name is forbidden\n", 896760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott NULL, NULL, NULL); 896860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott goto skip_default_ns; 896960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } 8970ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 8971ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 8972ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * check that it's not a defined namespace 8973ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 8974ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project for (j = 1;j <= nbNs;j++) 8975ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt->nsTab[ctxt->nsNr - 2 * j] == NULL) 8976ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 8977ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (j <= nbNs) 8978ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlErrAttributeDup(ctxt, NULL, attname); 8979ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else 8980ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (nsPush(ctxt, NULL, URL) > 0) nbNs++; 898160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scottskip_default_ns: 8982ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (alloc != 0) xmlFree(attvalue); 8983ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SKIP_BLANKS; 8984ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project continue; 8985ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 8986ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (aprefix == ctxt->str_xmlns) { 8987ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar *URL = xmlDictLookup(ctxt->dict, attvalue, len); 8988ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlURIPtr uri; 8989ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 8990ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (attname == ctxt->str_xml) { 8991ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (URL != ctxt->str_xml_ns) { 8992ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlNsErr(ctxt, XML_NS_ERR_XML_NAMESPACE, 8993ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "xml namespace prefix mapped to wrong URI\n", 8994ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project NULL, NULL, NULL); 8995ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 8996ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 8997ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Do not keep a namespace definition node 8998ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 899960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott goto skip_ns; 900060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } 900160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (URL == ctxt->str_xml_ns) { 900260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (attname != ctxt->str_xml) { 900360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott xmlNsErr(ctxt, XML_NS_ERR_XML_NAMESPACE, 900460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott "xml namespace URI mapped to wrong prefix\n", 900560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott NULL, NULL, NULL); 900660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } 900760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott goto skip_ns; 900860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } 900960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (attname == ctxt->str_xmlns) { 901060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott xmlNsErr(ctxt, XML_NS_ERR_XML_NAMESPACE, 901160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott "redefinition of the xmlns prefix is forbidden\n", 901260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott NULL, NULL, NULL); 901360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott goto skip_ns; 9014ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 901560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if ((len == 29) && 901660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott (xmlStrEqual(URL, 901760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott BAD_CAST "http://www.w3.org/2000/xmlns/"))) { 901860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott xmlNsErr(ctxt, XML_NS_ERR_XML_NAMESPACE, 901960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott "reuse of the xmlns namespace name is forbidden\n", 902060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott NULL, NULL, NULL); 902160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott goto skip_ns; 902260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } 902360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if ((URL == NULL) || (URL[0] == 0)) { 902460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott xmlNsErr(ctxt, XML_NS_ERR_XML_NAMESPACE, 902560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott "xmlns:%s: Empty XML namespace is not allowed\n", 902660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott attname, NULL, NULL); 902760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott goto skip_ns; 9028ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 902960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott uri = xmlParseURI((const char *) URL); 903060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (uri == NULL) { 903160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott xmlNsErr(ctxt, XML_WAR_NS_URI, 903260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott "xmlns:%s: '%s' is not a valid URI\n", 903360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott attname, URL, NULL); 903460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } else { 903560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if ((ctxt->pedantic) && (uri->scheme == NULL)) { 903660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott xmlNsWarn(ctxt, XML_WAR_NS_URI_RELATIVE, 9037ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "xmlns:%s: URI %s is not absolute\n", 903860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott attname, URL, NULL); 903960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } 904060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott xmlFreeURI(uri); 9041ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 9042ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 9043ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 9044ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 9045ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * check that it's not a defined namespace 9046ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 9047ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project for (j = 1;j <= nbNs;j++) 9048ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt->nsTab[ctxt->nsNr - 2 * j] == attname) 9049ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 9050ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (j <= nbNs) 9051ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlErrAttributeDup(ctxt, aprefix, attname); 9052ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else 9053ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (nsPush(ctxt, attname, URL) > 0) nbNs++; 905460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scottskip_ns: 9055ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (alloc != 0) xmlFree(attvalue); 9056ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SKIP_BLANKS; 9057ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt->input->base != base) goto base_changed; 9058ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project continue; 9059ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 9060ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 9061ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 9062ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Add the pair to atts 9063ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 9064ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((atts == NULL) || (nbatts + 5 > maxatts)) { 9065ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (xmlCtxtGrowAttrs(ctxt, nbatts + 5) < 0) { 9066ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (attvalue[len] == 0) 9067ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree(attvalue); 9068ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto failed; 9069ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 9070ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project maxatts = ctxt->maxatts; 9071ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project atts = ctxt->atts; 9072ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 9073ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->attallocs[nratts++] = alloc; 9074ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project atts[nbatts++] = attname; 9075ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project atts[nbatts++] = aprefix; 9076ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project atts[nbatts++] = NULL; /* the URI will be fetched later */ 9077ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project atts[nbatts++] = attvalue; 9078ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project attvalue += len; 9079ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project atts[nbatts++] = attvalue; 9080ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 9081ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * tag if some deallocation is needed 9082ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 9083ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (alloc != 0) attval = 1; 9084ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 9085ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((attvalue != NULL) && (attvalue[len] == 0)) 9086ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree(attvalue); 9087ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 9088ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 908960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scottfailed: 9090ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 9091ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project GROW 9092ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt->input->base != base) goto base_changed; 9093ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((RAW == '>') || (((RAW == '/') && (NXT(1) == '>')))) 9094ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 9095ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (!IS_BLANK_CH(RAW)) { 9096ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErrMsg(ctxt, XML_ERR_SPACE_REQUIRED, 9097ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "attributes construct error\n"); 9098ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 9099ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 9100ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SKIP_BLANKS; 9101ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((cons == ctxt->input->consumed) && (q == CUR_PTR) && 9102ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (attname == NULL) && (attvalue == NULL)) { 9103ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErr(ctxt, XML_ERR_INTERNAL_ERROR, 9104ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "xmlParseStartTag: problem parsing attributes\n"); 9105ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 9106ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 9107ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project GROW; 9108ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt->input->base != base) goto base_changed; 9109ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 9110ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 9111ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 9112ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * The attributes defaulting 9113ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 9114ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt->attsDefault != NULL) { 9115ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlDefAttrsPtr defaults; 9116ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 9117ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project defaults = xmlHashLookup2(ctxt->attsDefault, localname, prefix); 9118ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (defaults != NULL) { 9119ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project for (i = 0;i < defaults->nbAttrs;i++) { 912060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott attname = defaults->values[5 * i]; 912160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott aprefix = defaults->values[5 * i + 1]; 9122ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 9123ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 9124ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * special work for namespaces defaulted defs 9125ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 9126ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((attname == ctxt->str_xmlns) && (aprefix == NULL)) { 9127ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 9128ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * check that it's not a defined namespace 9129ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 9130ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project for (j = 1;j <= nbNs;j++) 9131ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt->nsTab[ctxt->nsNr - 2 * j] == NULL) 9132ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 9133ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (j <= nbNs) continue; 9134ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 9135ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project nsname = xmlGetNamespace(ctxt, NULL); 913660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (nsname != defaults->values[5 * i + 2]) { 9137ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (nsPush(ctxt, NULL, 913860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott defaults->values[5 * i + 2]) > 0) 9139ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project nbNs++; 9140ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 9141ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if (aprefix == ctxt->str_xmlns) { 9142ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 9143ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * check that it's not a defined namespace 9144ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 9145ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project for (j = 1;j <= nbNs;j++) 9146ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt->nsTab[ctxt->nsNr - 2 * j] == attname) 9147ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 9148ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (j <= nbNs) continue; 9149ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 9150ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project nsname = xmlGetNamespace(ctxt, attname); 9151ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (nsname != defaults->values[2]) { 9152ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (nsPush(ctxt, attname, 915360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott defaults->values[5 * i + 2]) > 0) 9154ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project nbNs++; 9155ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 9156ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 9157ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 9158ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * check that it's not a defined attribute 9159ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 9160ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project for (j = 0;j < nbatts;j+=5) { 9161ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((attname == atts[j]) && (aprefix == atts[j+1])) 9162ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 9163ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 9164ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (j < nbatts) continue; 9165ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 9166ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((atts == NULL) || (nbatts + 5 > maxatts)) { 9167ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (xmlCtxtGrowAttrs(ctxt, nbatts + 5) < 0) { 9168ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 9169ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 9170ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project maxatts = ctxt->maxatts; 9171ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project atts = ctxt->atts; 9172ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 9173ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project atts[nbatts++] = attname; 9174ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project atts[nbatts++] = aprefix; 9175ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (aprefix == NULL) 9176ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project atts[nbatts++] = NULL; 9177ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else 9178ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project atts[nbatts++] = xmlGetNamespace(ctxt, aprefix); 917960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott atts[nbatts++] = defaults->values[5 * i + 2]; 918060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott atts[nbatts++] = defaults->values[5 * i + 3]; 918160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if ((ctxt->standalone == 1) && 918260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott (defaults->values[5 * i + 4] != NULL)) { 918360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott xmlValidityError(ctxt, XML_DTD_STANDALONE_DEFAULTED, 918460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott "standalone: attribute %s on %s defaulted from external subset\n", 918560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott attname, localname); 918660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } 9187ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project nbdef++; 9188ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 9189ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 9190ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 9191ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 9192ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 9193ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 9194ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * The attributes checkings 9195ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 9196ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project for (i = 0; i < nbatts;i += 5) { 9197ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 9198ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * The default namespace does not apply to attribute names. 9199ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 9200ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (atts[i + 1] != NULL) { 9201ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project nsname = xmlGetNamespace(ctxt, atts[i + 1]); 9202ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (nsname == NULL) { 9203ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlNsErr(ctxt, XML_NS_ERR_UNDEFINED_NAMESPACE, 9204ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "Namespace prefix %s for %s on %s is not defined\n", 9205ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project atts[i + 1], atts[i], localname); 9206ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 9207ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project atts[i + 2] = nsname; 9208ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else 9209ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project nsname = NULL; 9210ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 9211ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [ WFC: Unique Att Spec ] 9212ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * No attribute name may appear more than once in the same 9213ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * start-tag or empty-element tag. 9214ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * As extended by the Namespace in XML REC. 9215ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 9216ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project for (j = 0; j < i;j += 5) { 9217ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (atts[i] == atts[j]) { 9218ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (atts[i+1] == atts[j+1]) { 9219ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlErrAttributeDup(ctxt, atts[i+1], atts[i]); 9220ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 9221ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 9222ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((nsname != NULL) && (atts[j + 2] == nsname)) { 9223ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlNsErr(ctxt, XML_NS_ERR_ATTRIBUTE_REDEFINED, 9224ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "Namespaced Attribute %s in '%s' redefined\n", 9225ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project atts[i], nsname, NULL); 9226ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 9227ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 9228ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 9229ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 9230ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 9231ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 9232ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project nsname = xmlGetNamespace(ctxt, prefix); 9233ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((prefix != NULL) && (nsname == NULL)) { 9234ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlNsErr(ctxt, XML_NS_ERR_UNDEFINED_NAMESPACE, 9235ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "Namespace prefix %s on %s is not defined\n", 9236ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project prefix, localname, NULL); 9237ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 9238ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *pref = prefix; 9239ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *URI = nsname; 9240ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 9241ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 9242ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * SAX: Start of Element ! 9243ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 9244ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ctxt->sax != NULL) && (ctxt->sax->startElementNs != NULL) && 9245ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (!ctxt->disableSAX)) { 9246ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (nbNs > 0) 9247ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->sax->startElementNs(ctxt->userData, localname, prefix, 9248ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project nsname, nbNs, &ctxt->nsTab[ctxt->nsNr - 2 * nbNs], 9249ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project nbatts / 5, nbdef, atts); 9250ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else 9251ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->sax->startElementNs(ctxt->userData, localname, prefix, 9252ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project nsname, 0, NULL, nbatts / 5, nbdef, atts); 9253ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 9254ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 9255ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 9256ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Free up attribute allocated strings if needed 9257ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 9258ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (attval != 0) { 9259ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project for (i = 3,j = 0; j < nratts;i += 5,j++) 9260ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ctxt->attallocs[j] != 0) && (atts[i] != NULL)) 9261ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree((xmlChar *) atts[i]); 9262ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 9263ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 9264ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(localname); 9265ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 9266ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectbase_changed: 9267ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 9268ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * the attribute strings are valid iif the base didn't changed 9269ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 9270ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (attval != 0) { 9271ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project for (i = 3,j = 0; j < nratts;i += 5,j++) 9272ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ctxt->attallocs[j] != 0) && (atts[i] != NULL)) 9273ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree((xmlChar *) atts[i]); 9274ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 9275ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->input->cur = ctxt->input->base + cur; 9276ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->input->line = oldline; 9277ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->input->col = oldcol; 9278ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt->wellFormed == 1) { 9279ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto reparse; 9280ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 9281ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 9282ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 9283ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 9284ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 9285ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlParseEndTag2: 9286ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctxt: an XML parser context 9287ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @line: line of the start tag 9288ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @nsNr: number of namespaces on the start tag 9289ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 9290ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * parse an end of tag 9291ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 9292ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [42] ETag ::= '</' Name S? '>' 9293ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 9294ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * With namespace 9295ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 9296ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [NS 9] ETag ::= '</' QName S? '>' 9297ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 9298ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 9299ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic void 9300ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlParseEndTag2(xmlParserCtxtPtr ctxt, const xmlChar *prefix, 9301ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar *URI, int line, int nsNr, int tlen) { 9302ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar *name; 9303ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 9304ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project GROW; 9305ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((RAW != '<') || (NXT(1) != '/')) { 9306ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErr(ctxt, XML_ERR_LTSLASH_REQUIRED, NULL); 9307ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return; 9308ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 9309ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SKIP(2); 9310ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 9311ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((tlen > 0) && (xmlStrncmp(ctxt->input->cur, ctxt->name, tlen) == 0)) { 9312ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt->input->cur[tlen] == '>') { 9313ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->input->cur += tlen + 1; 9314ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto done; 9315ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 9316ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->input->cur += tlen; 9317ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project name = (xmlChar*)1; 9318ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 9319ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (prefix == NULL) 9320ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project name = xmlParseNameAndCompare(ctxt, ctxt->name); 9321ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else 9322ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project name = xmlParseQNameAndCompare(ctxt, ctxt->name, prefix); 9323ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 9324ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 9325ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 9326ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * We should definitely be at the ending "S? '>'" part 9327ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 9328ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project GROW; 9329ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SKIP_BLANKS; 9330ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((!IS_BYTE_CHAR(RAW)) || (RAW != '>')) { 9331ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErr(ctxt, XML_ERR_GT_REQUIRED, NULL); 9332ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else 9333ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project NEXT1; 9334ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 9335ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 9336ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [ WFC: Element Type Match ] 9337ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * The Name in an element's end-tag must match the element type in the 9338ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * start-tag. 9339ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 9340ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 9341ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (name != (xmlChar*)1) { 9342ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (name == NULL) name = BAD_CAST "unparseable"; 9343df143a5041f03a22808b59c76698770b74692815Selim Gurun if ((line == 0) && (ctxt->node != NULL)) 9344df143a5041f03a22808b59c76698770b74692815Selim Gurun line = ctxt->node->line; 9345ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErrMsgStrIntStr(ctxt, XML_ERR_TAG_NAME_MISMATCH, 9346ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "Opening and ending tag mismatch: %s line %d and %s\n", 9347ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->name, line, name); 9348ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 9349ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 9350ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 9351ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * SAX: End of Tag 9352ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 9353ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectdone: 9354ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ctxt->sax != NULL) && (ctxt->sax->endElementNs != NULL) && 9355ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (!ctxt->disableSAX)) 9356ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->sax->endElementNs(ctxt->userData, ctxt->name, prefix, URI); 9357ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 9358ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project spacePop(ctxt); 9359ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (nsNr != 0) 9360ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project nsPop(ctxt, nsNr); 9361ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return; 9362ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 9363ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 9364ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 9365ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlParseCDSect: 9366ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctxt: an XML parser context 9367ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 9368ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Parse escaped pure raw content. 9369ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 9370ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [18] CDSect ::= CDStart CData CDEnd 9371ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 9372ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [19] CDStart ::= '<![CDATA[' 9373ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 9374ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [20] Data ::= (Char* - (Char* ']]>' Char*)) 9375ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 9376ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [21] CDEnd ::= ']]>' 9377ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 9378ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectvoid 9379ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlParseCDSect(xmlParserCtxtPtr ctxt) { 9380ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar *buf = NULL; 9381ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int len = 0; 9382ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int size = XML_PARSER_BUFFER_SIZE; 9383ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int r, rl; 9384ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int s, sl; 9385ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int cur, l; 9386ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int count = 0; 9387ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 9388ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* Check 2.6.0 was NXT(0) not RAW */ 9389ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (CMP9(CUR_PTR, '<', '!', '[', 'C', 'D', 'A', 'T', 'A', '[')) { 9390ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SKIP(9); 9391ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else 9392ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return; 9393ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 9394ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->instate = XML_PARSER_CDATA_SECTION; 9395ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project r = CUR_CHAR(rl); 9396ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (!IS_CHAR(r)) { 9397ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErr(ctxt, XML_ERR_CDATA_NOT_FINISHED, NULL); 9398ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->instate = XML_PARSER_CONTENT; 9399ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return; 9400ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 9401ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project NEXTL(rl); 9402ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project s = CUR_CHAR(sl); 9403ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (!IS_CHAR(s)) { 9404ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErr(ctxt, XML_ERR_CDATA_NOT_FINISHED, NULL); 9405ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->instate = XML_PARSER_CONTENT; 9406ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return; 9407ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 9408ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project NEXTL(sl); 9409ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur = CUR_CHAR(l); 9410ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project buf = (xmlChar *) xmlMallocAtomic(size * sizeof(xmlChar)); 9411ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (buf == NULL) { 9412ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlErrMemory(ctxt, NULL); 9413ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return; 9414ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 9415ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while (IS_CHAR(cur) && 9416ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ((r != ']') || (s != ']') || (cur != '>'))) { 9417ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (len + 5 >= size) { 9418ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar *tmp; 9419ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 9420ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project size *= 2; 9421ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project tmp = (xmlChar *) xmlRealloc(buf, size * sizeof(xmlChar)); 9422ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (tmp == NULL) { 9423ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree(buf); 9424ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlErrMemory(ctxt, NULL); 9425ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return; 9426ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 9427ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project buf = tmp; 9428ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 9429ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project COPY_BUF(rl,buf,len,r); 9430ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project r = s; 9431ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project rl = sl; 9432ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project s = cur; 9433ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project sl = l; 9434ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project count++; 9435ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (count > 50) { 9436ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project GROW; 9437ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project count = 0; 9438ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 9439ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project NEXTL(l); 9440ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur = CUR_CHAR(l); 9441ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 9442ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project buf[len] = 0; 9443ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->instate = XML_PARSER_CONTENT; 9444ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (cur != '>') { 9445ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErrMsgStr(ctxt, XML_ERR_CDATA_NOT_FINISHED, 9446ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "CData section not finished\n%.50s\n", buf); 9447ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree(buf); 9448ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return; 9449ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 9450ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project NEXTL(l); 9451ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 9452ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 9453ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * OK the buffer is to be consumed as cdata. 9454ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 9455ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ctxt->sax != NULL) && (!ctxt->disableSAX)) { 9456ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt->sax->cdataBlock != NULL) 9457ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->sax->cdataBlock(ctxt->userData, buf, len); 9458ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else if (ctxt->sax->characters != NULL) 9459ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->sax->characters(ctxt->userData, buf, len); 9460ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 9461ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree(buf); 9462ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 9463ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 9464ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 9465ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlParseContent: 9466ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctxt: an XML parser context 9467ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 9468ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Parse a content: 9469ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 9470ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [43] content ::= (element | CharData | Reference | CDSect | PI | Comment)* 9471ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 9472ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 9473ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectvoid 9474ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlParseContent(xmlParserCtxtPtr ctxt) { 9475ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project GROW; 9476ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while ((RAW != 0) && 9477ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ((RAW != '<') || (NXT(1) != '/')) && 9478ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (ctxt->instate != XML_PARSER_EOF)) { 9479ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar *test = CUR_PTR; 9480ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project unsigned int cons = ctxt->input->consumed; 9481ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar *cur = ctxt->input->cur; 9482ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 9483ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 9484ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * First case : a Processing Instruction. 9485ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 9486ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((*cur == '<') && (cur[1] == '?')) { 9487ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParsePI(ctxt); 9488ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 9489ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 9490ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 9491ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Second case : a CDSection 9492ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 9493ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 2.6.0 test was *cur not RAW */ 9494ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else if (CMP9(CUR_PTR, '<', '!', '[', 'C', 'D', 'A', 'T', 'A', '[')) { 9495ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParseCDSect(ctxt); 9496ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 9497ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 9498ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 9499ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Third case : a comment 9500ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 9501ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else if ((*cur == '<') && (NXT(1) == '!') && 9502ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (NXT(2) == '-') && (NXT(3) == '-')) { 9503ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParseComment(ctxt); 9504ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->instate = XML_PARSER_CONTENT; 9505ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 9506ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 9507ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 9508ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Fourth case : a sub-element. 9509ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 9510ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else if (*cur == '<') { 9511ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParseElement(ctxt); 9512ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 9513ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 9514ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 9515ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Fifth case : a reference. If if has not been resolved, 9516ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * parsing returns it's Name, create the node 9517ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 9518ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 9519ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else if (*cur == '&') { 9520ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParseReference(ctxt); 9521ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 9522ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 9523ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 9524ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Last case, text. Note that References are handled directly. 9525ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 9526ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else { 9527ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParseCharData(ctxt, 0); 9528ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 9529ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 9530ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project GROW; 9531ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 9532ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Pop-up of finished entities. 9533ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 9534ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while ((RAW == 0) && (ctxt->inputNr > 1)) 9535ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlPopInput(ctxt); 9536ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SHRINK; 9537ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 9538ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((cons == ctxt->input->consumed) && (test == CUR_PTR)) { 9539ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErr(ctxt, XML_ERR_INTERNAL_ERROR, 9540ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "detected an error in element content\n"); 9541ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->instate = XML_PARSER_EOF; 9542ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 9543ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 9544ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 9545ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 9546ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 9547ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 9548ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlParseElement: 9549ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctxt: an XML parser context 9550ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 9551ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * parse an XML element, this is highly recursive 9552ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 9553ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [39] element ::= EmptyElemTag | STag content ETag 9554ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 9555ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [ WFC: Element Type Match ] 9556ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * The Name in an element's end-tag must match the element type in the 9557ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * start-tag. 9558ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 9559ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 9560ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 9561ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectvoid 9562ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlParseElement(xmlParserCtxtPtr ctxt) { 9563ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar *name; 9564df143a5041f03a22808b59c76698770b74692815Selim Gurun const xmlChar *prefix = NULL; 9565df143a5041f03a22808b59c76698770b74692815Selim Gurun const xmlChar *URI = NULL; 9566ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParserNodeInfo node_info; 9567ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int line, tlen; 9568ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlNodePtr ret; 9569ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int nsNr = ctxt->nsNr; 9570ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 957160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (((unsigned int) ctxt->nameNr > xmlParserMaxDepth) && 957260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ((ctxt->options & XML_PARSE_HUGE) == 0)) { 957360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott xmlFatalErrMsgInt(ctxt, XML_ERR_INTERNAL_ERROR, 957460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott "Excessive depth in document: %d use XML_PARSE_HUGE option\n", 957560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott xmlParserMaxDepth); 9576ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->instate = XML_PARSER_EOF; 9577ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return; 9578ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 9579ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 9580ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* Capture start position */ 9581ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt->record_info) { 9582ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project node_info.begin_pos = ctxt->input->consumed + 9583ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (CUR_PTR - ctxt->input->base); 9584ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project node_info.begin_line = ctxt->input->line; 9585ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 9586ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 9587ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt->spaceNr == 0) 9588ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project spacePush(ctxt, -1); 9589ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else if (*ctxt->space == -2) 9590ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project spacePush(ctxt, -1); 9591ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else 9592ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project spacePush(ctxt, *ctxt->space); 9593ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 9594ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project line = ctxt->input->line; 9595ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_SAX1_ENABLED 9596ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt->sax2) 9597ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif /* LIBXML_SAX1_ENABLED */ 9598ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project name = xmlParseStartTag2(ctxt, &prefix, &URI, &tlen); 9599ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_SAX1_ENABLED 9600ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else 9601ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project name = xmlParseStartTag(ctxt); 9602ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif /* LIBXML_SAX1_ENABLED */ 9603df143a5041f03a22808b59c76698770b74692815Selim Gurun if (ctxt->instate == XML_PARSER_EOF) 9604df143a5041f03a22808b59c76698770b74692815Selim Gurun return; 9605ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (name == NULL) { 9606ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project spacePop(ctxt); 9607ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return; 9608ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 9609ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project namePush(ctxt, name); 9610ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = ctxt->node; 9611ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 9612ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_VALID_ENABLED 9613ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 9614ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [ VC: Root Element Type ] 9615ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * The Name in the document type declaration must match the element 9616ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * type of the root element. 9617ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 9618ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt->validate && ctxt->wellFormed && ctxt->myDoc && 9619ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->node && (ctxt->node == ctxt->myDoc->children)) 9620ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->valid &= xmlValidateRoot(&ctxt->vctxt, ctxt->myDoc); 9621ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif /* LIBXML_VALID_ENABLED */ 9622ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 9623ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 9624ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Check for an Empty Element. 9625ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 9626ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((RAW == '/') && (NXT(1) == '>')) { 9627ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SKIP(2); 9628ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt->sax2) { 9629ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ctxt->sax != NULL) && (ctxt->sax->endElementNs != NULL) && 9630ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (!ctxt->disableSAX)) 9631ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->sax->endElementNs(ctxt->userData, name, prefix, URI); 9632ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_SAX1_ENABLED 9633ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 9634ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ctxt->sax != NULL) && (ctxt->sax->endElement != NULL) && 9635ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (!ctxt->disableSAX)) 9636ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->sax->endElement(ctxt->userData, name); 9637ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif /* LIBXML_SAX1_ENABLED */ 9638ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 9639ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project namePop(ctxt); 9640ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project spacePop(ctxt); 9641ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (nsNr != ctxt->nsNr) 9642ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project nsPop(ctxt, ctxt->nsNr - nsNr); 9643ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ( ret != NULL && ctxt->record_info ) { 9644ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project node_info.end_pos = ctxt->input->consumed + 9645ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (CUR_PTR - ctxt->input->base); 9646ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project node_info.end_line = ctxt->input->line; 9647ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project node_info.node = ret; 9648ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParserAddNodeInfo(ctxt, &node_info); 9649ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 9650ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return; 9651ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 9652ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (RAW == '>') { 9653ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project NEXT1; 9654ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 9655ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErrMsgStrIntStr(ctxt, XML_ERR_GT_REQUIRED, 9656ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "Couldn't find end of Start Tag %s line %d\n", 9657ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project name, line, NULL); 9658ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 9659ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 9660ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * end of parsing of this node. 9661ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 9662ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project nodePop(ctxt); 9663ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project namePop(ctxt); 9664ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project spacePop(ctxt); 9665ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (nsNr != ctxt->nsNr) 9666ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project nsPop(ctxt, ctxt->nsNr - nsNr); 9667ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 9668ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 9669ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Capture end position and add node 9670ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 9671ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ( ret != NULL && ctxt->record_info ) { 9672ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project node_info.end_pos = ctxt->input->consumed + 9673ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (CUR_PTR - ctxt->input->base); 9674ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project node_info.end_line = ctxt->input->line; 9675ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project node_info.node = ret; 9676ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParserAddNodeInfo(ctxt, &node_info); 9677ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 9678ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return; 9679ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 9680ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 9681ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 9682ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Parse the content of the element: 9683ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 9684ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParseContent(ctxt); 9685ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (!IS_BYTE_CHAR(RAW)) { 9686ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErrMsgStrIntStr(ctxt, XML_ERR_TAG_NOT_FINISHED, 9687ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "Premature end of data in tag %s line %d\n", 9688ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project name, line, NULL); 9689ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 9690ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 9691ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * end of parsing of this node. 9692ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 9693ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project nodePop(ctxt); 9694ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project namePop(ctxt); 9695ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project spacePop(ctxt); 9696ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (nsNr != ctxt->nsNr) 9697ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project nsPop(ctxt, ctxt->nsNr - nsNr); 9698ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return; 9699ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 9700ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 9701ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 9702ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * parse the end of tag: '</' should be here. 9703ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 9704ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt->sax2) { 9705ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParseEndTag2(ctxt, prefix, URI, line, ctxt->nsNr - nsNr, tlen); 9706ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project namePop(ctxt); 9707ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 9708ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_SAX1_ENABLED 9709ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else 9710ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParseEndTag1(ctxt, line); 9711ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif /* LIBXML_SAX1_ENABLED */ 9712ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 9713ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 9714ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Capture end position and add node 9715ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 9716ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ( ret != NULL && ctxt->record_info ) { 9717ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project node_info.end_pos = ctxt->input->consumed + 9718ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (CUR_PTR - ctxt->input->base); 9719ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project node_info.end_line = ctxt->input->line; 9720ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project node_info.node = ret; 9721ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParserAddNodeInfo(ctxt, &node_info); 9722ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 9723ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 9724ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 9725ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 9726ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlParseVersionNum: 9727ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctxt: an XML parser context 9728ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 9729ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * parse the XML version value. 9730ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 973160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * [26] VersionNum ::= '1.' [0-9]+ 973260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * 973360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * In practice allow [0-9].[0-9]+ at that level 9734ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 9735ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the string giving the XML version number, or NULL 9736ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 9737ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlChar * 9738ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlParseVersionNum(xmlParserCtxtPtr ctxt) { 9739ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar *buf = NULL; 9740ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int len = 0; 9741ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int size = 10; 9742ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar cur; 9743ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 9744ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project buf = (xmlChar *) xmlMallocAtomic(size * sizeof(xmlChar)); 9745ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (buf == NULL) { 9746ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlErrMemory(ctxt, NULL); 9747ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 9748ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 9749ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur = CUR; 975060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (!((cur >= '0') && (cur <= '9'))) { 975160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott xmlFree(buf); 975260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott return(NULL); 975360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } 975460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott buf[len++] = cur; 975560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott NEXT; 975660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott cur=CUR; 975760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (cur != '.') { 975860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott xmlFree(buf); 975960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott return(NULL); 976060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } 976160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott buf[len++] = cur; 976260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott NEXT; 976360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott cur=CUR; 976460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott while ((cur >= '0') && (cur <= '9')) { 9765ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (len + 1 >= size) { 9766ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar *tmp; 9767ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 9768ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project size *= 2; 9769ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project tmp = (xmlChar *) xmlRealloc(buf, size * sizeof(xmlChar)); 9770ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (tmp == NULL) { 977160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott xmlFree(buf); 9772ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlErrMemory(ctxt, NULL); 9773ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 9774ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 9775ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project buf = tmp; 9776ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 9777ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project buf[len++] = cur; 9778ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project NEXT; 9779ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur=CUR; 9780ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 9781ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project buf[len] = 0; 9782ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(buf); 9783ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 9784ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 9785ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 9786ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlParseVersionInfo: 9787ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctxt: an XML parser context 978860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * 9789ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * parse the XML version. 9790ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 9791ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [24] VersionInfo ::= S 'version' Eq (' VersionNum ' | " VersionNum ") 979260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * 9793ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [25] Eq ::= S? '=' S? 9794ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 9795ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the version string, e.g. "1.0" 9796ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 9797ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 9798ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlChar * 9799ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlParseVersionInfo(xmlParserCtxtPtr ctxt) { 9800ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar *version = NULL; 9801ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 9802ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (CMP7(CUR_PTR, 'v', 'e', 'r', 's', 'i', 'o', 'n')) { 9803ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SKIP(7); 9804ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SKIP_BLANKS; 9805ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (RAW != '=') { 9806ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErr(ctxt, XML_ERR_EQUAL_REQUIRED, NULL); 9807ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 9808ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 9809ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project NEXT; 9810ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SKIP_BLANKS; 9811ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (RAW == '"') { 9812ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project NEXT; 9813ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project version = xmlParseVersionNum(ctxt); 9814ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (RAW != '"') { 9815ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErr(ctxt, XML_ERR_STRING_NOT_CLOSED, NULL); 9816ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else 9817ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project NEXT; 9818ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if (RAW == '\''){ 9819ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project NEXT; 9820ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project version = xmlParseVersionNum(ctxt); 9821ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (RAW != '\'') { 9822ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErr(ctxt, XML_ERR_STRING_NOT_CLOSED, NULL); 9823ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else 9824ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project NEXT; 9825ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 9826ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErr(ctxt, XML_ERR_STRING_NOT_STARTED, NULL); 9827ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 9828ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 9829ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(version); 9830ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 9831ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 9832ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 9833ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlParseEncName: 9834ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctxt: an XML parser context 9835ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 9836ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * parse the XML encoding name 9837ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 9838ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [81] EncName ::= [A-Za-z] ([A-Za-z0-9._] | '-')* 9839ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 9840ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the encoding name value or NULL 9841ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 9842ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlChar * 9843ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlParseEncName(xmlParserCtxtPtr ctxt) { 9844ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar *buf = NULL; 9845ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int len = 0; 9846ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int size = 10; 9847ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar cur; 9848ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 9849ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur = CUR; 9850ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (((cur >= 'a') && (cur <= 'z')) || 9851ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ((cur >= 'A') && (cur <= 'Z'))) { 9852ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project buf = (xmlChar *) xmlMallocAtomic(size * sizeof(xmlChar)); 9853ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (buf == NULL) { 9854ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlErrMemory(ctxt, NULL); 9855ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 9856ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 985760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott 9858ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project buf[len++] = cur; 9859ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project NEXT; 9860ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur = CUR; 9861ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while (((cur >= 'a') && (cur <= 'z')) || 9862ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ((cur >= 'A') && (cur <= 'Z')) || 9863ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ((cur >= '0') && (cur <= '9')) || 9864ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (cur == '.') || (cur == '_') || 9865ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (cur == '-')) { 9866ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (len + 1 >= size) { 9867ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar *tmp; 9868ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 9869ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project size *= 2; 9870ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project tmp = (xmlChar *) xmlRealloc(buf, size * sizeof(xmlChar)); 9871ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (tmp == NULL) { 9872ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlErrMemory(ctxt, NULL); 9873ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree(buf); 9874ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 9875ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 9876ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project buf = tmp; 9877ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 9878ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project buf[len++] = cur; 9879ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project NEXT; 9880ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur = CUR; 9881ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (cur == 0) { 9882ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SHRINK; 9883ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project GROW; 9884ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur = CUR; 9885ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 9886ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 9887ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project buf[len] = 0; 9888ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 9889ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErr(ctxt, XML_ERR_ENCODING_NAME, NULL); 9890ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 9891ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(buf); 9892ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 9893ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 9894ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 9895ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlParseEncodingDecl: 9896ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctxt: an XML parser context 9897ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 9898ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * parse the XML encoding declaration 9899ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 9900ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [80] EncodingDecl ::= S 'encoding' Eq ('"' EncName '"' | "'" EncName "'") 9901ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 9902ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * this setups the conversion filters. 9903ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 9904ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the encoding value or NULL 9905ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 9906ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 9907ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectconst xmlChar * 9908ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlParseEncodingDecl(xmlParserCtxtPtr ctxt) { 9909ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar *encoding = NULL; 9910ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 9911ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SKIP_BLANKS; 9912ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (CMP8(CUR_PTR, 'e', 'n', 'c', 'o', 'd', 'i', 'n', 'g')) { 9913ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SKIP(8); 9914ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SKIP_BLANKS; 9915ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (RAW != '=') { 9916ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErr(ctxt, XML_ERR_EQUAL_REQUIRED, NULL); 9917ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 9918ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 9919ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project NEXT; 9920ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SKIP_BLANKS; 9921ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (RAW == '"') { 9922ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project NEXT; 9923ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project encoding = xmlParseEncName(ctxt); 9924ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (RAW != '"') { 9925ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErr(ctxt, XML_ERR_STRING_NOT_CLOSED, NULL); 9926ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else 9927ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project NEXT; 9928ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if (RAW == '\''){ 9929ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project NEXT; 9930ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project encoding = xmlParseEncName(ctxt); 9931ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (RAW != '\'') { 9932ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErr(ctxt, XML_ERR_STRING_NOT_CLOSED, NULL); 9933ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else 9934ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project NEXT; 9935ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 9936ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErr(ctxt, XML_ERR_STRING_NOT_STARTED, NULL); 9937ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 9938df143a5041f03a22808b59c76698770b74692815Selim Gurun 9939df143a5041f03a22808b59c76698770b74692815Selim Gurun /* 9940df143a5041f03a22808b59c76698770b74692815Selim Gurun * Non standard parsing, allowing the user to ignore encoding 9941df143a5041f03a22808b59c76698770b74692815Selim Gurun */ 9942df143a5041f03a22808b59c76698770b74692815Selim Gurun if (ctxt->options & XML_PARSE_IGNORE_ENC) 9943df143a5041f03a22808b59c76698770b74692815Selim Gurun return(encoding); 9944df143a5041f03a22808b59c76698770b74692815Selim Gurun 9945ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 9946ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * UTF-16 encoding stwich has already taken place at this stage, 9947ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * more over the little-endian/big-endian selection is already done 9948ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 9949ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((encoding != NULL) && 9950ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ((!xmlStrcasecmp(encoding, BAD_CAST "UTF-16")) || 9951ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (!xmlStrcasecmp(encoding, BAD_CAST "UTF16")))) { 995260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott /* 995360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * If no encoding was passed to the parser, that we are 995460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * using UTF-16 and no decoder is present i.e. the 995560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * document is apparently UTF-8 compatible, then raise an 995660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * encoding mismatch fatal error 995760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott */ 995860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if ((ctxt->encoding == NULL) && 995960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott (ctxt->input->buf != NULL) && 996060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott (ctxt->input->buf->encoder == NULL)) { 996160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott xmlFatalErrMsg(ctxt, XML_ERR_INVALID_ENCODING, 996260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott "Document labelled UTF-16 but has UTF-8 content\n"); 996360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } 9964ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt->encoding != NULL) 9965ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree((xmlChar *) ctxt->encoding); 9966ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->encoding = encoding; 9967ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 9968ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 9969ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * UTF-8 encoding is handled natively 9970ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 9971ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else if ((encoding != NULL) && 9972ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ((!xmlStrcasecmp(encoding, BAD_CAST "UTF-8")) || 9973ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (!xmlStrcasecmp(encoding, BAD_CAST "UTF8")))) { 9974ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt->encoding != NULL) 9975ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree((xmlChar *) ctxt->encoding); 9976ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->encoding = encoding; 9977ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 9978ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else if (encoding != NULL) { 9979ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlCharEncodingHandlerPtr handler; 9980ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 9981ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt->input->encoding != NULL) 9982ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree((xmlChar *) ctxt->input->encoding); 9983ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->input->encoding = encoding; 9984ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 9985ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project handler = xmlFindCharEncodingHandler((const char *) encoding); 9986ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (handler != NULL) { 9987ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSwitchToEncoding(ctxt, handler); 9988ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 9989ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErrMsgStr(ctxt, XML_ERR_UNSUPPORTED_ENCODING, 9990ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "Unsupported encoding %s\n", encoding); 9991ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 9992ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 9993ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 9994ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 9995ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(encoding); 9996ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 9997ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 9998ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 9999ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlParseSDDecl: 10000ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctxt: an XML parser context 10001ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 10002ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * parse the XML standalone declaration 10003ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 10004ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [32] SDDecl ::= S 'standalone' Eq 10005ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * (("'" ('yes' | 'no') "'") | ('"' ('yes' | 'no')'"')) 10006ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 10007ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [ VC: Standalone Document Declaration ] 10008ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * TODO The standalone document declaration must have the value "no" 10009ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * if any external markup declarations contain declarations of: 10010ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * - attributes with default values, if elements to which these 10011ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * attributes apply appear in the document without specifications 10012ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * of values for these attributes, or 10013ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * - entities (other than amp, lt, gt, apos, quot), if references 10014ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * to those entities appear in the document, or 10015ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * - attributes with values subject to normalization, where the 10016ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * attribute appears in the document with a value which will change 10017ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * as a result of normalization, or 10018ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * - element types with element content, if white space occurs directly 10019ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * within any instance of those types. 10020ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 10021ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns: 10022ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 1 if standalone="yes" 10023ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 0 if standalone="no" 10024ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * -2 if standalone attribute is missing or invalid 10025ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * (A standalone value of -2 means that the XML declaration was found, 10026ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * but no value was specified for the standalone attribute). 10027ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 10028ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 10029ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectint 10030ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlParseSDDecl(xmlParserCtxtPtr ctxt) { 10031ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int standalone = -2; 10032ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 10033ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SKIP_BLANKS; 10034ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (CMP10(CUR_PTR, 's', 't', 'a', 'n', 'd', 'a', 'l', 'o', 'n', 'e')) { 10035ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SKIP(10); 10036ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SKIP_BLANKS; 10037ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (RAW != '=') { 10038ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErr(ctxt, XML_ERR_EQUAL_REQUIRED, NULL); 10039ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(standalone); 10040ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 10041ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project NEXT; 10042ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SKIP_BLANKS; 10043ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (RAW == '\''){ 10044ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project NEXT; 10045ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((RAW == 'n') && (NXT(1) == 'o')) { 10046ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project standalone = 0; 10047ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SKIP(2); 10048ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if ((RAW == 'y') && (NXT(1) == 'e') && 10049ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (NXT(2) == 's')) { 10050ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project standalone = 1; 10051ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SKIP(3); 10052ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 10053ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErr(ctxt, XML_ERR_STANDALONE_VALUE, NULL); 10054ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 10055ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (RAW != '\'') { 10056ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErr(ctxt, XML_ERR_STRING_NOT_CLOSED, NULL); 10057ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else 10058ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project NEXT; 10059ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if (RAW == '"'){ 10060ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project NEXT; 10061ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((RAW == 'n') && (NXT(1) == 'o')) { 10062ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project standalone = 0; 10063ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SKIP(2); 10064ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if ((RAW == 'y') && (NXT(1) == 'e') && 10065ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (NXT(2) == 's')) { 10066ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project standalone = 1; 10067ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SKIP(3); 10068ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 10069ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErr(ctxt, XML_ERR_STANDALONE_VALUE, NULL); 10070ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 10071ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (RAW != '"') { 10072ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErr(ctxt, XML_ERR_STRING_NOT_CLOSED, NULL); 10073ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else 10074ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project NEXT; 10075ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 10076ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErr(ctxt, XML_ERR_STRING_NOT_STARTED, NULL); 10077ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 10078ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 10079ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(standalone); 10080ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 10081ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 10082ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 10083ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlParseXMLDecl: 10084ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctxt: an XML parser context 10085ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 10086ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * parse an XML declaration header 10087ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 10088ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [23] XMLDecl ::= '<?xml' VersionInfo EncodingDecl? SDDecl? S? '?>' 10089ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 10090ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 10091ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectvoid 10092ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlParseXMLDecl(xmlParserCtxtPtr ctxt) { 10093ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar *version; 10094ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 10095ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 10096ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * This value for standalone indicates that the document has an 10097ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * XML declaration but it does not have a standalone attribute. 10098ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * It will be overwritten later if a standalone attribute is found. 10099ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 10100ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->input->standalone = -2; 10101ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 10102ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 10103ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * We know that '<?xml' is here. 10104ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 10105ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SKIP(5); 10106ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 10107ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (!IS_BLANK_CH(RAW)) { 10108ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErrMsg(ctxt, XML_ERR_SPACE_REQUIRED, 10109ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "Blank needed after '<?xml'\n"); 10110ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 10111ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SKIP_BLANKS; 10112ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 10113ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 10114ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * We must have the VersionInfo here. 10115ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 10116ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project version = xmlParseVersionInfo(ctxt); 10117ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (version == NULL) { 10118ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErr(ctxt, XML_ERR_VERSION_MISSING, NULL); 10119ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 10120ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (!xmlStrEqual(version, (const xmlChar *) XML_DEFAULT_VERSION)) { 10121ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 1012260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * Changed here for XML-1.0 5th edition 10123ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 1012460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (ctxt->options & XML_PARSE_OLD10) { 1012560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott xmlFatalErrMsgStr(ctxt, XML_ERR_UNKNOWN_VERSION, 1012660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott "Unsupported version '%s'\n", 1012760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott version); 1012860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } else { 1012960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if ((version[0] == '1') && ((version[1] == '.'))) { 1013060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott xmlWarningMsg(ctxt, XML_WAR_UNKNOWN_VERSION, 1013160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott "Unsupported version '%s'\n", 1013260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott version, NULL); 1013360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } else { 1013460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott xmlFatalErrMsgStr(ctxt, XML_ERR_UNKNOWN_VERSION, 1013560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott "Unsupported version '%s'\n", 1013660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott version); 1013760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } 1013860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } 10139ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 10140ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt->version != NULL) 10141ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree((void *) ctxt->version); 10142ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->version = version; 10143ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 10144ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 10145ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 10146ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * We may have the encoding declaration 10147ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 10148ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (!IS_BLANK_CH(RAW)) { 10149ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((RAW == '?') && (NXT(1) == '>')) { 10150ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SKIP(2); 10151ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return; 10152ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 10153ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErrMsg(ctxt, XML_ERR_SPACE_REQUIRED, "Blank needed here\n"); 10154ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 10155ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParseEncodingDecl(ctxt); 10156ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt->errNo == XML_ERR_UNSUPPORTED_ENCODING) { 10157ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 10158ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * The XML REC instructs us to stop parsing right here 10159ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 10160ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return; 10161ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 10162ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 10163ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 10164ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * We may have the standalone status. 10165ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 10166ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ctxt->input->encoding != NULL) && (!IS_BLANK_CH(RAW))) { 10167ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((RAW == '?') && (NXT(1) == '>')) { 10168ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SKIP(2); 10169ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return; 10170ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 10171ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErrMsg(ctxt, XML_ERR_SPACE_REQUIRED, "Blank needed here\n"); 10172ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 10173df143a5041f03a22808b59c76698770b74692815Selim Gurun 10174df143a5041f03a22808b59c76698770b74692815Selim Gurun /* 10175df143a5041f03a22808b59c76698770b74692815Selim Gurun * We can grow the input buffer freely at that point 10176df143a5041f03a22808b59c76698770b74692815Selim Gurun */ 10177df143a5041f03a22808b59c76698770b74692815Selim Gurun GROW; 10178df143a5041f03a22808b59c76698770b74692815Selim Gurun 10179ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SKIP_BLANKS; 10180ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->input->standalone = xmlParseSDDecl(ctxt); 10181ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 10182ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SKIP_BLANKS; 10183ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((RAW == '?') && (NXT(1) == '>')) { 10184ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SKIP(2); 10185ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if (RAW == '>') { 10186ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* Deprecated old WD ... */ 10187ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErr(ctxt, XML_ERR_XMLDECL_NOT_FINISHED, NULL); 10188ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project NEXT; 10189ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 10190ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErr(ctxt, XML_ERR_XMLDECL_NOT_FINISHED, NULL); 10191ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project MOVETO_ENDTAG(CUR_PTR); 10192ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project NEXT; 10193ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 10194ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 10195ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 10196ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 10197ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlParseMisc: 10198ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctxt: an XML parser context 10199ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 10200ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * parse an XML Misc* optional field. 10201ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 10202ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [27] Misc ::= Comment | PI | S 10203ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 10204ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 10205ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectvoid 10206ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlParseMisc(xmlParserCtxtPtr ctxt) { 10207ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while (((RAW == '<') && (NXT(1) == '?')) || 10208ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (CMP4(CUR_PTR, '<', '!', '-', '-')) || 10209ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project IS_BLANK_CH(CUR)) { 10210ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((RAW == '<') && (NXT(1) == '?')) { 10211ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParsePI(ctxt); 10212ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if (IS_BLANK_CH(CUR)) { 10213ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project NEXT; 10214ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else 10215ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParseComment(ctxt); 10216ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 10217ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 10218ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 10219ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 10220ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlParseDocument: 10221ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctxt: an XML parser context 10222ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 10223ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * parse an XML document (and build a tree if using the standard SAX 10224ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * interface). 10225ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 10226ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [1] document ::= prolog element Misc* 10227ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 10228ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [22] prolog ::= XMLDecl? Misc* (doctypedecl Misc*)? 10229ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 10230ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns 0, -1 in case of error. the parser context is augmented 10231ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * as a result of the parsing. 10232ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 10233ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 10234ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectint 10235ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlParseDocument(xmlParserCtxtPtr ctxt) { 10236ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar start[4]; 10237ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlCharEncoding enc; 10238ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 10239ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlInitParser(); 10240ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 10241ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ctxt == NULL) || (ctxt->input == NULL)) 10242ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(-1); 10243ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 10244ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project GROW; 10245ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 10246ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 10247ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * SAX: detecting the level. 10248ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 10249ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlDetectSAX2(ctxt); 10250ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 10251ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 10252ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * SAX: beginning of the document processing. 10253ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 10254ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ctxt->sax) && (ctxt->sax->setDocumentLocator)) 10255ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->sax->setDocumentLocator(ctxt->userData, &xmlDefaultSAXLocator); 10256ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 10257df143a5041f03a22808b59c76698770b74692815Selim Gurun if ((ctxt->encoding == NULL) && 10258ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ((ctxt->input->end - ctxt->input->cur) >= 4)) { 10259ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 10260ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Get the 4 first bytes and decode the charset 10261ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * if enc != XML_CHAR_ENCODING_NONE 10262ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * plug some encoding conversion routines. 10263ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 10264ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project start[0] = RAW; 10265ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project start[1] = NXT(1); 10266ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project start[2] = NXT(2); 10267ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project start[3] = NXT(3); 10268ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project enc = xmlDetectCharEncoding(&start[0], 4); 10269ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (enc != XML_CHAR_ENCODING_NONE) { 10270ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSwitchEncoding(ctxt, enc); 10271ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 10272ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 10273ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 10274ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 10275ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (CUR == 0) { 10276ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErr(ctxt, XML_ERR_DOCUMENT_EMPTY, NULL); 10277ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 10278ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 10279ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 10280ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Check for the XMLDecl in the Prolog. 10281df143a5041f03a22808b59c76698770b74692815Selim Gurun * do not GROW here to avoid the detected encoder to decode more 10282df143a5041f03a22808b59c76698770b74692815Selim Gurun * than just the first line, unless the amount of data is really 10283df143a5041f03a22808b59c76698770b74692815Selim Gurun * too small to hold "<?xml version="1.0" encoding="foo" 10284ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 10285df143a5041f03a22808b59c76698770b74692815Selim Gurun if ((ctxt->input->end - ctxt->input->cur) < 35) { 10286df143a5041f03a22808b59c76698770b74692815Selim Gurun GROW; 10287df143a5041f03a22808b59c76698770b74692815Selim Gurun } 10288ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((CMP5(CUR_PTR, '<', '?', 'x', 'm', 'l')) && (IS_BLANK_CH(NXT(5)))) { 10289ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 10290ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 10291ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Note that we will switch encoding on the fly. 10292ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 10293ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParseXMLDecl(ctxt); 10294ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt->errNo == XML_ERR_UNSUPPORTED_ENCODING) { 10295ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 10296ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * The XML REC instructs us to stop parsing right here 10297ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 10298ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(-1); 10299ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 10300ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->standalone = ctxt->input->standalone; 10301ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SKIP_BLANKS; 10302ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 10303ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->version = xmlCharStrdup(XML_DEFAULT_VERSION); 10304ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 10305ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ctxt->sax) && (ctxt->sax->startDocument) && (!ctxt->disableSAX)) 10306ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->sax->startDocument(ctxt->userData); 10307ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 10308ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 10309ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * The Misc part of the Prolog 10310ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 10311ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project GROW; 10312ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParseMisc(ctxt); 10313ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 10314ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 10315ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Then possibly doc type declaration(s) and more Misc 10316ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * (doctypedecl Misc*)? 10317ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 10318ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project GROW; 10319ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (CMP9(CUR_PTR, '<', '!', 'D', 'O', 'C', 'T', 'Y', 'P', 'E')) { 10320ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 10321ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->inSubset = 1; 10322ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParseDocTypeDecl(ctxt); 10323ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (RAW == '[') { 10324ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->instate = XML_PARSER_DTD; 10325ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParseInternalSubset(ctxt); 10326ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 10327ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 10328ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 10329ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Create and update the external subset. 10330ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 10331ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->inSubset = 2; 10332ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ctxt->sax != NULL) && (ctxt->sax->externalSubset != NULL) && 10333ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (!ctxt->disableSAX)) 10334ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->sax->externalSubset(ctxt->userData, ctxt->intSubName, 10335ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->extSubSystem, ctxt->extSubURI); 10336ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->inSubset = 0; 10337ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 10338ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlCleanSpecialAttr(ctxt); 10339ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 10340ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->instate = XML_PARSER_PROLOG; 10341ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParseMisc(ctxt); 10342ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 10343ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 10344ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 10345ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Time to start parsing the tree itself 10346ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 10347ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project GROW; 10348ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (RAW != '<') { 10349ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErrMsg(ctxt, XML_ERR_DOCUMENT_EMPTY, 10350ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "Start tag expected, '<' not found\n"); 10351ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 10352ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->instate = XML_PARSER_CONTENT; 10353ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParseElement(ctxt); 10354ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->instate = XML_PARSER_EPILOG; 10355ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 10356ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 10357ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 10358ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * The Misc part at the end 10359ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 10360ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParseMisc(ctxt); 10361ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 10362ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (RAW != 0) { 10363ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErr(ctxt, XML_ERR_DOCUMENT_END, NULL); 10364ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 10365ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->instate = XML_PARSER_EOF; 10366ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 10367ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 10368ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 10369ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * SAX: end of the document processing. 10370ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 10371ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ctxt->sax) && (ctxt->sax->endDocument != NULL)) 10372ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->sax->endDocument(ctxt->userData); 10373ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 10374ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 10375ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Remove locally kept entity definitions if the tree was not built 10376ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 10377ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ctxt->myDoc != NULL) && 10378ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (xmlStrEqual(ctxt->myDoc->version, SAX_COMPAT_MODE))) { 10379ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFreeDoc(ctxt->myDoc); 10380ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->myDoc = NULL; 10381ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 10382ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1038360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if ((ctxt->wellFormed) && (ctxt->myDoc != NULL)) { 1038460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ctxt->myDoc->properties |= XML_DOC_WELLFORMED; 1038560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (ctxt->valid) 1038660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ctxt->myDoc->properties |= XML_DOC_DTDVALID; 1038760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (ctxt->nsWellFormed) 1038860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ctxt->myDoc->properties |= XML_DOC_NSVALID; 1038960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (ctxt->options & XML_PARSE_OLD10) 1039060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ctxt->myDoc->properties |= XML_DOC_OLD10; 1039160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } 10392ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (! ctxt->wellFormed) { 10393ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->valid = 0; 10394ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(-1); 10395ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 10396ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(0); 10397ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 10398ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 10399ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 10400ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlParseExtParsedEnt: 10401ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctxt: an XML parser context 10402ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 10403ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * parse a general parsed entity 10404ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * An external general parsed entity is well-formed if it matches the 10405ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * production labeled extParsedEnt. 10406ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 10407ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [78] extParsedEnt ::= TextDecl? content 10408ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 10409ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns 0, -1 in case of error. the parser context is augmented 10410ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * as a result of the parsing. 10411ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 10412ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 10413ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectint 10414ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlParseExtParsedEnt(xmlParserCtxtPtr ctxt) { 10415ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar start[4]; 10416ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlCharEncoding enc; 10417ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 10418ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ctxt == NULL) || (ctxt->input == NULL)) 10419ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(-1); 10420ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 10421ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlDefaultSAXHandlerInit(); 10422ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 10423ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlDetectSAX2(ctxt); 10424ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 10425ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project GROW; 10426ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 10427ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 10428ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * SAX: beginning of the document processing. 10429ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 10430ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ctxt->sax) && (ctxt->sax->setDocumentLocator)) 10431ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->sax->setDocumentLocator(ctxt->userData, &xmlDefaultSAXLocator); 10432ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 10433ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 10434ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Get the 4 first bytes and decode the charset 10435ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * if enc != XML_CHAR_ENCODING_NONE 10436ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * plug some encoding conversion routines. 10437ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 10438ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ctxt->input->end - ctxt->input->cur) >= 4) { 10439ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project start[0] = RAW; 10440ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project start[1] = NXT(1); 10441ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project start[2] = NXT(2); 10442ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project start[3] = NXT(3); 10443ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project enc = xmlDetectCharEncoding(start, 4); 10444ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (enc != XML_CHAR_ENCODING_NONE) { 10445ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSwitchEncoding(ctxt, enc); 10446ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 10447ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 10448ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 10449ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 10450ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (CUR == 0) { 10451ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErr(ctxt, XML_ERR_DOCUMENT_EMPTY, NULL); 10452ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 10453ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 10454ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 10455ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Check for the XMLDecl in the Prolog. 10456ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 10457ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project GROW; 10458ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((CMP5(CUR_PTR, '<', '?', 'x', 'm', 'l')) && (IS_BLANK_CH(NXT(5)))) { 10459ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 10460ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 10461ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Note that we will switch encoding on the fly. 10462ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 10463ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParseXMLDecl(ctxt); 10464ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt->errNo == XML_ERR_UNSUPPORTED_ENCODING) { 10465ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 10466ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * The XML REC instructs us to stop parsing right here 10467ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 10468ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(-1); 10469ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 10470ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SKIP_BLANKS; 10471ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 10472ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->version = xmlCharStrdup(XML_DEFAULT_VERSION); 10473ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 10474ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ctxt->sax) && (ctxt->sax->startDocument) && (!ctxt->disableSAX)) 10475ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->sax->startDocument(ctxt->userData); 10476ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 10477ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 10478ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Doing validity checking on chunk doesn't make sense 10479ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 10480ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->instate = XML_PARSER_CONTENT; 10481ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->validate = 0; 10482ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->loadsubset = 0; 10483ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->depth = 0; 10484ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 10485ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParseContent(ctxt); 10486ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 10487ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((RAW == '<') && (NXT(1) == '/')) { 10488ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErr(ctxt, XML_ERR_NOT_WELL_BALANCED, NULL); 10489ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if (RAW != 0) { 10490ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErr(ctxt, XML_ERR_EXTRA_CONTENT, NULL); 10491ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 10492ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 10493ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 10494ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * SAX: end of the document processing. 10495ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 10496ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ctxt->sax) && (ctxt->sax->endDocument != NULL)) 10497ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->sax->endDocument(ctxt->userData); 10498ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 10499ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (! ctxt->wellFormed) return(-1); 10500ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(0); 10501ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 10502ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 10503ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_PUSH_ENABLED 10504ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/************************************************************************ 10505ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * * 10506ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Progressive parsing interfaces * 10507ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * * 10508ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ************************************************************************/ 10509ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 10510ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 10511ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlParseLookupSequence: 10512ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctxt: an XML parser context 10513ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @first: the first char to lookup 10514ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @next: the next char to lookup or zero 10515ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @third: the next char to lookup or zero 10516ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 10517ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Try to find if a sequence (first, next, third) or just (first next) or 10518ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * (first) is available in the input stream. 10519ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * This function has a side effect of (possibly) incrementing ctxt->checkIndex 10520ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * to avoid rescanning sequences of bytes, it DOES change the state of the 10521ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * parser, do not use liberally. 10522ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 10523ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the index to the current parsing point if the full sequence 10524ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * is available, -1 otherwise. 10525ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 10526ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic int 10527ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlParseLookupSequence(xmlParserCtxtPtr ctxt, xmlChar first, 10528ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar next, xmlChar third) { 10529ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int base, len; 10530ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParserInputPtr in; 10531ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar *buf; 10532ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 10533ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project in = ctxt->input; 10534ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (in == NULL) return(-1); 10535ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project base = in->cur - in->base; 10536ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (base < 0) return(-1); 10537ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt->checkIndex > base) 10538ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project base = ctxt->checkIndex; 10539ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (in->buf == NULL) { 10540ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project buf = in->base; 10541ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project len = in->length; 10542ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 10543ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project buf = in->buf->buffer->content; 10544ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project len = in->buf->buffer->use; 10545ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 10546ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* take into account the sequence length */ 10547ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (third) len -= 2; 10548ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else if (next) len --; 10549ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project for (;base < len;base++) { 10550ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (buf[base] == first) { 10551ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (third != 0) { 10552ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((buf[base + 1] != next) || 10553ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (buf[base + 2] != third)) continue; 10554ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if (next != 0) { 10555ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (buf[base + 1] != next) continue; 10556ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 10557ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->checkIndex = 0; 10558ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef DEBUG_PUSH 10559ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (next == 0) 10560ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlGenericError(xmlGenericErrorContext, 10561ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "PP: lookup '%c' found at %d\n", 10562ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project first, base); 10563ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else if (third == 0) 10564ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlGenericError(xmlGenericErrorContext, 10565ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "PP: lookup '%c%c' found at %d\n", 10566ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project first, next, base); 10567ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else 10568ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlGenericError(xmlGenericErrorContext, 10569ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "PP: lookup '%c%c%c' found at %d\n", 10570ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project first, next, third, base); 10571ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 10572ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(base - (in->cur - in->base)); 10573ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 10574ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 10575ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->checkIndex = base; 10576ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef DEBUG_PUSH 10577ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (next == 0) 10578ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlGenericError(xmlGenericErrorContext, 10579ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "PP: lookup '%c' failed\n", first); 10580ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else if (third == 0) 10581ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlGenericError(xmlGenericErrorContext, 10582ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "PP: lookup '%c%c' failed\n", first, next); 10583ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else 10584ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlGenericError(xmlGenericErrorContext, 10585ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "PP: lookup '%c%c%c' failed\n", first, next, third); 10586ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 10587ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(-1); 10588ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 10589ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 10590ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 10591ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlParseGetLasts: 10592ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctxt: an XML parser context 10593ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @lastlt: pointer to store the last '<' from the input 10594ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @lastgt: pointer to store the last '>' from the input 10595ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 10596ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Lookup the last < and > in the current chunk 10597ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 10598ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic void 10599ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlParseGetLasts(xmlParserCtxtPtr ctxt, const xmlChar **lastlt, 10600ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar **lastgt) { 10601ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar *tmp; 10602ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 10603ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ctxt == NULL) || (lastlt == NULL) || (lastgt == NULL)) { 10604ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlGenericError(xmlGenericErrorContext, 10605ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "Internal error: xmlParseGetLasts\n"); 10606ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return; 10607ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 10608ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ctxt->progressive != 0) && (ctxt->inputNr == 1)) { 10609ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project tmp = ctxt->input->end; 10610ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project tmp--; 10611ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while ((tmp >= ctxt->input->base) && (*tmp != '<')) tmp--; 10612ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (tmp < ctxt->input->base) { 10613ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *lastlt = NULL; 10614ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *lastgt = NULL; 10615ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 10616ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *lastlt = tmp; 10617ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project tmp++; 10618ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while ((tmp < ctxt->input->end) && (*tmp != '>')) { 10619ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (*tmp == '\'') { 10620ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project tmp++; 10621ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while ((tmp < ctxt->input->end) && (*tmp != '\'')) tmp++; 10622ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (tmp < ctxt->input->end) tmp++; 10623ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if (*tmp == '"') { 10624ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project tmp++; 10625ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while ((tmp < ctxt->input->end) && (*tmp != '"')) tmp++; 10626ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (tmp < ctxt->input->end) tmp++; 10627ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else 10628ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project tmp++; 10629ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 10630ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (tmp < ctxt->input->end) 10631ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *lastgt = tmp; 10632ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else { 10633ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project tmp = *lastlt; 10634ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project tmp--; 10635ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while ((tmp >= ctxt->input->base) && (*tmp != '>')) tmp--; 10636ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (tmp >= ctxt->input->base) 10637ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *lastgt = tmp; 10638ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else 10639ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *lastgt = NULL; 10640ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 10641ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 10642ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 10643ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *lastlt = NULL; 10644ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *lastgt = NULL; 10645ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 10646ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 10647ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 10648ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlCheckCdataPush: 10649ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @cur: pointer to the bock of characters 10650ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @len: length of the block in bytes 10651ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 10652ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Check that the block of characters is okay as SCdata content [20] 10653ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 10654ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the number of bytes to pass if okay, a negative index where an 10655ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * UTF-8 error occured otherwise 10656ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 10657ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic int 10658ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlCheckCdataPush(const xmlChar *utf, int len) { 10659ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int ix; 10660ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project unsigned char c; 10661ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int codepoint; 10662ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 10663ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((utf == NULL) || (len <= 0)) 10664ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(0); 10665ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 10666ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project for (ix = 0; ix < len;) { /* string is 0-terminated */ 10667ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project c = utf[ix]; 10668ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((c & 0x80) == 0x00) { /* 1-byte code, starts with 10 */ 10669ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (c >= 0x20) 10670ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ix++; 10671ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else if ((c == 0xA) || (c == 0xD) || (c == 0x9)) 10672ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ix++; 10673ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else 10674ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(-ix); 10675ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if ((c & 0xe0) == 0xc0) {/* 2-byte code, starts with 110 */ 10676ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ix + 2 > len) return(ix); 10677ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((utf[ix+1] & 0xc0 ) != 0x80) 10678ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(-ix); 10679ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project codepoint = (utf[ix] & 0x1f) << 6; 10680ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project codepoint |= utf[ix+1] & 0x3f; 10681ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (!xmlIsCharQ(codepoint)) 10682ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(-ix); 10683ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ix += 2; 10684ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if ((c & 0xf0) == 0xe0) {/* 3-byte code, starts with 1110 */ 10685ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ix + 3 > len) return(ix); 10686ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (((utf[ix+1] & 0xc0) != 0x80) || 10687ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ((utf[ix+2] & 0xc0) != 0x80)) 10688ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(-ix); 10689ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project codepoint = (utf[ix] & 0xf) << 12; 10690ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project codepoint |= (utf[ix+1] & 0x3f) << 6; 10691ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project codepoint |= utf[ix+2] & 0x3f; 10692ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (!xmlIsCharQ(codepoint)) 10693ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(-ix); 10694ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ix += 3; 10695ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if ((c & 0xf8) == 0xf0) {/* 4-byte code, starts with 11110 */ 10696ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ix + 4 > len) return(ix); 10697ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (((utf[ix+1] & 0xc0) != 0x80) || 10698ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ((utf[ix+2] & 0xc0) != 0x80) || 10699ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ((utf[ix+3] & 0xc0) != 0x80)) 10700ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(-ix); 10701ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project codepoint = (utf[ix] & 0x7) << 18; 10702ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project codepoint |= (utf[ix+1] & 0x3f) << 12; 10703ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project codepoint |= (utf[ix+2] & 0x3f) << 6; 10704ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project codepoint |= utf[ix+3] & 0x3f; 10705ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (!xmlIsCharQ(codepoint)) 10706ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(-ix); 10707ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ix += 4; 10708ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else /* unknown encoding */ 10709ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(-ix); 10710ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 10711ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(ix); 10712ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 10713ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 10714ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 10715ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlParseTryOrFinish: 10716ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctxt: an XML parser context 10717ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @terminate: last chunk indicator 10718ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 10719ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Try to progress on parsing 10720ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 10721ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns zero if no parsing was possible 10722ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 10723ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic int 10724ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlParseTryOrFinish(xmlParserCtxtPtr ctxt, int terminate) { 10725ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int ret = 0; 10726ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int avail, tlen; 10727ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar cur, next; 10728ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar *lastlt, *lastgt; 10729ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 10730ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt->input == NULL) 10731ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(0); 10732ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 10733ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef DEBUG_PUSH 10734ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project switch (ctxt->instate) { 10735ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_PARSER_EOF: 10736ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlGenericError(xmlGenericErrorContext, 10737ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "PP: try EOF\n"); break; 10738ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_PARSER_START: 10739ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlGenericError(xmlGenericErrorContext, 10740ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "PP: try START\n"); break; 10741ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_PARSER_MISC: 10742ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlGenericError(xmlGenericErrorContext, 10743ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "PP: try MISC\n");break; 10744ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_PARSER_COMMENT: 10745ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlGenericError(xmlGenericErrorContext, 10746ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "PP: try COMMENT\n");break; 10747ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_PARSER_PROLOG: 10748ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlGenericError(xmlGenericErrorContext, 10749ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "PP: try PROLOG\n");break; 10750ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_PARSER_START_TAG: 10751ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlGenericError(xmlGenericErrorContext, 10752ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "PP: try START_TAG\n");break; 10753ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_PARSER_CONTENT: 10754ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlGenericError(xmlGenericErrorContext, 10755ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "PP: try CONTENT\n");break; 10756ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_PARSER_CDATA_SECTION: 10757ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlGenericError(xmlGenericErrorContext, 10758ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "PP: try CDATA_SECTION\n");break; 10759ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_PARSER_END_TAG: 10760ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlGenericError(xmlGenericErrorContext, 10761ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "PP: try END_TAG\n");break; 10762ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_PARSER_ENTITY_DECL: 10763ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlGenericError(xmlGenericErrorContext, 10764ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "PP: try ENTITY_DECL\n");break; 10765ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_PARSER_ENTITY_VALUE: 10766ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlGenericError(xmlGenericErrorContext, 10767ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "PP: try ENTITY_VALUE\n");break; 10768ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_PARSER_ATTRIBUTE_VALUE: 10769ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlGenericError(xmlGenericErrorContext, 10770ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "PP: try ATTRIBUTE_VALUE\n");break; 10771ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_PARSER_DTD: 10772ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlGenericError(xmlGenericErrorContext, 10773ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "PP: try DTD\n");break; 10774ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_PARSER_EPILOG: 10775ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlGenericError(xmlGenericErrorContext, 10776ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "PP: try EPILOG\n");break; 10777ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_PARSER_PI: 10778ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlGenericError(xmlGenericErrorContext, 10779ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "PP: try PI\n");break; 10780ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_PARSER_IGNORE: 10781ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlGenericError(xmlGenericErrorContext, 10782ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "PP: try IGNORE\n");break; 10783ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 10784ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 10785ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 10786ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ctxt->input != NULL) && 10787ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (ctxt->input->cur - ctxt->input->base > 4096)) { 10788ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSHRINK(ctxt); 10789ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->checkIndex = 0; 10790ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 10791ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParseGetLasts(ctxt, &lastlt, &lastgt); 10792ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 10793ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while (1) { 10794ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ctxt->errNo != XML_ERR_OK) && (ctxt->disableSAX == 1)) 10795ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(0); 10796ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 10797ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 10798ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 10799ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Pop-up of finished entities. 10800ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 10801ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while ((RAW == 0) && (ctxt->inputNr > 1)) 10802ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlPopInput(ctxt); 10803ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 10804ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt->input == NULL) break; 10805ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt->input->buf == NULL) 10806ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project avail = ctxt->input->length - 10807ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (ctxt->input->cur - ctxt->input->base); 10808ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else { 10809ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 10810ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * If we are operating on converted input, try to flush 10811ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * remainng chars to avoid them stalling in the non-converted 10812ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * buffer. 10813ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 10814ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ctxt->input->buf->raw != NULL) && 10815ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (ctxt->input->buf->raw->use > 0)) { 10816ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int base = ctxt->input->base - 10817ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->input->buf->buffer->content; 10818ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int current = ctxt->input->cur - ctxt->input->base; 10819ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 10820ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParserInputBufferPush(ctxt->input->buf, 0, ""); 10821ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->input->base = ctxt->input->buf->buffer->content + base; 10822ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->input->cur = ctxt->input->base + current; 10823ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->input->end = 10824ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project &ctxt->input->buf->buffer->content[ 10825ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->input->buf->buffer->use]; 10826ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 10827ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project avail = ctxt->input->buf->buffer->use - 10828ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (ctxt->input->cur - ctxt->input->base); 10829ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 10830ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (avail < 1) 10831ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto done; 10832ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project switch (ctxt->instate) { 10833ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_PARSER_EOF: 10834ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 10835ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Document parsing is done ! 10836ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 10837ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto done; 10838ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_PARSER_START: 10839ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt->charset == XML_CHAR_ENCODING_NONE) { 10840ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar start[4]; 10841ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlCharEncoding enc; 10842ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 10843ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 10844ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Very first chars read from the document flow. 10845ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 10846ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (avail < 4) 10847ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto done; 10848ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 10849ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 10850ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Get the 4 first bytes and decode the charset 10851ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * if enc != XML_CHAR_ENCODING_NONE 10852ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * plug some encoding conversion routines, 10853ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * else xmlSwitchEncoding will set to (default) 10854ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * UTF8. 10855ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 10856ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project start[0] = RAW; 10857ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project start[1] = NXT(1); 10858ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project start[2] = NXT(2); 10859ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project start[3] = NXT(3); 10860ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project enc = xmlDetectCharEncoding(start, 4); 10861ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSwitchEncoding(ctxt, enc); 10862ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 10863ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 10864ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 10865ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (avail < 2) 10866ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto done; 10867ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur = ctxt->input->cur[0]; 10868ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project next = ctxt->input->cur[1]; 10869ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (cur == 0) { 10870ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ctxt->sax) && (ctxt->sax->setDocumentLocator)) 10871ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->sax->setDocumentLocator(ctxt->userData, 10872ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project &xmlDefaultSAXLocator); 10873ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErr(ctxt, XML_ERR_DOCUMENT_EMPTY, NULL); 10874ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->instate = XML_PARSER_EOF; 10875ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef DEBUG_PUSH 10876ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlGenericError(xmlGenericErrorContext, 10877ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "PP: entering EOF\n"); 10878ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 10879ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ctxt->sax) && (ctxt->sax->endDocument != NULL)) 10880ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->sax->endDocument(ctxt->userData); 10881ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto done; 10882ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 10883ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((cur == '<') && (next == '?')) { 10884ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* PI or XML decl */ 10885ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (avail < 5) return(ret); 10886ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((!terminate) && 10887ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (xmlParseLookupSequence(ctxt, '?', '>', 0) < 0)) 10888ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(ret); 10889ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ctxt->sax) && (ctxt->sax->setDocumentLocator)) 10890ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->sax->setDocumentLocator(ctxt->userData, 10891ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project &xmlDefaultSAXLocator); 10892ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ctxt->input->cur[2] == 'x') && 10893ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (ctxt->input->cur[3] == 'm') && 10894ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (ctxt->input->cur[4] == 'l') && 10895ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (IS_BLANK_CH(ctxt->input->cur[5]))) { 10896ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret += 5; 10897ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef DEBUG_PUSH 10898ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlGenericError(xmlGenericErrorContext, 10899ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "PP: Parsing XML Decl\n"); 10900ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 10901ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParseXMLDecl(ctxt); 10902ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt->errNo == XML_ERR_UNSUPPORTED_ENCODING) { 10903ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 10904ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * The XML REC instructs us to stop parsing right 10905ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * here 10906ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 10907ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->instate = XML_PARSER_EOF; 10908ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(0); 10909ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 10910ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->standalone = ctxt->input->standalone; 10911ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ctxt->encoding == NULL) && 10912ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (ctxt->input->encoding != NULL)) 10913ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->encoding = xmlStrdup(ctxt->input->encoding); 10914ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ctxt->sax) && (ctxt->sax->startDocument) && 10915ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (!ctxt->disableSAX)) 10916ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->sax->startDocument(ctxt->userData); 10917ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->instate = XML_PARSER_MISC; 10918ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef DEBUG_PUSH 10919ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlGenericError(xmlGenericErrorContext, 10920ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "PP: entering MISC\n"); 10921ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 10922ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 10923ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->version = xmlCharStrdup(XML_DEFAULT_VERSION); 10924ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ctxt->sax) && (ctxt->sax->startDocument) && 10925ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (!ctxt->disableSAX)) 10926ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->sax->startDocument(ctxt->userData); 10927ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->instate = XML_PARSER_MISC; 10928ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef DEBUG_PUSH 10929ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlGenericError(xmlGenericErrorContext, 10930ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "PP: entering MISC\n"); 10931ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 10932ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 10933ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 10934ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ctxt->sax) && (ctxt->sax->setDocumentLocator)) 10935ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->sax->setDocumentLocator(ctxt->userData, 10936ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project &xmlDefaultSAXLocator); 10937ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->version = xmlCharStrdup(XML_DEFAULT_VERSION); 10938ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt->version == NULL) { 10939ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlErrMemory(ctxt, NULL); 10940ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 10941ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 10942ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ctxt->sax) && (ctxt->sax->startDocument) && 10943ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (!ctxt->disableSAX)) 10944ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->sax->startDocument(ctxt->userData); 10945ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->instate = XML_PARSER_MISC; 10946ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef DEBUG_PUSH 10947ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlGenericError(xmlGenericErrorContext, 10948ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "PP: entering MISC\n"); 10949ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 10950ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 10951ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 10952ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_PARSER_START_TAG: { 10953ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar *name; 10954df143a5041f03a22808b59c76698770b74692815Selim Gurun const xmlChar *prefix = NULL; 10955df143a5041f03a22808b59c76698770b74692815Selim Gurun const xmlChar *URI = NULL; 10956ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int nsNr = ctxt->nsNr; 10957ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 10958ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((avail < 2) && (ctxt->inputNr == 1)) 10959ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto done; 10960ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur = ctxt->input->cur[0]; 10961ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (cur != '<') { 10962ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErr(ctxt, XML_ERR_DOCUMENT_EMPTY, NULL); 10963ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->instate = XML_PARSER_EOF; 10964ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ctxt->sax) && (ctxt->sax->endDocument != NULL)) 10965ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->sax->endDocument(ctxt->userData); 10966ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto done; 10967ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 10968ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (!terminate) { 10969ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt->progressive) { 10970ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* > can be found unescaped in attribute values */ 10971ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((lastgt == NULL) || (ctxt->input->cur >= lastgt)) 10972ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto done; 10973ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if (xmlParseLookupSequence(ctxt, '>', 0, 0) < 0) { 10974ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto done; 10975ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 10976ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 10977ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt->spaceNr == 0) 10978ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project spacePush(ctxt, -1); 10979ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else if (*ctxt->space == -2) 10980ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project spacePush(ctxt, -1); 10981ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else 10982ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project spacePush(ctxt, *ctxt->space); 10983ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_SAX1_ENABLED 10984ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt->sax2) 10985ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif /* LIBXML_SAX1_ENABLED */ 10986ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project name = xmlParseStartTag2(ctxt, &prefix, &URI, &tlen); 10987ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_SAX1_ENABLED 10988ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else 10989ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project name = xmlParseStartTag(ctxt); 10990ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif /* LIBXML_SAX1_ENABLED */ 10991df143a5041f03a22808b59c76698770b74692815Selim Gurun if (ctxt->instate == XML_PARSER_EOF) 10992df143a5041f03a22808b59c76698770b74692815Selim Gurun goto done; 10993ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (name == NULL) { 10994ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project spacePop(ctxt); 10995ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->instate = XML_PARSER_EOF; 10996ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ctxt->sax) && (ctxt->sax->endDocument != NULL)) 10997ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->sax->endDocument(ctxt->userData); 10998ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto done; 10999ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 11000ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_VALID_ENABLED 11001ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 11002ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [ VC: Root Element Type ] 11003ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * The Name in the document type declaration must match 11004ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * the element type of the root element. 11005ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 11006ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt->validate && ctxt->wellFormed && ctxt->myDoc && 11007ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->node && (ctxt->node == ctxt->myDoc->children)) 11008ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->valid &= xmlValidateRoot(&ctxt->vctxt, ctxt->myDoc); 11009ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif /* LIBXML_VALID_ENABLED */ 11010ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 11011ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 11012ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Check for an Empty Element. 11013ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 11014ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((RAW == '/') && (NXT(1) == '>')) { 11015ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SKIP(2); 11016ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 11017ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt->sax2) { 11018ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ctxt->sax != NULL) && 11019ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (ctxt->sax->endElementNs != NULL) && 11020ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (!ctxt->disableSAX)) 11021ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->sax->endElementNs(ctxt->userData, name, 11022ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project prefix, URI); 11023ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt->nsNr - nsNr > 0) 11024ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project nsPop(ctxt, ctxt->nsNr - nsNr); 11025ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_SAX1_ENABLED 11026ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 11027ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ctxt->sax != NULL) && 11028ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (ctxt->sax->endElement != NULL) && 11029ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (!ctxt->disableSAX)) 11030ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->sax->endElement(ctxt->userData, name); 11031ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif /* LIBXML_SAX1_ENABLED */ 11032ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 11033ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project spacePop(ctxt); 11034ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt->nameNr == 0) { 11035ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->instate = XML_PARSER_EPILOG; 11036ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 11037ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->instate = XML_PARSER_CONTENT; 11038ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 11039ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 11040ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 11041ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (RAW == '>') { 11042ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project NEXT; 11043ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 11044ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErrMsgStr(ctxt, XML_ERR_GT_REQUIRED, 11045ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "Couldn't find end of Start Tag %s\n", 11046ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project name); 11047ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project nodePop(ctxt); 11048ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project spacePop(ctxt); 11049ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 11050ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt->sax2) 11051ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project nameNsPush(ctxt, name, prefix, URI, ctxt->nsNr - nsNr); 11052ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_SAX1_ENABLED 11053ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else 11054ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project namePush(ctxt, name); 11055ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif /* LIBXML_SAX1_ENABLED */ 11056ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 11057ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->instate = XML_PARSER_CONTENT; 11058ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 11059ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 11060ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_PARSER_CONTENT: { 11061ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar *test; 11062ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project unsigned int cons; 11063ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((avail < 2) && (ctxt->inputNr == 1)) 11064ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto done; 11065ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur = ctxt->input->cur[0]; 11066ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project next = ctxt->input->cur[1]; 11067ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 11068ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project test = CUR_PTR; 11069ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cons = ctxt->input->consumed; 11070ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((cur == '<') && (next == '/')) { 11071ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->instate = XML_PARSER_END_TAG; 11072ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 11073ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if ((cur == '<') && (next == '?')) { 11074ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((!terminate) && 11075ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (xmlParseLookupSequence(ctxt, '?', '>', 0) < 0)) 11076ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto done; 11077ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParsePI(ctxt); 11078ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if ((cur == '<') && (next != '!')) { 11079ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->instate = XML_PARSER_START_TAG; 11080ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 11081ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if ((cur == '<') && (next == '!') && 11082ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (ctxt->input->cur[2] == '-') && 11083ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (ctxt->input->cur[3] == '-')) { 11084ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int term; 11085ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 11086ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (avail < 4) 11087ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto done; 11088ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->input->cur += 4; 11089ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project term = xmlParseLookupSequence(ctxt, '-', '-', '>'); 11090ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->input->cur -= 4; 11091ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((!terminate) && (term < 0)) 11092ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto done; 11093ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParseComment(ctxt); 11094ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->instate = XML_PARSER_CONTENT; 11095ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if ((cur == '<') && (ctxt->input->cur[1] == '!') && 11096ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (ctxt->input->cur[2] == '[') && 11097ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (ctxt->input->cur[3] == 'C') && 11098ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (ctxt->input->cur[4] == 'D') && 11099ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (ctxt->input->cur[5] == 'A') && 11100ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (ctxt->input->cur[6] == 'T') && 11101ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (ctxt->input->cur[7] == 'A') && 11102ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (ctxt->input->cur[8] == '[')) { 11103ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SKIP(9); 11104ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->instate = XML_PARSER_CDATA_SECTION; 11105ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 11106ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if ((cur == '<') && (next == '!') && 11107ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (avail < 9)) { 11108ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto done; 11109ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if (cur == '&') { 11110ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((!terminate) && 11111ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (xmlParseLookupSequence(ctxt, ';', 0, 0) < 0)) 11112ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto done; 11113ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParseReference(ctxt); 11114ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 11115ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* TODO Avoid the extra copy, handle directly !!! */ 11116ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 11117ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Goal of the following test is: 11118ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * - minimize calls to the SAX 'character' callback 11119ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * when they are mergeable 11120ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * - handle an problem for isBlank when we only parse 11121ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * a sequence of blank chars and the next one is 11122ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * not available to check against '<' presence. 11123ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * - tries to homogenize the differences in SAX 11124ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * callbacks between the push and pull versions 11125ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * of the parser. 11126ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 11127ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ctxt->inputNr == 1) && 11128ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (avail < XML_PARSER_BIG_BUFFER_SIZE)) { 11129ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (!terminate) { 11130ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt->progressive) { 11131ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((lastlt == NULL) || 11132ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (ctxt->input->cur > lastlt)) 11133ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto done; 11134ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if (xmlParseLookupSequence(ctxt, 11135ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project '<', 0, 0) < 0) { 11136ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto done; 11137ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 11138ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 11139ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 11140ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->checkIndex = 0; 11141ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParseCharData(ctxt, 0); 11142ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 11143ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 11144ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Pop-up of finished entities. 11145ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 11146ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while ((RAW == 0) && (ctxt->inputNr > 1)) 11147ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlPopInput(ctxt); 11148ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((cons == ctxt->input->consumed) && (test == CUR_PTR)) { 11149ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErr(ctxt, XML_ERR_INTERNAL_ERROR, 11150ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "detected an error in element content\n"); 11151ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->instate = XML_PARSER_EOF; 11152ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 11153ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 11154ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 11155ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 11156ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_PARSER_END_TAG: 11157ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (avail < 2) 11158ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto done; 11159ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (!terminate) { 11160ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt->progressive) { 11161ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* > can be found unescaped in attribute values */ 11162ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((lastgt == NULL) || (ctxt->input->cur >= lastgt)) 11163ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto done; 11164ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if (xmlParseLookupSequence(ctxt, '>', 0, 0) < 0) { 11165ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto done; 11166ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 11167ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 11168ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt->sax2) { 11169ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParseEndTag2(ctxt, 11170ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (void *) ctxt->pushTab[ctxt->nameNr * 3 - 3], 11171ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (void *) ctxt->pushTab[ctxt->nameNr * 3 - 2], 0, 11172ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (int) (long) ctxt->pushTab[ctxt->nameNr * 3 - 1], 0); 11173ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project nameNsPop(ctxt); 11174ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 11175ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_SAX1_ENABLED 11176ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else 11177ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParseEndTag1(ctxt, 0); 11178ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif /* LIBXML_SAX1_ENABLED */ 11179df143a5041f03a22808b59c76698770b74692815Selim Gurun if (ctxt->instate == XML_PARSER_EOF) { 11180df143a5041f03a22808b59c76698770b74692815Selim Gurun /* Nothing */ 11181df143a5041f03a22808b59c76698770b74692815Selim Gurun } else if (ctxt->nameNr == 0) { 11182ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->instate = XML_PARSER_EPILOG; 11183ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 11184ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->instate = XML_PARSER_CONTENT; 11185ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 11186ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 11187ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_PARSER_CDATA_SECTION: { 11188ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 11189ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * The Push mode need to have the SAX callback for 11190ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * cdataBlock merge back contiguous callbacks. 11191ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 11192ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int base; 11193ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 11194ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project base = xmlParseLookupSequence(ctxt, ']', ']', '>'); 11195ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (base < 0) { 11196ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (avail >= XML_PARSER_BIG_BUFFER_SIZE + 2) { 11197ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int tmp; 11198ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 11199ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project tmp = xmlCheckCdataPush(ctxt->input->cur, 11200ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project XML_PARSER_BIG_BUFFER_SIZE); 11201ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (tmp < 0) { 11202ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project tmp = -tmp; 11203ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->input->cur += tmp; 11204ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto encoding_error; 11205ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 11206ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ctxt->sax != NULL) && (!ctxt->disableSAX)) { 11207ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt->sax->cdataBlock != NULL) 11208ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->sax->cdataBlock(ctxt->userData, 11209ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->input->cur, tmp); 11210ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else if (ctxt->sax->characters != NULL) 11211ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->sax->characters(ctxt->userData, 11212ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->input->cur, tmp); 11213ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 11214ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SKIPL(tmp); 11215ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->checkIndex = 0; 11216ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 11217ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto done; 11218ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 11219ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int tmp; 11220ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 11221ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project tmp = xmlCheckCdataPush(ctxt->input->cur, base); 11222ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((tmp < 0) || (tmp != base)) { 11223ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project tmp = -tmp; 11224ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->input->cur += tmp; 11225ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto encoding_error; 11226ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1122760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if ((ctxt->sax != NULL) && (base == 0) && 1122860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott (ctxt->sax->cdataBlock != NULL) && 1122960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott (!ctxt->disableSAX)) { 1123060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott /* 1123160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * Special case to provide identical behaviour 1123260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * between pull and push parsers on enpty CDATA 1123360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * sections 1123460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott */ 1123560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if ((ctxt->input->cur - ctxt->input->base >= 9) && 1123660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott (!strncmp((const char *)&ctxt->input->cur[-9], 1123760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott "<![CDATA[", 9))) 1123860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ctxt->sax->cdataBlock(ctxt->userData, 1123960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott BAD_CAST "", 0); 1124060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } else if ((ctxt->sax != NULL) && (base > 0) && 11241ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (!ctxt->disableSAX)) { 11242ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt->sax->cdataBlock != NULL) 11243ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->sax->cdataBlock(ctxt->userData, 11244ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->input->cur, base); 11245ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else if (ctxt->sax->characters != NULL) 11246ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->sax->characters(ctxt->userData, 11247ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->input->cur, base); 11248ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 11249ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SKIPL(base + 3); 11250ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->checkIndex = 0; 11251ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->instate = XML_PARSER_CONTENT; 11252ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef DEBUG_PUSH 11253ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlGenericError(xmlGenericErrorContext, 11254ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "PP: entering CONTENT\n"); 11255ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 11256ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 11257ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 11258ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 11259ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_PARSER_MISC: 11260ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SKIP_BLANKS; 11261ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt->input->buf == NULL) 11262ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project avail = ctxt->input->length - 11263ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (ctxt->input->cur - ctxt->input->base); 11264ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else 11265ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project avail = ctxt->input->buf->buffer->use - 11266ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (ctxt->input->cur - ctxt->input->base); 11267ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (avail < 2) 11268ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto done; 11269ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur = ctxt->input->cur[0]; 11270ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project next = ctxt->input->cur[1]; 11271ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((cur == '<') && (next == '?')) { 11272ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((!terminate) && 11273ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (xmlParseLookupSequence(ctxt, '?', '>', 0) < 0)) 11274ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto done; 11275ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef DEBUG_PUSH 11276ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlGenericError(xmlGenericErrorContext, 11277ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "PP: Parsing PI\n"); 11278ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 11279ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParsePI(ctxt); 11280ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->checkIndex = 0; 11281ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if ((cur == '<') && (next == '!') && 11282ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (ctxt->input->cur[2] == '-') && 11283ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (ctxt->input->cur[3] == '-')) { 11284ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((!terminate) && 11285ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (xmlParseLookupSequence(ctxt, '-', '-', '>') < 0)) 11286ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto done; 11287ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef DEBUG_PUSH 11288ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlGenericError(xmlGenericErrorContext, 11289ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "PP: Parsing Comment\n"); 11290ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 11291ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParseComment(ctxt); 11292ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->instate = XML_PARSER_MISC; 11293ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->checkIndex = 0; 11294ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if ((cur == '<') && (next == '!') && 11295ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (ctxt->input->cur[2] == 'D') && 11296ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (ctxt->input->cur[3] == 'O') && 11297ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (ctxt->input->cur[4] == 'C') && 11298ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (ctxt->input->cur[5] == 'T') && 11299ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (ctxt->input->cur[6] == 'Y') && 11300ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (ctxt->input->cur[7] == 'P') && 11301ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (ctxt->input->cur[8] == 'E')) { 11302ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((!terminate) && 11303ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (xmlParseLookupSequence(ctxt, '>', 0, 0) < 0)) 11304ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto done; 11305ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef DEBUG_PUSH 11306ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlGenericError(xmlGenericErrorContext, 11307ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "PP: Parsing internal subset\n"); 11308ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 11309ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->inSubset = 1; 11310ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParseDocTypeDecl(ctxt); 11311ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (RAW == '[') { 11312ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->instate = XML_PARSER_DTD; 11313ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef DEBUG_PUSH 11314ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlGenericError(xmlGenericErrorContext, 11315ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "PP: entering DTD\n"); 11316ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 11317ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 11318ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 11319ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Create and update the external subset. 11320ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 11321ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->inSubset = 2; 11322ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ctxt->sax != NULL) && (!ctxt->disableSAX) && 11323ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (ctxt->sax->externalSubset != NULL)) 11324ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->sax->externalSubset(ctxt->userData, 11325ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->intSubName, ctxt->extSubSystem, 11326ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->extSubURI); 11327ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->inSubset = 0; 11328ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlCleanSpecialAttr(ctxt); 11329ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->instate = XML_PARSER_PROLOG; 11330ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef DEBUG_PUSH 11331ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlGenericError(xmlGenericErrorContext, 11332ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "PP: entering PROLOG\n"); 11333ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 11334ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 11335ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if ((cur == '<') && (next == '!') && 11336ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (avail < 9)) { 11337ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto done; 11338ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 11339ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->instate = XML_PARSER_START_TAG; 11340ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->progressive = 1; 11341ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParseGetLasts(ctxt, &lastlt, &lastgt); 11342ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef DEBUG_PUSH 11343ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlGenericError(xmlGenericErrorContext, 11344ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "PP: entering START_TAG\n"); 11345ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 11346ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 11347ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 11348ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_PARSER_PROLOG: 11349ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SKIP_BLANKS; 11350ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt->input->buf == NULL) 11351ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project avail = ctxt->input->length - (ctxt->input->cur - ctxt->input->base); 11352ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else 11353ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project avail = ctxt->input->buf->buffer->use - (ctxt->input->cur - ctxt->input->base); 11354ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (avail < 2) 11355ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto done; 11356ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur = ctxt->input->cur[0]; 11357ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project next = ctxt->input->cur[1]; 11358ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((cur == '<') && (next == '?')) { 11359ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((!terminate) && 11360ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (xmlParseLookupSequence(ctxt, '?', '>', 0) < 0)) 11361ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto done; 11362ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef DEBUG_PUSH 11363ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlGenericError(xmlGenericErrorContext, 11364ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "PP: Parsing PI\n"); 11365ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 11366ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParsePI(ctxt); 11367ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if ((cur == '<') && (next == '!') && 11368ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (ctxt->input->cur[2] == '-') && (ctxt->input->cur[3] == '-')) { 11369ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((!terminate) && 11370ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (xmlParseLookupSequence(ctxt, '-', '-', '>') < 0)) 11371ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto done; 11372ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef DEBUG_PUSH 11373ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlGenericError(xmlGenericErrorContext, 11374ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "PP: Parsing Comment\n"); 11375ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 11376ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParseComment(ctxt); 11377ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->instate = XML_PARSER_PROLOG; 11378ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if ((cur == '<') && (next == '!') && 11379ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (avail < 4)) { 11380ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto done; 11381ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 11382ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->instate = XML_PARSER_START_TAG; 11383ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt->progressive == 0) 11384ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->progressive = 1; 11385ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParseGetLasts(ctxt, &lastlt, &lastgt); 11386ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef DEBUG_PUSH 11387ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlGenericError(xmlGenericErrorContext, 11388ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "PP: entering START_TAG\n"); 11389ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 11390ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 11391ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 11392ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_PARSER_EPILOG: 11393ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SKIP_BLANKS; 11394ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt->input->buf == NULL) 11395ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project avail = ctxt->input->length - (ctxt->input->cur - ctxt->input->base); 11396ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else 11397ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project avail = ctxt->input->buf->buffer->use - (ctxt->input->cur - ctxt->input->base); 11398ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (avail < 2) 11399ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto done; 11400ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur = ctxt->input->cur[0]; 11401ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project next = ctxt->input->cur[1]; 11402ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((cur == '<') && (next == '?')) { 11403ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((!terminate) && 11404ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (xmlParseLookupSequence(ctxt, '?', '>', 0) < 0)) 11405ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto done; 11406ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef DEBUG_PUSH 11407ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlGenericError(xmlGenericErrorContext, 11408ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "PP: Parsing PI\n"); 11409ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 11410ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParsePI(ctxt); 11411ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->instate = XML_PARSER_EPILOG; 11412ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if ((cur == '<') && (next == '!') && 11413ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (ctxt->input->cur[2] == '-') && (ctxt->input->cur[3] == '-')) { 11414ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((!terminate) && 11415ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (xmlParseLookupSequence(ctxt, '-', '-', '>') < 0)) 11416ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto done; 11417ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef DEBUG_PUSH 11418ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlGenericError(xmlGenericErrorContext, 11419ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "PP: Parsing Comment\n"); 11420ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 11421ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParseComment(ctxt); 11422ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->instate = XML_PARSER_EPILOG; 11423ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if ((cur == '<') && (next == '!') && 11424ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (avail < 4)) { 11425ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto done; 11426ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 11427ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErr(ctxt, XML_ERR_DOCUMENT_END, NULL); 11428ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->instate = XML_PARSER_EOF; 11429ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef DEBUG_PUSH 11430ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlGenericError(xmlGenericErrorContext, 11431ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "PP: entering EOF\n"); 11432ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 11433ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ctxt->sax) && (ctxt->sax->endDocument != NULL)) 11434ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->sax->endDocument(ctxt->userData); 11435ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto done; 11436ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 11437ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 11438ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_PARSER_DTD: { 11439ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 11440ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Sorry but progressive parsing of the internal subset 11441ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * is not expected to be supported. We first check that 11442ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * the full content of the internal subset is available and 11443ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * the parsing is launched only at that point. 11444ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Internal subset ends up with "']' S? '>'" in an unescaped 11445ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * section and not in a ']]>' sequence which are conditional 11446ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * sections (whoever argued to keep that crap in XML deserve 11447ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * a place in hell !). 11448ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 11449ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int base, i; 11450ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar *buf; 11451ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar quote = 0; 11452ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 11453ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project base = ctxt->input->cur - ctxt->input->base; 11454ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (base < 0) return(0); 11455ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt->checkIndex > base) 11456ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project base = ctxt->checkIndex; 11457ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project buf = ctxt->input->buf->buffer->content; 11458ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project for (;(unsigned int) base < ctxt->input->buf->buffer->use; 11459ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project base++) { 11460ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (quote != 0) { 11461ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (buf[base] == quote) 11462ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project quote = 0; 11463ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project continue; 11464ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 11465ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((quote == 0) && (buf[base] == '<')) { 11466ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int found = 0; 11467ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* special handling of comments */ 11468ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (((unsigned int) base + 4 < 11469ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->input->buf->buffer->use) && 11470ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (buf[base + 1] == '!') && 11471ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (buf[base + 2] == '-') && 11472ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (buf[base + 3] == '-')) { 11473ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project for (;(unsigned int) base + 3 < 11474ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->input->buf->buffer->use; base++) { 11475ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((buf[base] == '-') && 11476ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (buf[base + 1] == '-') && 11477ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (buf[base + 2] == '>')) { 11478ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project found = 1; 11479ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project base += 2; 11480ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 11481ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 11482ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 11483ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (!found) { 11484ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#if 0 11485ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project fprintf(stderr, "unfinished comment\n"); 11486ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 11487ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; /* for */ 11488ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 11489ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project continue; 11490ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 11491ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 11492ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (buf[base] == '"') { 11493ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project quote = '"'; 11494ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project continue; 11495ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 11496ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (buf[base] == '\'') { 11497ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project quote = '\''; 11498ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project continue; 11499ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 11500ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (buf[base] == ']') { 11501ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#if 0 11502ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project fprintf(stderr, "%c%c%c%c: ", buf[base], 11503ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project buf[base + 1], buf[base + 2], buf[base + 3]); 11504ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 11505ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((unsigned int) base +1 >= 11506ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->input->buf->buffer->use) 11507ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 11508ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (buf[base + 1] == ']') { 11509ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* conditional crap, skip both ']' ! */ 11510ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project base++; 11511ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project continue; 11512ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 11513ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project for (i = 1; 11514ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (unsigned int) base + i < ctxt->input->buf->buffer->use; 11515ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project i++) { 11516ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (buf[base + i] == '>') { 11517ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#if 0 11518ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project fprintf(stderr, "found\n"); 11519ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 11520ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto found_end_int_subset; 11521ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 11522ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (!IS_BLANK_CH(buf[base + i])) { 11523ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#if 0 11524ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project fprintf(stderr, "not found\n"); 11525ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 11526ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto not_end_of_int_subset; 11527ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 11528ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 11529ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#if 0 11530ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project fprintf(stderr, "end of stream\n"); 11531ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 11532ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 11533ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 11534ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 11535ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectnot_end_of_int_subset: 11536ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project continue; /* for */ 11537ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 11538ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 11539ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * We didn't found the end of the Internal subset 11540ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 11541ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef DEBUG_PUSH 11542ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (next == 0) 11543ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlGenericError(xmlGenericErrorContext, 11544ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "PP: lookup of int subset end filed\n"); 11545ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 11546ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto done; 11547ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 11548ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectfound_end_int_subset: 11549ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParseInternalSubset(ctxt); 11550ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->inSubset = 2; 11551ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ctxt->sax != NULL) && (!ctxt->disableSAX) && 11552ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (ctxt->sax->externalSubset != NULL)) 11553ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->sax->externalSubset(ctxt->userData, ctxt->intSubName, 11554ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->extSubSystem, ctxt->extSubURI); 11555ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->inSubset = 0; 11556ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlCleanSpecialAttr(ctxt); 11557ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->instate = XML_PARSER_PROLOG; 11558ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->checkIndex = 0; 11559ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef DEBUG_PUSH 11560ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlGenericError(xmlGenericErrorContext, 11561ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "PP: entering PROLOG\n"); 11562ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 11563ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 11564ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 11565ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_PARSER_COMMENT: 11566ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlGenericError(xmlGenericErrorContext, 11567ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "PP: internal error, state == COMMENT\n"); 11568ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->instate = XML_PARSER_CONTENT; 11569ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef DEBUG_PUSH 11570ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlGenericError(xmlGenericErrorContext, 11571ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "PP: entering CONTENT\n"); 11572ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 11573ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 11574ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_PARSER_IGNORE: 11575ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlGenericError(xmlGenericErrorContext, 11576ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "PP: internal error, state == IGNORE"); 11577ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->instate = XML_PARSER_DTD; 11578ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef DEBUG_PUSH 11579ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlGenericError(xmlGenericErrorContext, 11580ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "PP: entering DTD\n"); 11581ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 11582ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 11583ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_PARSER_PI: 11584ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlGenericError(xmlGenericErrorContext, 11585ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "PP: internal error, state == PI\n"); 11586ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->instate = XML_PARSER_CONTENT; 11587ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef DEBUG_PUSH 11588ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlGenericError(xmlGenericErrorContext, 11589ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "PP: entering CONTENT\n"); 11590ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 11591ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 11592ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_PARSER_ENTITY_DECL: 11593ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlGenericError(xmlGenericErrorContext, 11594ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "PP: internal error, state == ENTITY_DECL\n"); 11595ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->instate = XML_PARSER_DTD; 11596ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef DEBUG_PUSH 11597ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlGenericError(xmlGenericErrorContext, 11598ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "PP: entering DTD\n"); 11599ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 11600ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 11601ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_PARSER_ENTITY_VALUE: 11602ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlGenericError(xmlGenericErrorContext, 11603ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "PP: internal error, state == ENTITY_VALUE\n"); 11604ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->instate = XML_PARSER_CONTENT; 11605ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef DEBUG_PUSH 11606ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlGenericError(xmlGenericErrorContext, 11607ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "PP: entering DTD\n"); 11608ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 11609ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 11610ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_PARSER_ATTRIBUTE_VALUE: 11611ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlGenericError(xmlGenericErrorContext, 11612ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "PP: internal error, state == ATTRIBUTE_VALUE\n"); 11613ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->instate = XML_PARSER_START_TAG; 11614ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef DEBUG_PUSH 11615ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlGenericError(xmlGenericErrorContext, 11616ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "PP: entering START_TAG\n"); 11617ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 11618ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 11619ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_PARSER_SYSTEM_LITERAL: 11620ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlGenericError(xmlGenericErrorContext, 11621ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "PP: internal error, state == SYSTEM_LITERAL\n"); 11622ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->instate = XML_PARSER_START_TAG; 11623ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef DEBUG_PUSH 11624ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlGenericError(xmlGenericErrorContext, 11625ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "PP: entering START_TAG\n"); 11626ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 11627ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 11628ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_PARSER_PUBLIC_LITERAL: 11629ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlGenericError(xmlGenericErrorContext, 11630ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "PP: internal error, state == PUBLIC_LITERAL\n"); 11631ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->instate = XML_PARSER_START_TAG; 11632ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef DEBUG_PUSH 11633ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlGenericError(xmlGenericErrorContext, 11634ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "PP: entering START_TAG\n"); 11635ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 11636ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 11637ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 11638ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 11639ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectdone: 11640ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef DEBUG_PUSH 11641ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlGenericError(xmlGenericErrorContext, "PP: done %d\n", ret); 11642ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 11643ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(ret); 11644ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectencoding_error: 11645ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project { 11646ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project char buffer[150]; 11647ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 11648ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project snprintf(buffer, 149, "Bytes: 0x%02X 0x%02X 0x%02X 0x%02X\n", 11649ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->input->cur[0], ctxt->input->cur[1], 11650ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->input->cur[2], ctxt->input->cur[3]); 11651ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project __xmlErrEncoding(ctxt, XML_ERR_INVALID_CHAR, 11652ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "Input is not proper UTF-8, indicate encoding !\n%s", 11653ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project BAD_CAST buffer, NULL); 11654ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 11655ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(0); 11656ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 11657ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 11658ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 11659ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlParseChunk: 11660ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctxt: an XML parser context 11661ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @chunk: an char array 11662ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @size: the size in byte of the chunk 11663ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @terminate: last chunk indicator 11664ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 11665ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Parse a Chunk of memory 11666ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 11667ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns zero if no error, the xmlParserErrors otherwise. 11668ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 11669ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectint 11670ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlParseChunk(xmlParserCtxtPtr ctxt, const char *chunk, int size, 11671ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int terminate) { 11672ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int end_in_lf = 0; 11673df143a5041f03a22808b59c76698770b74692815Selim Gurun int remain = 0; 11674ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 11675ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt == NULL) 11676ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(XML_ERR_INTERNAL_ERROR); 11677ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ctxt->errNo != XML_ERR_OK) && (ctxt->disableSAX == 1)) 11678ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(ctxt->errNo); 11679ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt->instate == XML_PARSER_START) 11680ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlDetectSAX2(ctxt); 11681ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((size > 0) && (chunk != NULL) && (!terminate) && 11682ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (chunk[size - 1] == '\r')) { 11683ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project end_in_lf = 1; 11684ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project size--; 11685ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 11686df143a5041f03a22808b59c76698770b74692815Selim Gurun 11687df143a5041f03a22808b59c76698770b74692815Selim Gurunxmldecl_done: 11688df143a5041f03a22808b59c76698770b74692815Selim Gurun 11689ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((size > 0) && (chunk != NULL) && (ctxt->input != NULL) && 11690ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (ctxt->input->buf != NULL) && (ctxt->instate != XML_PARSER_EOF)) { 11691ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int base = ctxt->input->base - ctxt->input->buf->buffer->content; 11692ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int cur = ctxt->input->cur - ctxt->input->base; 11693ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int res; 11694df143a5041f03a22808b59c76698770b74692815Selim Gurun 11695df143a5041f03a22808b59c76698770b74692815Selim Gurun /* 11696df143a5041f03a22808b59c76698770b74692815Selim Gurun * Specific handling if we autodetected an encoding, we should not 11697df143a5041f03a22808b59c76698770b74692815Selim Gurun * push more than the first line ... which depend on the encoding 11698df143a5041f03a22808b59c76698770b74692815Selim Gurun * And only push the rest once the final encoding was detected 11699df143a5041f03a22808b59c76698770b74692815Selim Gurun */ 11700df143a5041f03a22808b59c76698770b74692815Selim Gurun if ((ctxt->instate == XML_PARSER_START) && (ctxt->input != NULL) && 11701df143a5041f03a22808b59c76698770b74692815Selim Gurun (ctxt->input->buf != NULL) && (ctxt->input->buf->encoder != NULL)) { 11702df143a5041f03a22808b59c76698770b74692815Selim Gurun unsigned int len = 45; 11703df143a5041f03a22808b59c76698770b74692815Selim Gurun 11704df143a5041f03a22808b59c76698770b74692815Selim Gurun if ((xmlStrcasestr(BAD_CAST ctxt->input->buf->encoder->name, 11705df143a5041f03a22808b59c76698770b74692815Selim Gurun BAD_CAST "UTF-16")) || 11706df143a5041f03a22808b59c76698770b74692815Selim Gurun (xmlStrcasestr(BAD_CAST ctxt->input->buf->encoder->name, 11707df143a5041f03a22808b59c76698770b74692815Selim Gurun BAD_CAST "UTF16"))) 11708df143a5041f03a22808b59c76698770b74692815Selim Gurun len = 90; 11709df143a5041f03a22808b59c76698770b74692815Selim Gurun else if ((xmlStrcasestr(BAD_CAST ctxt->input->buf->encoder->name, 11710df143a5041f03a22808b59c76698770b74692815Selim Gurun BAD_CAST "UCS-4")) || 11711df143a5041f03a22808b59c76698770b74692815Selim Gurun (xmlStrcasestr(BAD_CAST ctxt->input->buf->encoder->name, 11712df143a5041f03a22808b59c76698770b74692815Selim Gurun BAD_CAST "UCS4"))) 11713df143a5041f03a22808b59c76698770b74692815Selim Gurun len = 180; 11714df143a5041f03a22808b59c76698770b74692815Selim Gurun 11715df143a5041f03a22808b59c76698770b74692815Selim Gurun if (ctxt->input->buf->rawconsumed < len) 11716df143a5041f03a22808b59c76698770b74692815Selim Gurun len -= ctxt->input->buf->rawconsumed; 11717df143a5041f03a22808b59c76698770b74692815Selim Gurun 11718df143a5041f03a22808b59c76698770b74692815Selim Gurun /* 11719df143a5041f03a22808b59c76698770b74692815Selim Gurun * Change size for reading the initial declaration only 11720df143a5041f03a22808b59c76698770b74692815Selim Gurun * if size is greater than len. Otherwise, memmove in xmlBufferAdd 11721df143a5041f03a22808b59c76698770b74692815Selim Gurun * will blindly copy extra bytes from memory. 11722df143a5041f03a22808b59c76698770b74692815Selim Gurun */ 11723df143a5041f03a22808b59c76698770b74692815Selim Gurun if ((unsigned int) size > len) { 11724df143a5041f03a22808b59c76698770b74692815Selim Gurun remain = size - len; 11725df143a5041f03a22808b59c76698770b74692815Selim Gurun size = len; 11726df143a5041f03a22808b59c76698770b74692815Selim Gurun } else { 11727df143a5041f03a22808b59c76698770b74692815Selim Gurun remain = 0; 11728df143a5041f03a22808b59c76698770b74692815Selim Gurun } 11729df143a5041f03a22808b59c76698770b74692815Selim Gurun } 11730ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project res =xmlParserInputBufferPush(ctxt->input->buf, size, chunk); 11731ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (res < 0) { 11732ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->errNo = XML_PARSER_EOF; 11733ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->disableSAX = 1; 11734ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (XML_PARSER_EOF); 11735ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 11736ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->input->base = ctxt->input->buf->buffer->content + base; 11737ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->input->cur = ctxt->input->base + cur; 11738ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->input->end = 11739ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project &ctxt->input->buf->buffer->content[ctxt->input->buf->buffer->use]; 11740ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef DEBUG_PUSH 11741ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlGenericError(xmlGenericErrorContext, "PP: pushed %d\n", size); 11742ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 11743ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 11744ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if (ctxt->instate != XML_PARSER_EOF) { 11745ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ctxt->input != NULL) && ctxt->input->buf != NULL) { 11746ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParserInputBufferPtr in = ctxt->input->buf; 11747ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((in->encoder != NULL) && (in->buffer != NULL) && 11748ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (in->raw != NULL)) { 11749ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int nbchars; 11750df143a5041f03a22808b59c76698770b74692815Selim Gurun 11751ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project nbchars = xmlCharEncInFunc(in->encoder, in->buffer, in->raw); 11752ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (nbchars < 0) { 11753ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* TODO 2.6.0 */ 11754ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlGenericError(xmlGenericErrorContext, 11755ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "xmlParseChunk: encoder error\n"); 11756ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(XML_ERR_INVALID_ENCODING); 11757ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 11758ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 11759ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 11760ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 11761df143a5041f03a22808b59c76698770b74692815Selim Gurun if (remain != 0) 11762df143a5041f03a22808b59c76698770b74692815Selim Gurun xmlParseTryOrFinish(ctxt, 0); 11763df143a5041f03a22808b59c76698770b74692815Selim Gurun else 11764df143a5041f03a22808b59c76698770b74692815Selim Gurun xmlParseTryOrFinish(ctxt, terminate); 11765df143a5041f03a22808b59c76698770b74692815Selim Gurun if ((ctxt->errNo != XML_ERR_OK) && (ctxt->disableSAX == 1)) 11766df143a5041f03a22808b59c76698770b74692815Selim Gurun return(ctxt->errNo); 11767df143a5041f03a22808b59c76698770b74692815Selim Gurun 11768df143a5041f03a22808b59c76698770b74692815Selim Gurun if (remain != 0) { 11769df143a5041f03a22808b59c76698770b74692815Selim Gurun chunk += size; 11770df143a5041f03a22808b59c76698770b74692815Selim Gurun size = remain; 11771df143a5041f03a22808b59c76698770b74692815Selim Gurun remain = 0; 11772df143a5041f03a22808b59c76698770b74692815Selim Gurun goto xmldecl_done; 11773df143a5041f03a22808b59c76698770b74692815Selim Gurun } 11774ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((end_in_lf == 1) && (ctxt->input != NULL) && 11775ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (ctxt->input->buf != NULL)) { 11776ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParserInputBufferPush(ctxt->input->buf, 1, "\r"); 11777ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 11778ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (terminate) { 11779ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 11780ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Check for termination 11781ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 11782ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int avail = 0; 11783ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 11784ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt->input != NULL) { 11785ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt->input->buf == NULL) 11786ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project avail = ctxt->input->length - 11787ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (ctxt->input->cur - ctxt->input->base); 11788ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else 11789ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project avail = ctxt->input->buf->buffer->use - 11790ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (ctxt->input->cur - ctxt->input->base); 11791ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 11792ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 11793ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ctxt->instate != XML_PARSER_EOF) && 11794ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (ctxt->instate != XML_PARSER_EPILOG)) { 11795ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErr(ctxt, XML_ERR_DOCUMENT_END, NULL); 11796ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 11797ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ctxt->instate == XML_PARSER_EPILOG) && (avail > 0)) { 11798ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErr(ctxt, XML_ERR_DOCUMENT_END, NULL); 11799ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 11800ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt->instate != XML_PARSER_EOF) { 11801ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ctxt->sax) && (ctxt->sax->endDocument != NULL)) 11802ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->sax->endDocument(ctxt->userData); 11803ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 11804ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->instate = XML_PARSER_EOF; 11805ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 11806ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return((xmlParserErrors) ctxt->errNo); 11807ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 11808ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 11809ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/************************************************************************ 11810ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * * 11811ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * I/O front end functions to the parser * 11812ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * * 11813ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ************************************************************************/ 11814ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 11815ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 11816ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlCreatePushParserCtxt: 11817ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @sax: a SAX handler 11818ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @user_data: The user data returned on SAX callbacks 11819ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @chunk: a pointer to an array of chars 11820ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @size: number of chars in the array 11821ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @filename: an optional file name or URI 11822ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 11823ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Create a parser context for using the XML parser in push mode. 11824ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * If @buffer and @size are non-NULL, the data is used to detect 11825ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * the encoding. The remaining characters will be parsed so they 11826ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * don't need to be fed in again through xmlParseChunk. 11827ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * To allow content encoding detection, @size should be >= 4 11828ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * The value of @filename is used for fetching external entities 11829ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * and error/warning reports. 11830ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 11831ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the new parser context or NULL 11832ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 11833ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 11834ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlParserCtxtPtr 11835ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlCreatePushParserCtxt(xmlSAXHandlerPtr sax, void *user_data, 11836ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const char *chunk, int size, const char *filename) { 11837ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParserCtxtPtr ctxt; 11838ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParserInputPtr inputStream; 11839ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParserInputBufferPtr buf; 11840ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlCharEncoding enc = XML_CHAR_ENCODING_NONE; 11841ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 11842ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 11843ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * plug some encoding conversion routines 11844ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 11845ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((chunk != NULL) && (size >= 4)) 11846ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project enc = xmlDetectCharEncoding((const xmlChar *) chunk, size); 11847ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 11848ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project buf = xmlAllocParserInputBuffer(enc); 11849ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (buf == NULL) return(NULL); 11850ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 11851ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt = xmlNewParserCtxt(); 11852ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt == NULL) { 11853ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlErrMemory(NULL, "creating parser: out of memory\n"); 11854ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFreeParserInputBuffer(buf); 11855ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 11856ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 11857ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->dictNames = 1; 11858ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->pushTab = (void **) xmlMalloc(ctxt->nameMax * 3 * sizeof(xmlChar *)); 11859ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt->pushTab == NULL) { 11860ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlErrMemory(ctxt, NULL); 11861ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFreeParserInputBuffer(buf); 11862ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFreeParserCtxt(ctxt); 11863ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 11864ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 11865ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (sax != NULL) { 11866ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_SAX1_ENABLED 11867ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt->sax != (xmlSAXHandlerPtr) &xmlDefaultSAXHandler) 11868ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif /* LIBXML_SAX1_ENABLED */ 11869ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree(ctxt->sax); 11870ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->sax = (xmlSAXHandlerPtr) xmlMalloc(sizeof(xmlSAXHandler)); 11871ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt->sax == NULL) { 11872ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlErrMemory(ctxt, NULL); 11873ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFreeParserInputBuffer(buf); 11874ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFreeParserCtxt(ctxt); 11875ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 11876ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 11877ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project memset(ctxt->sax, 0, sizeof(xmlSAXHandler)); 11878ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (sax->initialized == XML_SAX2_MAGIC) 11879ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project memcpy(ctxt->sax, sax, sizeof(xmlSAXHandler)); 11880ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else 11881ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project memcpy(ctxt->sax, sax, sizeof(xmlSAXHandlerV1)); 11882ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (user_data != NULL) 11883ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->userData = user_data; 11884ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 11885ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (filename == NULL) { 11886ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->directory = NULL; 11887ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 11888ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->directory = xmlParserGetDirectory(filename); 11889ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 11890ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 11891ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project inputStream = xmlNewInputStream(ctxt); 11892ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (inputStream == NULL) { 11893ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFreeParserCtxt(ctxt); 11894ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFreeParserInputBuffer(buf); 11895ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 11896ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 11897ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 11898ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (filename == NULL) 11899ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project inputStream->filename = NULL; 11900ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else { 11901ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project inputStream->filename = (char *) 11902ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlCanonicPath((const xmlChar *) filename); 11903ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (inputStream->filename == NULL) { 11904ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFreeParserCtxt(ctxt); 11905ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFreeParserInputBuffer(buf); 11906ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 11907ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 11908ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 11909ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project inputStream->buf = buf; 11910ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project inputStream->base = inputStream->buf->buffer->content; 11911ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project inputStream->cur = inputStream->buf->buffer->content; 11912ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project inputStream->end = 11913ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project &inputStream->buf->buffer->content[inputStream->buf->buffer->use]; 11914ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 11915ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project inputPush(ctxt, inputStream); 11916ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 11917ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 11918ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * If the caller didn't provide an initial 'chunk' for determining 11919ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * the encoding, we set the context to XML_CHAR_ENCODING_NONE so 11920ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * that it can be automatically determined later 11921ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 11922ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((size == 0) || (chunk == NULL)) { 11923ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->charset = XML_CHAR_ENCODING_NONE; 11924ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if ((ctxt->input != NULL) && (ctxt->input->buf != NULL)) { 11925ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int base = ctxt->input->base - ctxt->input->buf->buffer->content; 11926ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int cur = ctxt->input->cur - ctxt->input->base; 11927ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 11928ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParserInputBufferPush(ctxt->input->buf, size, chunk); 11929ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 11930ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->input->base = ctxt->input->buf->buffer->content + base; 11931ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->input->cur = ctxt->input->base + cur; 11932ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->input->end = 11933ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project &ctxt->input->buf->buffer->content[ctxt->input->buf->buffer->use]; 11934ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef DEBUG_PUSH 11935ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlGenericError(xmlGenericErrorContext, "PP: pushed %d\n", size); 11936ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 11937ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 11938ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 11939ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (enc != XML_CHAR_ENCODING_NONE) { 11940ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSwitchEncoding(ctxt, enc); 11941ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 11942ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 11943ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(ctxt); 11944ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 11945ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif /* LIBXML_PUSH_ENABLED */ 11946ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 11947ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 11948ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlStopParser: 11949ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctxt: an XML parser context 11950ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 11951ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Blocks further parser processing 11952ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 11953ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectvoid 11954ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlStopParser(xmlParserCtxtPtr ctxt) { 11955ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt == NULL) 11956ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return; 11957ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->instate = XML_PARSER_EOF; 11958ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->disableSAX = 1; 11959ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt->input != NULL) { 11960ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->input->cur = BAD_CAST""; 11961ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->input->base = ctxt->input->cur; 11962ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 11963ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 11964ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 11965ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 11966ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlCreateIOParserCtxt: 11967ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @sax: a SAX handler 11968ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @user_data: The user data returned on SAX callbacks 11969ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ioread: an I/O read function 11970ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ioclose: an I/O close function 11971ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ioctx: an I/O handler 11972ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @enc: the charset encoding if known 11973ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 11974ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Create a parser context for using the XML parser with an existing 11975ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * I/O stream 11976ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 11977ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the new parser context or NULL 11978ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 11979ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlParserCtxtPtr 11980ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlCreateIOParserCtxt(xmlSAXHandlerPtr sax, void *user_data, 11981ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlInputReadCallback ioread, xmlInputCloseCallback ioclose, 11982ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project void *ioctx, xmlCharEncoding enc) { 11983ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParserCtxtPtr ctxt; 11984ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParserInputPtr inputStream; 11985ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParserInputBufferPtr buf; 11986ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 11987ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ioread == NULL) return(NULL); 11988ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 11989ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project buf = xmlParserInputBufferCreateIO(ioread, ioclose, ioctx, enc); 11990ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (buf == NULL) return(NULL); 11991ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 11992ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt = xmlNewParserCtxt(); 11993ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt == NULL) { 11994ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFreeParserInputBuffer(buf); 11995ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 11996ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 11997ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (sax != NULL) { 11998ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_SAX1_ENABLED 11999ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt->sax != (xmlSAXHandlerPtr) &xmlDefaultSAXHandler) 12000ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif /* LIBXML_SAX1_ENABLED */ 12001ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree(ctxt->sax); 12002ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->sax = (xmlSAXHandlerPtr) xmlMalloc(sizeof(xmlSAXHandler)); 12003ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt->sax == NULL) { 12004ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlErrMemory(ctxt, NULL); 12005ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFreeParserCtxt(ctxt); 12006ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 12007ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 12008ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project memset(ctxt->sax, 0, sizeof(xmlSAXHandler)); 12009ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (sax->initialized == XML_SAX2_MAGIC) 12010ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project memcpy(ctxt->sax, sax, sizeof(xmlSAXHandler)); 12011ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else 12012ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project memcpy(ctxt->sax, sax, sizeof(xmlSAXHandlerV1)); 12013ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (user_data != NULL) 12014ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->userData = user_data; 12015ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 12016ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 12017ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project inputStream = xmlNewIOInputStream(ctxt, buf, enc); 12018ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (inputStream == NULL) { 12019ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFreeParserCtxt(ctxt); 12020ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 12021ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 12022ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project inputPush(ctxt, inputStream); 12023ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 12024ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(ctxt); 12025ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 12026ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 12027ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_VALID_ENABLED 12028ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/************************************************************************ 12029ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * * 12030ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Front ends when parsing a DTD * 12031ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * * 12032ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ************************************************************************/ 12033ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 12034ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 12035ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlIOParseDTD: 12036ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @sax: the SAX handler block or NULL 12037ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @input: an Input Buffer 12038ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @enc: the charset encoding if known 12039ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 12040ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Load and parse a DTD 12041ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 12042ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the resulting xmlDtdPtr or NULL in case of error. 12043ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @input will be freed by the function in any case. 12044ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 12045ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 12046ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlDtdPtr 12047ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlIOParseDTD(xmlSAXHandlerPtr sax, xmlParserInputBufferPtr input, 12048ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlCharEncoding enc) { 12049ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlDtdPtr ret = NULL; 12050ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParserCtxtPtr ctxt; 12051ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParserInputPtr pinput = NULL; 12052ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar start[4]; 12053ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 12054ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (input == NULL) 12055ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 12056ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 12057ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt = xmlNewParserCtxt(); 12058ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt == NULL) { 12059ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFreeParserInputBuffer(input); 12060ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 12061ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 12062ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 12063ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 12064ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Set-up the SAX context 12065ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 12066ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (sax != NULL) { 12067ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt->sax != NULL) 12068ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree(ctxt->sax); 12069ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->sax = sax; 12070ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->userData = ctxt; 12071ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 12072ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlDetectSAX2(ctxt); 12073ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 12074ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 12075ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * generate a parser input from the I/O handler 12076ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 12077ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 12078ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project pinput = xmlNewIOInputStream(ctxt, input, XML_CHAR_ENCODING_NONE); 12079ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (pinput == NULL) { 12080ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (sax != NULL) ctxt->sax = NULL; 12081ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFreeParserInputBuffer(input); 12082ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFreeParserCtxt(ctxt); 12083ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 12084ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 12085ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 12086ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 12087ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * plug some encoding conversion routines here. 12088ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 1208960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (xmlPushInput(ctxt, pinput) < 0) { 1209060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (sax != NULL) ctxt->sax = NULL; 1209160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott xmlFreeParserCtxt(ctxt); 1209260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott return(NULL); 1209360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } 12094ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (enc != XML_CHAR_ENCODING_NONE) { 12095ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSwitchEncoding(ctxt, enc); 12096ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 12097ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 12098ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project pinput->filename = NULL; 12099ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project pinput->line = 1; 12100ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project pinput->col = 1; 12101ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project pinput->base = ctxt->input->cur; 12102ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project pinput->cur = ctxt->input->cur; 12103ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project pinput->free = NULL; 12104ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 12105ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 12106ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * let's parse that entity knowing it's an external subset. 12107ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 12108ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->inSubset = 2; 12109ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->myDoc = xmlNewDoc(BAD_CAST "1.0"); 1211060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (ctxt->myDoc == NULL) { 1211160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott xmlErrMemory(ctxt, "New Doc failed"); 1211260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott return(NULL); 1211360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } 1211460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ctxt->myDoc->properties = XML_DOC_INTERNAL; 12115ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->myDoc->extSubset = xmlNewDtd(ctxt->myDoc, BAD_CAST "none", 12116ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project BAD_CAST "none", BAD_CAST "none"); 12117ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 12118ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((enc == XML_CHAR_ENCODING_NONE) && 12119ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ((ctxt->input->end - ctxt->input->cur) >= 4)) { 12120ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 12121ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Get the 4 first bytes and decode the charset 12122ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * if enc != XML_CHAR_ENCODING_NONE 12123ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * plug some encoding conversion routines. 12124ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 12125ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project start[0] = RAW; 12126ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project start[1] = NXT(1); 12127ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project start[2] = NXT(2); 12128ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project start[3] = NXT(3); 12129ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project enc = xmlDetectCharEncoding(start, 4); 12130ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (enc != XML_CHAR_ENCODING_NONE) { 12131ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSwitchEncoding(ctxt, enc); 12132ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 12133ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 12134ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 12135ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParseExternalSubset(ctxt, BAD_CAST "none", BAD_CAST "none"); 12136ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 12137ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt->myDoc != NULL) { 12138ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt->wellFormed) { 12139ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = ctxt->myDoc->extSubset; 12140ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->myDoc->extSubset = NULL; 12141ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ret != NULL) { 12142ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlNodePtr tmp; 12143ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 12144ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret->doc = NULL; 12145ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project tmp = ret->children; 12146ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while (tmp != NULL) { 12147ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project tmp->doc = NULL; 12148ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project tmp = tmp->next; 12149ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 12150ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 12151ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 12152ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = NULL; 12153ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 12154ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFreeDoc(ctxt->myDoc); 12155ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->myDoc = NULL; 12156ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 12157ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (sax != NULL) ctxt->sax = NULL; 12158ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFreeParserCtxt(ctxt); 12159ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 12160ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(ret); 12161ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 12162ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 12163ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 12164ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlSAXParseDTD: 12165ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @sax: the SAX handler block 12166ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ExternalID: a NAME* containing the External ID of the DTD 12167ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @SystemID: a NAME* containing the URL to the DTD 12168ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 12169ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Load and parse an external subset. 12170ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 12171ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the resulting xmlDtdPtr or NULL in case of error. 12172ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 12173ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 12174ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlDtdPtr 12175ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlSAXParseDTD(xmlSAXHandlerPtr sax, const xmlChar *ExternalID, 12176ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar *SystemID) { 12177ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlDtdPtr ret = NULL; 12178ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParserCtxtPtr ctxt; 12179ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParserInputPtr input = NULL; 12180ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlCharEncoding enc; 12181ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar* systemIdCanonic; 12182ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 12183ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ExternalID == NULL) && (SystemID == NULL)) return(NULL); 12184ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 12185ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt = xmlNewParserCtxt(); 12186ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt == NULL) { 12187ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 12188ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 12189ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 12190ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 12191ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Set-up the SAX context 12192ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 12193ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (sax != NULL) { 12194ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt->sax != NULL) 12195ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree(ctxt->sax); 12196ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->sax = sax; 12197ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->userData = ctxt; 12198ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 12199ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 12200ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 12201ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Canonicalise the system ID 12202ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 12203ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project systemIdCanonic = xmlCanonicPath(SystemID); 12204ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((SystemID != NULL) && (systemIdCanonic == NULL)) { 12205ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFreeParserCtxt(ctxt); 12206ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 12207ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 12208ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 12209ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 12210ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Ask the Entity resolver to load the damn thing 12211ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 12212ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 12213ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ctxt->sax != NULL) && (ctxt->sax->resolveEntity != NULL)) 12214ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project input = ctxt->sax->resolveEntity(ctxt->userData, ExternalID, 12215ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project systemIdCanonic); 12216ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (input == NULL) { 12217ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (sax != NULL) ctxt->sax = NULL; 12218ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFreeParserCtxt(ctxt); 12219ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (systemIdCanonic != NULL) 12220ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree(systemIdCanonic); 12221ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 12222ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 12223ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 12224ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 12225ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * plug some encoding conversion routines here. 12226ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 1222760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (xmlPushInput(ctxt, input) < 0) { 1222860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (sax != NULL) ctxt->sax = NULL; 1222960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott xmlFreeParserCtxt(ctxt); 1223060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (systemIdCanonic != NULL) 1223160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott xmlFree(systemIdCanonic); 1223260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott return(NULL); 1223360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } 12234ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ctxt->input->end - ctxt->input->cur) >= 4) { 12235ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project enc = xmlDetectCharEncoding(ctxt->input->cur, 4); 12236ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSwitchEncoding(ctxt, enc); 12237ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 12238ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 12239ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (input->filename == NULL) 12240ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project input->filename = (char *) systemIdCanonic; 12241ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else 12242ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree(systemIdCanonic); 12243ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project input->line = 1; 12244ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project input->col = 1; 12245ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project input->base = ctxt->input->cur; 12246ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project input->cur = ctxt->input->cur; 12247ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project input->free = NULL; 12248ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 12249ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 12250ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * let's parse that entity knowing it's an external subset. 12251ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 12252ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->inSubset = 2; 12253ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->myDoc = xmlNewDoc(BAD_CAST "1.0"); 1225460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (ctxt->myDoc == NULL) { 1225560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott xmlErrMemory(ctxt, "New Doc failed"); 1225660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (sax != NULL) ctxt->sax = NULL; 1225760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott xmlFreeParserCtxt(ctxt); 1225860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott return(NULL); 1225960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } 1226060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ctxt->myDoc->properties = XML_DOC_INTERNAL; 12261ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->myDoc->extSubset = xmlNewDtd(ctxt->myDoc, BAD_CAST "none", 12262ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ExternalID, SystemID); 12263ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParseExternalSubset(ctxt, ExternalID, SystemID); 12264ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 12265ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt->myDoc != NULL) { 12266ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt->wellFormed) { 12267ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = ctxt->myDoc->extSubset; 12268ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->myDoc->extSubset = NULL; 12269ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ret != NULL) { 12270ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlNodePtr tmp; 12271ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 12272ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret->doc = NULL; 12273ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project tmp = ret->children; 12274ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while (tmp != NULL) { 12275ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project tmp->doc = NULL; 12276ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project tmp = tmp->next; 12277ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 12278ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 12279ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 12280ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = NULL; 12281ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 12282ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFreeDoc(ctxt->myDoc); 12283ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->myDoc = NULL; 12284ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 12285ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (sax != NULL) ctxt->sax = NULL; 12286ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFreeParserCtxt(ctxt); 1228760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott 12288ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(ret); 12289ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 12290ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 12291ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 12292ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 12293ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlParseDTD: 12294ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ExternalID: a NAME* containing the External ID of the DTD 12295ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @SystemID: a NAME* containing the URL to the DTD 12296ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 12297ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Load and parse an external subset. 1229860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * 12299ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the resulting xmlDtdPtr or NULL in case of error. 12300ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 12301ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 12302ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlDtdPtr 12303ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlParseDTD(const xmlChar *ExternalID, const xmlChar *SystemID) { 12304ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(xmlSAXParseDTD(NULL, ExternalID, SystemID)); 12305ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 12306ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif /* LIBXML_VALID_ENABLED */ 12307ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 12308ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/************************************************************************ 12309ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * * 12310ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Front ends when parsing an Entity * 12311ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * * 12312ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ************************************************************************/ 12313ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 12314ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 12315ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlParseCtxtExternalEntity: 12316ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctx: the existing parsing context 12317ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @URL: the URL for the entity to load 12318ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ID: the System ID for the entity to load 12319ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @lst: the return value for the set of parsed nodes 12320ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 12321ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Parse an external general entity within an existing parsing context 12322ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * An external general parsed entity is well-formed if it matches the 12323ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * production labeled extParsedEnt. 12324ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 12325ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [78] extParsedEnt ::= TextDecl? content 12326ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 12327ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns 0 if the entity is well formed, -1 in case of args problem and 12328ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * the parser error code otherwise 12329ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 12330ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 12331ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectint 12332ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlParseCtxtExternalEntity(xmlParserCtxtPtr ctx, const xmlChar *URL, 12333ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar *ID, xmlNodePtr *lst) { 12334ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParserCtxtPtr ctxt; 12335ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlDocPtr newDoc; 12336ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlNodePtr newRoot; 12337ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSAXHandlerPtr oldsax = NULL; 12338ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int ret = 0; 12339ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar start[4]; 12340ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlCharEncoding enc; 12341ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 12342ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctx == NULL) return(-1); 12343ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1234460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (((ctx->depth > 40) && ((ctx->options & XML_PARSE_HUGE) == 0)) || 1234560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott (ctx->depth > 1024)) { 12346ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(XML_ERR_ENTITY_LOOP); 12347ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 12348ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 12349ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (lst != NULL) 12350ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *lst = NULL; 12351ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((URL == NULL) && (ID == NULL)) 12352ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(-1); 12353ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctx->myDoc == NULL) /* @@ relax but check for dereferences */ 12354ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(-1); 12355ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 12356df143a5041f03a22808b59c76698770b74692815Selim Gurun ctxt = xmlCreateEntityParserCtxtInternal(URL, ID, NULL, ctx); 12357ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt == NULL) { 12358ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(-1); 12359ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1236060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott 12361ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project oldsax = ctxt->sax; 12362ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->sax = ctx->sax; 12363ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlDetectSAX2(ctxt); 12364ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project newDoc = xmlNewDoc(BAD_CAST "1.0"); 12365ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (newDoc == NULL) { 12366ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFreeParserCtxt(ctxt); 12367ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(-1); 12368ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1236960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott newDoc->properties = XML_DOC_INTERNAL; 12370ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctx->myDoc->dict) { 12371ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project newDoc->dict = ctx->myDoc->dict; 12372ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlDictReference(newDoc->dict); 12373ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 12374ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctx->myDoc != NULL) { 12375ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project newDoc->intSubset = ctx->myDoc->intSubset; 12376ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project newDoc->extSubset = ctx->myDoc->extSubset; 12377ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 12378ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctx->myDoc->URL != NULL) { 12379ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project newDoc->URL = xmlStrdup(ctx->myDoc->URL); 12380ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 12381ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project newRoot = xmlNewDocNode(newDoc, NULL, BAD_CAST "pseudoroot", NULL); 12382ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (newRoot == NULL) { 12383ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->sax = oldsax; 12384ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFreeParserCtxt(ctxt); 12385ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project newDoc->intSubset = NULL; 12386ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project newDoc->extSubset = NULL; 12387ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFreeDoc(newDoc); 12388ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(-1); 12389ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 12390ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlAddChild((xmlNodePtr) newDoc, newRoot); 12391ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project nodePush(ctxt, newDoc->children); 12392ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctx->myDoc == NULL) { 12393ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->myDoc = newDoc; 12394ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 12395ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->myDoc = ctx->myDoc; 12396ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project newDoc->children->doc = ctx->myDoc; 12397ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 12398ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1239960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott /* 12400ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Get the 4 first bytes and decode the charset 12401ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * if enc != XML_CHAR_ENCODING_NONE 12402ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * plug some encoding conversion routines. 12403ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 12404ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project GROW 12405ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ctxt->input->end - ctxt->input->cur) >= 4) { 12406ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project start[0] = RAW; 12407ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project start[1] = NXT(1); 12408ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project start[2] = NXT(2); 12409ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project start[3] = NXT(3); 12410ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project enc = xmlDetectCharEncoding(start, 4); 12411ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (enc != XML_CHAR_ENCODING_NONE) { 12412ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSwitchEncoding(ctxt, enc); 12413ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 12414ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 12415ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 12416ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 12417ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Parse a possible text declaration first 12418ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 12419ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((CMP5(CUR_PTR, '<', '?', 'x', 'm', 'l')) && (IS_BLANK_CH(NXT(5)))) { 12420ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParseTextDecl(ctxt); 1242160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott /* 1242260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * An XML-1.0 document can't reference an entity not XML-1.0 1242360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott */ 1242460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if ((xmlStrEqual(ctx->version, BAD_CAST "1.0")) && 1242560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott (!xmlStrEqual(ctxt->input->version, BAD_CAST "1.0"))) { 1242660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott xmlFatalErrMsg(ctxt, XML_ERR_VERSION_MISMATCH, 1242760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott "Version mismatch between document and entity\n"); 1242860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } 12429ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 12430ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 12431ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 12432ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Doing validity checking on chunk doesn't make sense 12433ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 12434ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->instate = XML_PARSER_CONTENT; 12435ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->validate = ctx->validate; 12436ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->valid = ctx->valid; 12437ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->loadsubset = ctx->loadsubset; 12438ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->depth = ctx->depth + 1; 12439ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->replaceEntities = ctx->replaceEntities; 12440ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt->validate) { 12441ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->vctxt.error = ctx->vctxt.error; 12442ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->vctxt.warning = ctx->vctxt.warning; 12443ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 12444ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->vctxt.error = NULL; 12445ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->vctxt.warning = NULL; 12446ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 12447ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->vctxt.nodeTab = NULL; 12448ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->vctxt.nodeNr = 0; 12449ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->vctxt.nodeMax = 0; 12450ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->vctxt.node = NULL; 12451ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt->dict != NULL) xmlDictFree(ctxt->dict); 12452ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->dict = ctx->dict; 12453ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->str_xml = xmlDictLookup(ctxt->dict, BAD_CAST "xml", 3); 12454ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->str_xmlns = xmlDictLookup(ctxt->dict, BAD_CAST "xmlns", 5); 12455ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->str_xml_ns = xmlDictLookup(ctxt->dict, XML_XML_NAMESPACE, 36); 12456ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->dictNames = ctx->dictNames; 12457ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->attsDefault = ctx->attsDefault; 12458ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->attsSpecial = ctx->attsSpecial; 12459ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->linenumbers = ctx->linenumbers; 12460ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 12461ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParseContent(ctxt); 1246260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott 12463ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctx->validate = ctxt->validate; 12464ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctx->valid = ctxt->valid; 12465ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((RAW == '<') && (NXT(1) == '/')) { 12466ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErr(ctxt, XML_ERR_NOT_WELL_BALANCED, NULL); 12467ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if (RAW != 0) { 12468ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErr(ctxt, XML_ERR_EXTRA_CONTENT, NULL); 12469ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 12470ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt->node != newDoc->children) { 12471ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErr(ctxt, XML_ERR_NOT_WELL_BALANCED, NULL); 12472ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 12473ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 12474ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (!ctxt->wellFormed) { 12475ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt->errNo == 0) 12476ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = 1; 12477ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else 12478ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = ctxt->errNo; 12479ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 12480ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (lst != NULL) { 12481ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlNodePtr cur; 12482ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 12483ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 12484ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Return the newly created nodeset after unlinking it from 12485ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * they pseudo parent. 12486ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 12487ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur = newDoc->children->children; 12488ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *lst = cur; 12489ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while (cur != NULL) { 12490ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur->parent = NULL; 12491ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur = cur->next; 12492ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 12493ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project newDoc->children->children = NULL; 12494ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 12495ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = 0; 12496ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 12497ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->sax = oldsax; 12498ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->dict = NULL; 12499ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->attsDefault = NULL; 12500ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->attsSpecial = NULL; 12501ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFreeParserCtxt(ctxt); 12502ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project newDoc->intSubset = NULL; 12503ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project newDoc->extSubset = NULL; 12504ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFreeDoc(newDoc); 1250560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott 12506ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(ret); 12507ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 12508ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 12509ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 12510ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlParseExternalEntityPrivate: 12511ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @doc: the document the chunk pertains to 12512ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @oldctxt: the previous parser context if available 12513ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @sax: the SAX handler bloc (possibly NULL) 12514ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @user_data: The user data returned on SAX callbacks (possibly NULL) 12515ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @depth: Used for loop detection, use 0 12516ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @URL: the URL for the entity to load 12517ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ID: the System ID for the entity to load 12518ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @list: the return value for the set of parsed nodes 12519ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 12520ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Private version of xmlParseExternalEntity() 12521ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 12522ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns 0 if the entity is well formed, -1 in case of args problem and 12523ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * the parser error code otherwise 12524ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 12525ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 12526ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic xmlParserErrors 12527ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlParseExternalEntityPrivate(xmlDocPtr doc, xmlParserCtxtPtr oldctxt, 12528ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSAXHandlerPtr sax, 12529ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project void *user_data, int depth, const xmlChar *URL, 12530ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar *ID, xmlNodePtr *list) { 12531ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParserCtxtPtr ctxt; 12532ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlDocPtr newDoc; 12533ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlNodePtr newRoot; 12534ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSAXHandlerPtr oldsax = NULL; 12535ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParserErrors ret = XML_ERR_OK; 12536ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar start[4]; 12537ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlCharEncoding enc; 12538ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1253960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (((depth > 40) && 1254060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ((oldctxt == NULL) || (oldctxt->options & XML_PARSE_HUGE) == 0)) || 1254160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott (depth > 1024)) { 12542ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(XML_ERR_ENTITY_LOOP); 12543ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 12544ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 12545ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (list != NULL) 12546ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *list = NULL; 12547ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((URL == NULL) && (ID == NULL)) 12548ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(XML_ERR_INTERNAL_ERROR); 12549ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (doc == NULL) 12550ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(XML_ERR_INTERNAL_ERROR); 12551ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 12552ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 12553df143a5041f03a22808b59c76698770b74692815Selim Gurun ctxt = xmlCreateEntityParserCtxtInternal(URL, ID, NULL, oldctxt); 12554ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt == NULL) return(XML_WAR_UNDECLARED_ENTITY); 12555ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->userData = ctxt; 12556ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (oldctxt != NULL) { 12557ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->_private = oldctxt->_private; 12558ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->loadsubset = oldctxt->loadsubset; 12559ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->validate = oldctxt->validate; 12560ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->external = oldctxt->external; 12561ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->record_info = oldctxt->record_info; 12562ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->node_seq.maximum = oldctxt->node_seq.maximum; 12563ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->node_seq.length = oldctxt->node_seq.length; 12564ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->node_seq.buffer = oldctxt->node_seq.buffer; 12565ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 12566ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 12567ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Doing validity checking on chunk without context 12568ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * doesn't make sense 12569ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 12570ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->_private = NULL; 12571ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->validate = 0; 12572ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->external = 2; 12573ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->loadsubset = 0; 12574ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 12575ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (sax != NULL) { 12576ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project oldsax = ctxt->sax; 12577ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->sax = sax; 12578ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (user_data != NULL) 12579ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->userData = user_data; 12580ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 12581ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlDetectSAX2(ctxt); 12582ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project newDoc = xmlNewDoc(BAD_CAST "1.0"); 12583ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (newDoc == NULL) { 12584ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->node_seq.maximum = 0; 12585ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->node_seq.length = 0; 12586ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->node_seq.buffer = NULL; 12587ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFreeParserCtxt(ctxt); 12588ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(XML_ERR_INTERNAL_ERROR); 12589ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1259060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott newDoc->properties = XML_DOC_INTERNAL; 12591ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project newDoc->intSubset = doc->intSubset; 12592ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project newDoc->extSubset = doc->extSubset; 12593ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project newDoc->dict = doc->dict; 12594ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlDictReference(newDoc->dict); 12595ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 12596ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (doc->URL != NULL) { 12597ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project newDoc->URL = xmlStrdup(doc->URL); 12598ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 12599ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project newRoot = xmlNewDocNode(newDoc, NULL, BAD_CAST "pseudoroot", NULL); 12600ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (newRoot == NULL) { 12601ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (sax != NULL) 12602ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->sax = oldsax; 12603ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->node_seq.maximum = 0; 12604ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->node_seq.length = 0; 12605ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->node_seq.buffer = NULL; 12606ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFreeParserCtxt(ctxt); 12607ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project newDoc->intSubset = NULL; 12608ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project newDoc->extSubset = NULL; 12609ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFreeDoc(newDoc); 12610ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(XML_ERR_INTERNAL_ERROR); 12611ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 12612ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlAddChild((xmlNodePtr) newDoc, newRoot); 12613ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project nodePush(ctxt, newDoc->children); 12614ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->myDoc = doc; 12615ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project newRoot->doc = doc; 12616ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1261760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott /* 12618ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Get the 4 first bytes and decode the charset 12619ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * if enc != XML_CHAR_ENCODING_NONE 12620ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * plug some encoding conversion routines. 12621ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 12622ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project GROW; 12623ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ctxt->input->end - ctxt->input->cur) >= 4) { 12624ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project start[0] = RAW; 12625ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project start[1] = NXT(1); 12626ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project start[2] = NXT(2); 12627ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project start[3] = NXT(3); 12628ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project enc = xmlDetectCharEncoding(start, 4); 12629ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (enc != XML_CHAR_ENCODING_NONE) { 12630ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSwitchEncoding(ctxt, enc); 12631ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 12632ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 12633ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 12634ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 12635ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Parse a possible text declaration first 12636ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 12637ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((CMP5(CUR_PTR, '<', '?', 'x', 'm', 'l')) && (IS_BLANK_CH(NXT(5)))) { 12638ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParseTextDecl(ctxt); 12639ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 12640ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 12641ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->instate = XML_PARSER_CONTENT; 12642ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->depth = depth; 12643ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 12644ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParseContent(ctxt); 1264560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott 12646ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((RAW == '<') && (NXT(1) == '/')) { 12647ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErr(ctxt, XML_ERR_NOT_WELL_BALANCED, NULL); 12648ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if (RAW != 0) { 12649ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErr(ctxt, XML_ERR_EXTRA_CONTENT, NULL); 12650ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 12651ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt->node != newDoc->children) { 12652ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErr(ctxt, XML_ERR_NOT_WELL_BALANCED, NULL); 12653ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 12654ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 12655ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (!ctxt->wellFormed) { 12656ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt->errNo == 0) 12657ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = XML_ERR_INTERNAL_ERROR; 12658ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else 12659ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = (xmlParserErrors)ctxt->errNo; 12660ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 12661ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (list != NULL) { 12662ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlNodePtr cur; 12663ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 12664ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 12665ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Return the newly created nodeset after unlinking it from 12666ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * they pseudo parent. 12667ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 12668ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur = newDoc->children->children; 12669ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *list = cur; 12670ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while (cur != NULL) { 12671ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur->parent = NULL; 12672ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur = cur->next; 12673ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 12674ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project newDoc->children->children = NULL; 12675ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 12676ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = XML_ERR_OK; 12677ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1267860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott 1267960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott /* 1268060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * Record in the parent context the number of entities replacement 1268160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * done when parsing that reference. 1268260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott */ 12683df143a5041f03a22808b59c76698770b74692815Selim Gurun if (oldctxt != NULL) 12684df143a5041f03a22808b59c76698770b74692815Selim Gurun oldctxt->nbentities += ctxt->nbentities; 12685df143a5041f03a22808b59c76698770b74692815Selim Gurun 1268660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott /* 1268760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * Also record the size of the entity parsed 1268860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott */ 1268960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (ctxt->input != NULL) { 1269060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott oldctxt->sizeentities += ctxt->input->consumed; 1269160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott oldctxt->sizeentities += (ctxt->input->cur - ctxt->input->base); 1269260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } 1269360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott /* 1269460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * And record the last error if any 1269560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott */ 1269660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (ctxt->lastError.code != XML_ERR_OK) 1269760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott xmlCopyError(&ctxt->lastError, &oldctxt->lastError); 1269860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott 12699ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (sax != NULL) 12700ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->sax = oldsax; 12701ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project oldctxt->node_seq.maximum = ctxt->node_seq.maximum; 12702ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project oldctxt->node_seq.length = ctxt->node_seq.length; 12703ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project oldctxt->node_seq.buffer = ctxt->node_seq.buffer; 12704ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->node_seq.maximum = 0; 12705ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->node_seq.length = 0; 12706ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->node_seq.buffer = NULL; 12707ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFreeParserCtxt(ctxt); 12708ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project newDoc->intSubset = NULL; 12709ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project newDoc->extSubset = NULL; 12710ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFreeDoc(newDoc); 1271160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott 12712ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(ret); 12713ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 12714ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 12715ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_SAX1_ENABLED 12716ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 12717ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlParseExternalEntity: 12718ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @doc: the document the chunk pertains to 12719ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @sax: the SAX handler bloc (possibly NULL) 12720ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @user_data: The user data returned on SAX callbacks (possibly NULL) 12721ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @depth: Used for loop detection, use 0 12722ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @URL: the URL for the entity to load 12723ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ID: the System ID for the entity to load 12724ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @lst: the return value for the set of parsed nodes 12725ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 12726ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Parse an external general entity 12727ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * An external general parsed entity is well-formed if it matches the 12728ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * production labeled extParsedEnt. 12729ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 12730ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [78] extParsedEnt ::= TextDecl? content 12731ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 12732ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns 0 if the entity is well formed, -1 in case of args problem and 12733ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * the parser error code otherwise 12734ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 12735ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 12736ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectint 12737ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlParseExternalEntity(xmlDocPtr doc, xmlSAXHandlerPtr sax, void *user_data, 12738ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int depth, const xmlChar *URL, const xmlChar *ID, xmlNodePtr *lst) { 12739ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(xmlParseExternalEntityPrivate(doc, NULL, sax, user_data, depth, URL, 12740ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ID, lst)); 12741ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 12742ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 12743ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 12744ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlParseBalancedChunkMemory: 12745ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @doc: the document the chunk pertains to 12746ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @sax: the SAX handler bloc (possibly NULL) 12747ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @user_data: The user data returned on SAX callbacks (possibly NULL) 12748ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @depth: Used for loop detection, use 0 12749ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @string: the input string in UTF8 or ISO-Latin (zero terminated) 12750ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @lst: the return value for the set of parsed nodes 12751ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 12752ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Parse a well-balanced chunk of an XML document 12753ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * called by the parser 12754ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * The allowed sequence for the Well Balanced Chunk is the one defined by 12755ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * the content production in the XML grammar: 12756ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 12757ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [43] content ::= (element | CharData | Reference | CDSect | PI | Comment)* 12758ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 12759ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns 0 if the chunk is well balanced, -1 in case of args problem and 12760ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * the parser error code otherwise 12761ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 12762ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 12763ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectint 12764ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlParseBalancedChunkMemory(xmlDocPtr doc, xmlSAXHandlerPtr sax, 12765ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project void *user_data, int depth, const xmlChar *string, xmlNodePtr *lst) { 12766ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return xmlParseBalancedChunkMemoryRecover( doc, sax, user_data, 12767ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project depth, string, lst, 0 ); 12768ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 12769ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif /* LIBXML_SAX1_ENABLED */ 12770ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 12771ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 12772ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlParseBalancedChunkMemoryInternal: 12773ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @oldctxt: the existing parsing context 12774ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @string: the input string in UTF8 or ISO-Latin (zero terminated) 12775ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @user_data: the user data field for the parser context 12776ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @lst: the return value for the set of parsed nodes 12777ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 12778ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 12779ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Parse a well-balanced chunk of an XML document 12780ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * called by the parser 12781ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * The allowed sequence for the Well Balanced Chunk is the one defined by 12782ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * the content production in the XML grammar: 12783ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 12784ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [43] content ::= (element | CharData | Reference | CDSect | PI | Comment)* 12785ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 12786ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns XML_ERR_OK if the chunk is well balanced, and the parser 12787ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * error code otherwise 1278860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * 12789ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * In case recover is set to 1, the nodelist will not be empty even if 1279060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * the parsed chunk is not well balanced. 12791ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 12792ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic xmlParserErrors 12793ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlParseBalancedChunkMemoryInternal(xmlParserCtxtPtr oldctxt, 12794ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar *string, void *user_data, xmlNodePtr *lst) { 12795ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParserCtxtPtr ctxt; 12796ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlDocPtr newDoc = NULL; 12797ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlNodePtr newRoot; 12798ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSAXHandlerPtr oldsax = NULL; 12799ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlNodePtr content = NULL; 12800ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlNodePtr last = NULL; 12801ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int size; 12802ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParserErrors ret = XML_ERR_OK; 12803df143a5041f03a22808b59c76698770b74692815Selim Gurun#ifdef SAX2 12804df143a5041f03a22808b59c76698770b74692815Selim Gurun int i; 12805df143a5041f03a22808b59c76698770b74692815Selim Gurun#endif 12806ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1280760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (((oldctxt->depth > 40) && ((oldctxt->options & XML_PARSE_HUGE) == 0)) || 1280860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott (oldctxt->depth > 1024)) { 12809ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(XML_ERR_ENTITY_LOOP); 12810ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 12811ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 12812ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 12813ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (lst != NULL) 12814ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *lst = NULL; 12815ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (string == NULL) 12816ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(XML_ERR_INTERNAL_ERROR); 12817ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 12818ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project size = xmlStrlen(string); 12819ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 12820ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt = xmlCreateMemoryParserCtxt((char *) string, size); 12821ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt == NULL) return(XML_WAR_UNDECLARED_ENTITY); 12822ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (user_data != NULL) 12823ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->userData = user_data; 12824ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else 12825ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->userData = ctxt; 12826ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt->dict != NULL) xmlDictFree(ctxt->dict); 12827ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->dict = oldctxt->dict; 12828ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->str_xml = xmlDictLookup(ctxt->dict, BAD_CAST "xml", 3); 12829ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->str_xmlns = xmlDictLookup(ctxt->dict, BAD_CAST "xmlns", 5); 12830ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->str_xml_ns = xmlDictLookup(ctxt->dict, XML_XML_NAMESPACE, 36); 12831ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 12832df143a5041f03a22808b59c76698770b74692815Selim Gurun#ifdef SAX2 12833df143a5041f03a22808b59c76698770b74692815Selim Gurun /* propagate namespaces down the entity */ 12834df143a5041f03a22808b59c76698770b74692815Selim Gurun for (i = 0;i < oldctxt->nsNr;i += 2) { 12835df143a5041f03a22808b59c76698770b74692815Selim Gurun nsPush(ctxt, oldctxt->nsTab[i], oldctxt->nsTab[i+1]); 12836df143a5041f03a22808b59c76698770b74692815Selim Gurun } 12837df143a5041f03a22808b59c76698770b74692815Selim Gurun#endif 12838218647ebd721a259319b28f5719e89a4d0d1aaefShimeng (Simon) Wang 12839ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project oldsax = ctxt->sax; 12840ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->sax = oldctxt->sax; 12841ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlDetectSAX2(ctxt); 12842ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->replaceEntities = oldctxt->replaceEntities; 12843ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->options = oldctxt->options; 1284460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott 12845ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->_private = oldctxt->_private; 12846ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (oldctxt->myDoc == NULL) { 12847ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project newDoc = xmlNewDoc(BAD_CAST "1.0"); 12848ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (newDoc == NULL) { 12849ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->sax = oldsax; 12850ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->dict = NULL; 12851ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFreeParserCtxt(ctxt); 12852ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(XML_ERR_INTERNAL_ERROR); 12853ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1285460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott newDoc->properties = XML_DOC_INTERNAL; 12855ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project newDoc->dict = ctxt->dict; 12856ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlDictReference(newDoc->dict); 12857ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->myDoc = newDoc; 12858ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 12859ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->myDoc = oldctxt->myDoc; 12860ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project content = ctxt->myDoc->children; 12861ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project last = ctxt->myDoc->last; 12862ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 12863ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project newRoot = xmlNewDocNode(ctxt->myDoc, NULL, BAD_CAST "pseudoroot", NULL); 12864ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (newRoot == NULL) { 12865ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->sax = oldsax; 12866ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->dict = NULL; 12867ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFreeParserCtxt(ctxt); 12868ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (newDoc != NULL) { 12869ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFreeDoc(newDoc); 12870ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 12871ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(XML_ERR_INTERNAL_ERROR); 12872ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 12873ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->myDoc->children = NULL; 12874ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->myDoc->last = NULL; 12875ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlAddChild((xmlNodePtr) ctxt->myDoc, newRoot); 12876ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project nodePush(ctxt, ctxt->myDoc->children); 12877ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->instate = XML_PARSER_CONTENT; 12878ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->depth = oldctxt->depth + 1; 12879ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 12880ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->validate = 0; 12881ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->loadsubset = oldctxt->loadsubset; 12882ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((oldctxt->validate) || (oldctxt->replaceEntities != 0)) { 12883ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 12884ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * ID/IDREF registration will be done in xmlValidateElement below 12885ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 12886ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->loadsubset |= XML_SKIP_IDS; 12887ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 12888ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->dictNames = oldctxt->dictNames; 12889ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->attsDefault = oldctxt->attsDefault; 12890ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->attsSpecial = oldctxt->attsSpecial; 12891ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 12892ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParseContent(ctxt); 12893ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((RAW == '<') && (NXT(1) == '/')) { 12894ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErr(ctxt, XML_ERR_NOT_WELL_BALANCED, NULL); 12895ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if (RAW != 0) { 12896ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErr(ctxt, XML_ERR_EXTRA_CONTENT, NULL); 12897ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 12898ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt->node != ctxt->myDoc->children) { 12899ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErr(ctxt, XML_ERR_NOT_WELL_BALANCED, NULL); 12900ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 12901ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 12902ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (!ctxt->wellFormed) { 12903ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt->errNo == 0) 12904ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = XML_ERR_INTERNAL_ERROR; 12905ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else 12906ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = (xmlParserErrors)ctxt->errNo; 12907ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 12908ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = XML_ERR_OK; 12909ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1291060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott 12911ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((lst != NULL) && (ret == XML_ERR_OK)) { 12912ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlNodePtr cur; 12913ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 12914ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 12915ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Return the newly created nodeset after unlinking it from 12916ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * they pseudo parent. 12917ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 12918ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur = ctxt->myDoc->children->children; 12919ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *lst = cur; 12920ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while (cur != NULL) { 12921ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_VALID_ENABLED 12922ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((oldctxt->validate) && (oldctxt->wellFormed) && 12923ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (oldctxt->myDoc) && (oldctxt->myDoc->intSubset) && 12924ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (cur->type == XML_ELEMENT_NODE)) { 12925ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project oldctxt->valid &= xmlValidateElement(&oldctxt->vctxt, 12926ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project oldctxt->myDoc, cur); 12927ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 12928ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif /* LIBXML_VALID_ENABLED */ 12929ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur->parent = NULL; 12930ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur = cur->next; 12931ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 12932ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->myDoc->children->children = NULL; 12933ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 12934ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt->myDoc != NULL) { 12935ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFreeNode(ctxt->myDoc->children); 12936ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->myDoc->children = content; 12937ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->myDoc->last = last; 12938ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1293960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott 1294060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott /* 1294160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * Record in the parent context the number of entities replacement 1294260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * done when parsing that reference. 1294360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott */ 12944df143a5041f03a22808b59c76698770b74692815Selim Gurun if (oldctxt != NULL) 12945df143a5041f03a22808b59c76698770b74692815Selim Gurun oldctxt->nbentities += ctxt->nbentities; 12946df143a5041f03a22808b59c76698770b74692815Selim Gurun 1294760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott /* 1294860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * Also record the last error if any 1294960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott */ 1295060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (ctxt->lastError.code != XML_ERR_OK) 1295160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott xmlCopyError(&ctxt->lastError, &oldctxt->lastError); 1295260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott 12953ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->sax = oldsax; 12954ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->dict = NULL; 12955ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->attsDefault = NULL; 12956ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->attsSpecial = NULL; 12957ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFreeParserCtxt(ctxt); 12958ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (newDoc != NULL) { 12959ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFreeDoc(newDoc); 12960ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1296160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott 12962ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(ret); 12963ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 12964ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 12965ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 12966ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlParseInNodeContext: 12967ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @node: the context node 12968ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @data: the input string 12969ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @datalen: the input string length in bytes 12970ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @options: a combination of xmlParserOption 12971ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @lst: the return value for the set of parsed nodes 12972ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 12973ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Parse a well-balanced chunk of an XML document 12974ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * within the context (DTD, namespaces, etc ...) of the given node. 12975ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 12976ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * The allowed sequence for the data is a Well Balanced Chunk defined by 12977ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * the content production in the XML grammar: 12978ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 12979ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [43] content ::= (element | CharData | Reference | CDSect | PI | Comment)* 12980ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 12981ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns XML_ERR_OK if the chunk is well balanced, and the parser 12982ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * error code otherwise 12983ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 12984ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlParserErrors 12985ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlParseInNodeContext(xmlNodePtr node, const char *data, int datalen, 12986ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int options, xmlNodePtr *lst) { 12987ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef SAX2 12988ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParserCtxtPtr ctxt; 12989ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlDocPtr doc = NULL; 12990ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlNodePtr fake, cur; 12991ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int nsnr = 0; 12992ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 12993ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParserErrors ret = XML_ERR_OK; 12994ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 12995ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 12996ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * check all input parameters, grab the document 12997ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 12998ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((lst == NULL) || (node == NULL) || (data == NULL) || (datalen < 0)) 12999ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(XML_ERR_INTERNAL_ERROR); 13000ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project switch (node->type) { 13001ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_ELEMENT_NODE: 13002ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_ATTRIBUTE_NODE: 13003ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_TEXT_NODE: 13004ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_CDATA_SECTION_NODE: 13005ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_ENTITY_REF_NODE: 13006ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_PI_NODE: 13007ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_COMMENT_NODE: 13008ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_DOCUMENT_NODE: 13009ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_HTML_DOCUMENT_NODE: 13010ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 13011ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project default: 13012ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(XML_ERR_INTERNAL_ERROR); 13013ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 13014ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 13015ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while ((node != NULL) && (node->type != XML_ELEMENT_NODE) && 13016ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (node->type != XML_DOCUMENT_NODE) && 13017ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (node->type != XML_HTML_DOCUMENT_NODE)) 13018ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project node = node->parent; 13019ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (node == NULL) 13020ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(XML_ERR_INTERNAL_ERROR); 13021ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (node->type == XML_ELEMENT_NODE) 13022ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project doc = node->doc; 13023ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else 13024ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project doc = (xmlDocPtr) node; 13025ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (doc == NULL) 13026ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(XML_ERR_INTERNAL_ERROR); 13027ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 13028ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 13029ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * allocate a context and set-up everything not related to the 13030ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * node position in the tree 13031ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 13032ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (doc->type == XML_DOCUMENT_NODE) 13033ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt = xmlCreateMemoryParserCtxt((char *) data, datalen); 13034ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_HTML_ENABLED 13035df143a5041f03a22808b59c76698770b74692815Selim Gurun else if (doc->type == XML_HTML_DOCUMENT_NODE) { 13036ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt = htmlCreateMemoryParserCtxt((char *) data, datalen); 13037df143a5041f03a22808b59c76698770b74692815Selim Gurun /* 13038df143a5041f03a22808b59c76698770b74692815Selim Gurun * When parsing in context, it makes no sense to add implied 13039df143a5041f03a22808b59c76698770b74692815Selim Gurun * elements like html/body/etc... 13040df143a5041f03a22808b59c76698770b74692815Selim Gurun */ 13041df143a5041f03a22808b59c76698770b74692815Selim Gurun options |= HTML_PARSE_NOIMPLIED; 13042df143a5041f03a22808b59c76698770b74692815Selim Gurun } 13043ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 13044ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else 13045ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(XML_ERR_INTERNAL_ERROR); 13046ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 13047ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt == NULL) 13048ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(XML_ERR_NO_MEMORY); 13049ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 13050df143a5041f03a22808b59c76698770b74692815Selim Gurun /* 13051ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Use input doc's dict if present, else assure XML_PARSE_NODICT is set. 13052ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * We need a dictionary for xmlDetectSAX2, so if there's no doc dict 13053ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * we must wait until the last moment to free the original one. 13054ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 13055ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (doc->dict != NULL) { 13056ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt->dict != NULL) 13057ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlDictFree(ctxt->dict); 13058ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->dict = doc->dict; 13059ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else 13060ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project options |= XML_PARSE_NODICT; 13061ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 13062df143a5041f03a22808b59c76698770b74692815Selim Gurun if (doc->encoding != NULL) { 13063df143a5041f03a22808b59c76698770b74692815Selim Gurun xmlCharEncodingHandlerPtr hdlr; 13064df143a5041f03a22808b59c76698770b74692815Selim Gurun 13065df143a5041f03a22808b59c76698770b74692815Selim Gurun if (ctxt->encoding != NULL) 13066df143a5041f03a22808b59c76698770b74692815Selim Gurun xmlFree((xmlChar *) ctxt->encoding); 13067df143a5041f03a22808b59c76698770b74692815Selim Gurun ctxt->encoding = xmlStrdup((const xmlChar *) doc->encoding); 13068df143a5041f03a22808b59c76698770b74692815Selim Gurun 13069df143a5041f03a22808b59c76698770b74692815Selim Gurun hdlr = xmlFindCharEncodingHandler(doc->encoding); 13070df143a5041f03a22808b59c76698770b74692815Selim Gurun if (hdlr != NULL) { 13071df143a5041f03a22808b59c76698770b74692815Selim Gurun xmlSwitchToEncoding(ctxt, hdlr); 13072df143a5041f03a22808b59c76698770b74692815Selim Gurun } else { 13073df143a5041f03a22808b59c76698770b74692815Selim Gurun return(XML_ERR_UNSUPPORTED_ENCODING); 13074df143a5041f03a22808b59c76698770b74692815Selim Gurun } 13075df143a5041f03a22808b59c76698770b74692815Selim Gurun } 13076df143a5041f03a22808b59c76698770b74692815Selim Gurun 1307760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott xmlCtxtUseOptionsInternal(ctxt, options, NULL); 13078ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlDetectSAX2(ctxt); 13079ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->myDoc = doc; 13080ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 13081df143a5041f03a22808b59c76698770b74692815Selim Gurun fake = xmlNewComment(NULL); 13082df143a5041f03a22808b59c76698770b74692815Selim Gurun if (fake == NULL) { 13083df143a5041f03a22808b59c76698770b74692815Selim Gurun xmlFreeParserCtxt(ctxt); 13084df143a5041f03a22808b59c76698770b74692815Selim Gurun return(XML_ERR_NO_MEMORY); 13085df143a5041f03a22808b59c76698770b74692815Selim Gurun } 13086df143a5041f03a22808b59c76698770b74692815Selim Gurun xmlAddChild(node, fake); 13087df143a5041f03a22808b59c76698770b74692815Selim Gurun 13088ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (node->type == XML_ELEMENT_NODE) { 13089ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project nodePush(ctxt, node); 13090ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 13091ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * initialize the SAX2 namespaces stack 13092ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 13093ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur = node; 13094ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while ((cur != NULL) && (cur->type == XML_ELEMENT_NODE)) { 13095ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlNsPtr ns = cur->nsDef; 13096ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar *iprefix, *ihref; 13097ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 13098ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while (ns != NULL) { 13099ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt->dict) { 13100ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project iprefix = xmlDictLookup(ctxt->dict, ns->prefix, -1); 13101ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ihref = xmlDictLookup(ctxt->dict, ns->href, -1); 13102ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 13103ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project iprefix = ns->prefix; 13104ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ihref = ns->href; 13105ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 13106ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 13107ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (xmlGetNamespace(ctxt, iprefix) == NULL) { 13108ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project nsPush(ctxt, iprefix, ihref); 13109ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project nsnr++; 13110ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 13111ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ns = ns->next; 13112ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 13113ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur = cur->parent; 13114ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 13115ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->instate = XML_PARSER_CONTENT; 1311660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } 13117ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 13118ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ctxt->validate) || (ctxt->replaceEntities != 0)) { 13119ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 13120ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * ID/IDREF registration will be done in xmlValidateElement below 13121ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 13122ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->loadsubset |= XML_SKIP_IDS; 13123ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 13124ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 13125ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_HTML_ENABLED 13126ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (doc->type == XML_HTML_DOCUMENT_NODE) 13127ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project __htmlParseContent(ctxt); 13128ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else 13129ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 13130ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParseContent(ctxt); 13131ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 13132ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project nsPop(ctxt, nsnr); 13133ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((RAW == '<') && (NXT(1) == '/')) { 13134ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErr(ctxt, XML_ERR_NOT_WELL_BALANCED, NULL); 13135ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if (RAW != 0) { 13136ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErr(ctxt, XML_ERR_EXTRA_CONTENT, NULL); 13137ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 13138ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ctxt->node != NULL) && (ctxt->node != node)) { 13139ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErr(ctxt, XML_ERR_NOT_WELL_BALANCED, NULL); 13140ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->wellFormed = 0; 13141ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 13142ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 13143ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (!ctxt->wellFormed) { 13144ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt->errNo == 0) 13145ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = XML_ERR_INTERNAL_ERROR; 13146ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else 13147ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = (xmlParserErrors)ctxt->errNo; 13148ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 13149ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = XML_ERR_OK; 13150ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1315160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott 13152ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 13153ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Return the newly created nodeset after unlinking it from 13154ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * the pseudo sibling. 13155ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 1315660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott 13157ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur = fake->next; 13158ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project fake->next = NULL; 13159ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project node->last = fake; 13160ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 13161ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (cur != NULL) { 13162ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur->prev = NULL; 13163ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 13164ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 13165ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *lst = cur; 13166ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 13167ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while (cur != NULL) { 13168ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur->parent = NULL; 13169ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur = cur->next; 13170ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 13171ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 13172ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlUnlinkNode(fake); 13173ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFreeNode(fake); 13174ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 13175ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 13176ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ret != XML_ERR_OK) { 13177ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFreeNodeList(*lst); 13178ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *lst = NULL; 13179ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 13180ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 13181ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (doc->dict != NULL) 13182ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->dict = NULL; 13183ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFreeParserCtxt(ctxt); 1318460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott 13185ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(ret); 13186ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#else /* !SAX2 */ 13187ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(XML_ERR_INTERNAL_ERROR); 13188ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 13189ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 13190ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 13191ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_SAX1_ENABLED 13192ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 13193ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlParseBalancedChunkMemoryRecover: 13194ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @doc: the document the chunk pertains to 13195ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @sax: the SAX handler bloc (possibly NULL) 13196ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @user_data: The user data returned on SAX callbacks (possibly NULL) 13197ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @depth: Used for loop detection, use 0 13198ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @string: the input string in UTF8 or ISO-Latin (zero terminated) 13199ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @lst: the return value for the set of parsed nodes 13200ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @recover: return nodes even if the data is broken (use 0) 13201ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 13202ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 13203ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Parse a well-balanced chunk of an XML document 13204ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * called by the parser 13205ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * The allowed sequence for the Well Balanced Chunk is the one defined by 13206ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * the content production in the XML grammar: 13207ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 13208ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [43] content ::= (element | CharData | Reference | CDSect | PI | Comment)* 13209ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 13210ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns 0 if the chunk is well balanced, -1 in case of args problem and 13211ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * the parser error code otherwise 1321260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * 13213ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * In case recover is set to 1, the nodelist will not be empty even if 1321460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * the parsed chunk is not well balanced, assuming the parsing succeeded to 1321560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * some extent. 13216ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 13217ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectint 13218ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlParseBalancedChunkMemoryRecover(xmlDocPtr doc, xmlSAXHandlerPtr sax, 1321960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott void *user_data, int depth, const xmlChar *string, xmlNodePtr *lst, 13220ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int recover) { 13221ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParserCtxtPtr ctxt; 13222ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlDocPtr newDoc; 13223ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSAXHandlerPtr oldsax = NULL; 13224ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlNodePtr content, newRoot; 13225ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int size; 13226ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int ret = 0; 13227ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 13228ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (depth > 40) { 13229ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(XML_ERR_ENTITY_LOOP); 13230ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 13231ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 13232ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 13233ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (lst != NULL) 13234ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *lst = NULL; 13235ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (string == NULL) 13236ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(-1); 13237ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 13238ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project size = xmlStrlen(string); 13239ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 13240ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt = xmlCreateMemoryParserCtxt((char *) string, size); 13241ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt == NULL) return(-1); 13242ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->userData = ctxt; 13243ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (sax != NULL) { 13244ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project oldsax = ctxt->sax; 13245ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->sax = sax; 13246ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (user_data != NULL) 13247ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->userData = user_data; 13248ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 13249ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project newDoc = xmlNewDoc(BAD_CAST "1.0"); 13250ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (newDoc == NULL) { 13251ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFreeParserCtxt(ctxt); 13252ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(-1); 13253ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1325460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott newDoc->properties = XML_DOC_INTERNAL; 13255ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((doc != NULL) && (doc->dict != NULL)) { 13256ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlDictFree(ctxt->dict); 13257ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->dict = doc->dict; 13258ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlDictReference(ctxt->dict); 13259ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->str_xml = xmlDictLookup(ctxt->dict, BAD_CAST "xml", 3); 13260ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->str_xmlns = xmlDictLookup(ctxt->dict, BAD_CAST "xmlns", 5); 13261ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->str_xml_ns = xmlDictLookup(ctxt->dict, XML_XML_NAMESPACE, 36); 13262ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->dictNames = 1; 13263ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 1326460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott xmlCtxtUseOptionsInternal(ctxt, XML_PARSE_NODICT, NULL); 13265ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 13266ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (doc != NULL) { 13267ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project newDoc->intSubset = doc->intSubset; 13268ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project newDoc->extSubset = doc->extSubset; 13269ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 13270ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project newRoot = xmlNewDocNode(newDoc, NULL, BAD_CAST "pseudoroot", NULL); 13271ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (newRoot == NULL) { 13272ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (sax != NULL) 13273ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->sax = oldsax; 13274ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFreeParserCtxt(ctxt); 13275ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project newDoc->intSubset = NULL; 13276ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project newDoc->extSubset = NULL; 13277ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFreeDoc(newDoc); 13278ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(-1); 13279ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 13280ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlAddChild((xmlNodePtr) newDoc, newRoot); 13281ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project nodePush(ctxt, newRoot); 13282ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (doc == NULL) { 13283ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->myDoc = newDoc; 13284ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 13285ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->myDoc = newDoc; 13286ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project newDoc->children->doc = doc; 13287ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* Ensure that doc has XML spec namespace */ 13288ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSearchNsByHref(doc, (xmlNodePtr)doc, XML_XML_NAMESPACE); 13289ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project newDoc->oldNs = doc->oldNs; 13290ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 13291ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->instate = XML_PARSER_CONTENT; 13292ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->depth = depth; 13293ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 13294ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 13295ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Doing validity checking on chunk doesn't make sense 13296ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 13297ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->validate = 0; 13298ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->loadsubset = 0; 13299ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlDetectSAX2(ctxt); 13300ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 13301ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ( doc != NULL ){ 13302ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project content = doc->children; 13303ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project doc->children = NULL; 13304ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParseContent(ctxt); 13305ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project doc->children = content; 13306ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 13307ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else { 13308ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParseContent(ctxt); 13309ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 13310ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((RAW == '<') && (NXT(1) == '/')) { 13311ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErr(ctxt, XML_ERR_NOT_WELL_BALANCED, NULL); 13312ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if (RAW != 0) { 13313ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErr(ctxt, XML_ERR_EXTRA_CONTENT, NULL); 13314ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 13315ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt->node != newDoc->children) { 13316ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErr(ctxt, XML_ERR_NOT_WELL_BALANCED, NULL); 13317ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 13318ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 13319ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (!ctxt->wellFormed) { 13320ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt->errNo == 0) 13321ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = 1; 13322ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else 13323ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = ctxt->errNo; 13324ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 13325ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = 0; 13326ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1332760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott 13328ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((lst != NULL) && ((ret == 0) || (recover == 1))) { 13329ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlNodePtr cur; 13330ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 13331ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 13332ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Return the newly created nodeset after unlinking it from 13333ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * they pseudo parent. 13334ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 13335ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur = newDoc->children->children; 13336ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *lst = cur; 13337ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while (cur != NULL) { 13338ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSetTreeDoc(cur, doc); 13339ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur->parent = NULL; 13340ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur = cur->next; 13341ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 13342ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project newDoc->children->children = NULL; 13343ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1334460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott 1334560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (sax != NULL) 13346ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->sax = oldsax; 13347ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFreeParserCtxt(ctxt); 13348ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project newDoc->intSubset = NULL; 13349ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project newDoc->extSubset = NULL; 13350ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project newDoc->oldNs = NULL; 13351ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFreeDoc(newDoc); 1335260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott 13353ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(ret); 13354ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 13355ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 13356ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 13357ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlSAXParseEntity: 13358ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @sax: the SAX handler block 13359ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @filename: the filename 13360ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 13361ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * parse an XML external entity out of context and build a tree. 13362ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * It use the given SAX function block to handle the parsing callback. 13363ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * If sax is NULL, fallback to the default DOM tree building routines. 13364ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 13365ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [78] extParsedEnt ::= TextDecl? content 13366ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 13367ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * This correspond to a "Well Balanced" chunk 13368ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 13369ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the resulting document tree 13370ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 13371ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 13372ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlDocPtr 13373ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlSAXParseEntity(xmlSAXHandlerPtr sax, const char *filename) { 13374ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlDocPtr ret; 13375ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParserCtxtPtr ctxt; 13376ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 13377ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt = xmlCreateFileParserCtxt(filename); 13378ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt == NULL) { 13379ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 13380ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 13381ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (sax != NULL) { 13382ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt->sax != NULL) 13383ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree(ctxt->sax); 13384ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->sax = sax; 13385ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->userData = NULL; 13386ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 13387ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 13388ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParseExtParsedEnt(ctxt); 13389ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 13390ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt->wellFormed) 13391ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = ctxt->myDoc; 13392ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else { 13393ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = NULL; 13394ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFreeDoc(ctxt->myDoc); 13395ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->myDoc = NULL; 13396ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 13397ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (sax != NULL) 13398ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->sax = NULL; 13399ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFreeParserCtxt(ctxt); 1340060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott 13401ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(ret); 13402ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 13403ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 13404ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 13405ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlParseEntity: 13406ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @filename: the filename 13407ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 13408ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * parse an XML external entity out of context and build a tree. 13409ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 13410ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * [78] extParsedEnt ::= TextDecl? content 13411ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 13412ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * This correspond to a "Well Balanced" chunk 13413ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 13414ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the resulting document tree 13415ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 13416ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 13417ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlDocPtr 13418ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlParseEntity(const char *filename) { 13419ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(xmlSAXParseEntity(NULL, filename)); 13420ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 13421ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif /* LIBXML_SAX1_ENABLED */ 13422ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 13423ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 13424df143a5041f03a22808b59c76698770b74692815Selim Gurun * xmlCreateEntityParserCtxtInternal: 13425ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @URL: the entity URL 13426ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ID: the entity PUBLIC ID 13427ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @base: a possible base for the target URI 13428df143a5041f03a22808b59c76698770b74692815Selim Gurun * @pctx: parser context used to set options on new context 13429ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 13430ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Create a parser context for an external entity 13431ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Automatic support for ZLIB/Compress compressed document is provided 13432ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * by default if found at compile-time. 13433ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 13434ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the new parser context or NULL 13435ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 13436df143a5041f03a22808b59c76698770b74692815Selim Gurunstatic xmlParserCtxtPtr 13437df143a5041f03a22808b59c76698770b74692815Selim GurunxmlCreateEntityParserCtxtInternal(const xmlChar *URL, const xmlChar *ID, 13438df143a5041f03a22808b59c76698770b74692815Selim Gurun const xmlChar *base, xmlParserCtxtPtr pctx) { 13439ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParserCtxtPtr ctxt; 13440ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParserInputPtr inputStream; 13441ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project char *directory = NULL; 13442ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar *uri; 1344360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott 13444ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt = xmlNewParserCtxt(); 13445ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt == NULL) { 13446ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 13447ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 13448ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 13449df143a5041f03a22808b59c76698770b74692815Selim Gurun if (pctx != NULL) { 13450df143a5041f03a22808b59c76698770b74692815Selim Gurun ctxt->options = pctx->options; 13451df143a5041f03a22808b59c76698770b74692815Selim Gurun ctxt->_private = pctx->_private; 13452df143a5041f03a22808b59c76698770b74692815Selim Gurun } 13453df143a5041f03a22808b59c76698770b74692815Selim Gurun 13454ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project uri = xmlBuildURI(URL, base); 13455ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 13456ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (uri == NULL) { 13457ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project inputStream = xmlLoadExternalEntity((char *)URL, (char *)ID, ctxt); 13458ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (inputStream == NULL) { 13459ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFreeParserCtxt(ctxt); 13460ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 13461ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 13462ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 13463ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project inputPush(ctxt, inputStream); 13464ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 13465ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ctxt->directory == NULL) && (directory == NULL)) 13466ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project directory = xmlParserGetDirectory((char *)URL); 13467ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ctxt->directory == NULL) && (directory != NULL)) 13468ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->directory = directory; 13469ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 13470ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project inputStream = xmlLoadExternalEntity((char *)uri, (char *)ID, ctxt); 13471ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (inputStream == NULL) { 13472ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree(uri); 13473ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFreeParserCtxt(ctxt); 13474ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 13475ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 13476ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 13477ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project inputPush(ctxt, inputStream); 13478ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 13479ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ctxt->directory == NULL) && (directory == NULL)) 13480ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project directory = xmlParserGetDirectory((char *)uri); 13481ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ctxt->directory == NULL) && (directory != NULL)) 13482ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->directory = directory; 13483ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree(uri); 13484ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 13485ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(ctxt); 13486ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 13487ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 13488df143a5041f03a22808b59c76698770b74692815Selim Gurun/** 13489df143a5041f03a22808b59c76698770b74692815Selim Gurun * xmlCreateEntityParserCtxt: 13490df143a5041f03a22808b59c76698770b74692815Selim Gurun * @URL: the entity URL 13491df143a5041f03a22808b59c76698770b74692815Selim Gurun * @ID: the entity PUBLIC ID 13492df143a5041f03a22808b59c76698770b74692815Selim Gurun * @base: a possible base for the target URI 13493df143a5041f03a22808b59c76698770b74692815Selim Gurun * 13494df143a5041f03a22808b59c76698770b74692815Selim Gurun * Create a parser context for an external entity 13495df143a5041f03a22808b59c76698770b74692815Selim Gurun * Automatic support for ZLIB/Compress compressed document is provided 13496df143a5041f03a22808b59c76698770b74692815Selim Gurun * by default if found at compile-time. 13497df143a5041f03a22808b59c76698770b74692815Selim Gurun * 13498df143a5041f03a22808b59c76698770b74692815Selim Gurun * Returns the new parser context or NULL 13499df143a5041f03a22808b59c76698770b74692815Selim Gurun */ 13500df143a5041f03a22808b59c76698770b74692815Selim GurunxmlParserCtxtPtr 13501df143a5041f03a22808b59c76698770b74692815Selim GurunxmlCreateEntityParserCtxt(const xmlChar *URL, const xmlChar *ID, 13502df143a5041f03a22808b59c76698770b74692815Selim Gurun const xmlChar *base) { 13503df143a5041f03a22808b59c76698770b74692815Selim Gurun return xmlCreateEntityParserCtxtInternal(URL, ID, base, NULL); 13504df143a5041f03a22808b59c76698770b74692815Selim Gurun 13505df143a5041f03a22808b59c76698770b74692815Selim Gurun} 13506df143a5041f03a22808b59c76698770b74692815Selim Gurun 13507ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/************************************************************************ 13508ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * * 1350960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * Front ends when parsing from a file * 13510ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * * 13511ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ************************************************************************/ 13512ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 13513ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 13514ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlCreateURLParserCtxt: 13515ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @filename: the filename or URL 13516ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @options: a combination of xmlParserOption 13517ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 13518ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Create a parser context for a file or URL content. 13519ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Automatic support for ZLIB/Compress compressed document is provided 13520ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * by default if found at compile-time and for file accesses 13521ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 13522ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the new parser context or NULL 13523ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 13524ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlParserCtxtPtr 13525ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlCreateURLParserCtxt(const char *filename, int options) 13526ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{ 13527ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParserCtxtPtr ctxt; 13528ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParserInputPtr inputStream; 13529ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project char *directory = NULL; 13530ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 13531ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt = xmlNewParserCtxt(); 13532ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt == NULL) { 13533ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlErrMemory(NULL, "cannot allocate parser context"); 13534ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 13535ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 13536ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 13537ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (options) 1353860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott xmlCtxtUseOptionsInternal(ctxt, options, NULL); 13539ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->linenumbers = 1; 1354060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott 13541ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project inputStream = xmlLoadExternalEntity(filename, NULL, ctxt); 13542ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (inputStream == NULL) { 13543ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFreeParserCtxt(ctxt); 13544ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 13545ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 13546ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 13547ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project inputPush(ctxt, inputStream); 13548ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ctxt->directory == NULL) && (directory == NULL)) 13549ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project directory = xmlParserGetDirectory(filename); 13550ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ctxt->directory == NULL) && (directory != NULL)) 13551ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->directory = directory; 13552ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 13553ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(ctxt); 13554ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 13555ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 13556ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 13557ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlCreateFileParserCtxt: 13558ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @filename: the filename 13559ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 13560ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Create a parser context for a file content. 13561ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Automatic support for ZLIB/Compress compressed document is provided 13562ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * by default if found at compile-time. 13563ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 13564ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the new parser context or NULL 13565ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 13566ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlParserCtxtPtr 13567ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlCreateFileParserCtxt(const char *filename) 13568ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{ 13569ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(xmlCreateURLParserCtxt(filename, 0)); 13570ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 13571ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 13572ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_SAX1_ENABLED 13573ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 13574ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlSAXParseFileWithData: 13575ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @sax: the SAX handler block 13576ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @filename: the filename 13577ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @recovery: work in recovery mode, i.e. tries to read no Well Formed 13578ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * documents 13579ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @data: the userdata 13580ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 13581ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * parse an XML file and build a tree. Automatic support for ZLIB/Compress 13582ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * compressed document is provided by default if found at compile-time. 13583ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * It use the given SAX function block to handle the parsing callback. 13584ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * If sax is NULL, fallback to the default DOM tree building routines. 13585ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 13586ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * User data (void *) is stored within the parser context in the 13587ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * context's _private member, so it is available nearly everywhere in libxml 13588ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 13589ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the resulting document tree 13590ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 13591ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 13592ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlDocPtr 13593ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlSAXParseFileWithData(xmlSAXHandlerPtr sax, const char *filename, 13594ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int recovery, void *data) { 13595ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlDocPtr ret; 13596ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParserCtxtPtr ctxt; 13597ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 13598ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlInitParser(); 13599ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 13600ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt = xmlCreateFileParserCtxt(filename); 13601ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt == NULL) { 13602ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 13603ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 13604ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (sax != NULL) { 13605ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt->sax != NULL) 13606ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree(ctxt->sax); 13607ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->sax = sax; 13608ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 13609ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlDetectSAX2(ctxt); 13610ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (data!=NULL) { 13611ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->_private = data; 13612ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 13613ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1361460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (ctxt->directory == NULL) 1361560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ctxt->directory = xmlParserGetDirectory(filename); 13616ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 13617ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->recovery = recovery; 13618ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 13619ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParseDocument(ctxt); 13620ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 13621ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ctxt->wellFormed) || recovery) { 13622ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = ctxt->myDoc; 13623ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ret != NULL) { 13624ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt->input->buf->compressed > 0) 13625ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret->compression = 9; 13626ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else 13627ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret->compression = ctxt->input->buf->compressed; 13628ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 13629ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 13630ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else { 13631ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = NULL; 13632ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFreeDoc(ctxt->myDoc); 13633ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->myDoc = NULL; 13634ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 13635ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (sax != NULL) 13636ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->sax = NULL; 13637ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFreeParserCtxt(ctxt); 13638ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 13639ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(ret); 13640ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 13641ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 13642ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 13643ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlSAXParseFile: 13644ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @sax: the SAX handler block 13645ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @filename: the filename 13646ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @recovery: work in recovery mode, i.e. tries to read no Well Formed 13647ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * documents 13648ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 13649ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * parse an XML file and build a tree. Automatic support for ZLIB/Compress 13650ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * compressed document is provided by default if found at compile-time. 13651ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * It use the given SAX function block to handle the parsing callback. 13652ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * If sax is NULL, fallback to the default DOM tree building routines. 13653ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 13654ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the resulting document tree 13655ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 13656ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 13657ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlDocPtr 13658ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlSAXParseFile(xmlSAXHandlerPtr sax, const char *filename, 13659ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int recovery) { 13660ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(xmlSAXParseFileWithData(sax,filename,recovery,NULL)); 13661ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 13662ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 13663ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 13664ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlRecoverDoc: 13665ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @cur: a pointer to an array of xmlChar 13666ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 13667ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * parse an XML in-memory document and build a tree. 1366860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * In the case the document is not Well Formed, a attempt to build a 1366960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * tree is tried anyway 1367060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * 1367160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * Returns the resulting document tree or NULL in case of failure 13672ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 13673ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 13674ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlDocPtr 13675df143a5041f03a22808b59c76698770b74692815Selim GurunxmlRecoverDoc(const xmlChar *cur) { 13676ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(xmlSAXParseDoc(NULL, cur, 1)); 13677ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 13678ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 13679ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 13680ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlParseFile: 13681ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @filename: the filename 13682ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 13683ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * parse an XML file and build a tree. Automatic support for ZLIB/Compress 13684ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * compressed document is provided by default if found at compile-time. 13685ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 13686ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the resulting document tree if the file was wellformed, 13687ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * NULL otherwise. 13688ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 13689ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 13690ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlDocPtr 13691ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlParseFile(const char *filename) { 13692ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(xmlSAXParseFile(NULL, filename, 0)); 13693ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 13694ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 13695ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 13696ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlRecoverFile: 13697ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @filename: the filename 13698ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 13699ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * parse an XML file and build a tree. Automatic support for ZLIB/Compress 13700ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * compressed document is provided by default if found at compile-time. 1370160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * In the case the document is not Well Formed, it attempts to build 1370260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * a tree anyway 13703ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 1370460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * Returns the resulting document tree or NULL in case of failure 13705ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 13706ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 13707ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlDocPtr 13708ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlRecoverFile(const char *filename) { 13709ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(xmlSAXParseFile(NULL, filename, 1)); 13710ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 13711ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 13712ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 13713ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 13714ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlSetupParserForBuffer: 13715ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctxt: an XML parser context 13716ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @buffer: a xmlChar * buffer 13717ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @filename: a file name 13718ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 13719ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Setup the parser context to parse a new buffer; Clears any prior 13720ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * contents from the parser context. The buffer parameter must not be 13721ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * NULL, but the filename parameter can be 13722ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 13723ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectvoid 13724ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlSetupParserForBuffer(xmlParserCtxtPtr ctxt, const xmlChar* buffer, 13725ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const char* filename) 13726ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{ 13727ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParserInputPtr input; 13728ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 13729ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ctxt == NULL) || (buffer == NULL)) 13730ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return; 13731ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 13732ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project input = xmlNewInputStream(ctxt); 13733ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (input == NULL) { 13734ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlErrMemory(NULL, "parsing new buffer: out of memory\n"); 13735ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlClearParserCtxt(ctxt); 13736ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return; 13737ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 13738ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 13739ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlClearParserCtxt(ctxt); 13740ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (filename != NULL) 13741ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project input->filename = (char *) xmlCanonicPath((const xmlChar *)filename); 13742ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project input->base = buffer; 13743ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project input->cur = buffer; 13744ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project input->end = &buffer[xmlStrlen(buffer)]; 13745ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project inputPush(ctxt, input); 13746ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 13747ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 13748ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 13749ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlSAXUserParseFile: 13750ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @sax: a SAX handler 13751ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @user_data: The user data returned on SAX callbacks 13752ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @filename: a file name 13753ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 13754ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * parse an XML file and call the given SAX handler routines. 13755ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Automatic support for ZLIB/Compress compressed document is provided 13756ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 13757ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns 0 in case of success or a error number otherwise 13758ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 13759ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectint 13760ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlSAXUserParseFile(xmlSAXHandlerPtr sax, void *user_data, 13761ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const char *filename) { 13762ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int ret = 0; 13763ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParserCtxtPtr ctxt; 13764ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 13765ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt = xmlCreateFileParserCtxt(filename); 13766ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt == NULL) return -1; 13767ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt->sax != (xmlSAXHandlerPtr) &xmlDefaultSAXHandler) 13768ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree(ctxt->sax); 13769ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->sax = sax; 13770ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlDetectSAX2(ctxt); 13771ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 13772ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (user_data != NULL) 13773ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->userData = user_data; 13774ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 13775ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParseDocument(ctxt); 13776ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 13777ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt->wellFormed) 13778ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = 0; 13779ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else { 13780ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt->errNo != 0) 13781ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = ctxt->errNo; 13782ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else 13783ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = -1; 13784ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 13785ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (sax != NULL) 13786ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->sax = NULL; 13787ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt->myDoc != NULL) { 13788ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFreeDoc(ctxt->myDoc); 13789ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->myDoc = NULL; 13790ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 13791ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFreeParserCtxt(ctxt); 13792ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 13793ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return ret; 13794ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 13795ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif /* LIBXML_SAX1_ENABLED */ 13796ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 13797ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/************************************************************************ 13798ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * * 13799ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Front ends when parsing from memory * 13800ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * * 13801ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ************************************************************************/ 13802ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 13803ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 13804ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlCreateMemoryParserCtxt: 13805ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @buffer: a pointer to a char array 13806ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @size: the size of the array 13807ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 13808ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Create a parser context for an XML in-memory document. 13809ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 13810ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the new parser context or NULL 13811ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 13812ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlParserCtxtPtr 13813ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlCreateMemoryParserCtxt(const char *buffer, int size) { 13814ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParserCtxtPtr ctxt; 13815ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParserInputPtr input; 13816ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParserInputBufferPtr buf; 13817ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 13818ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (buffer == NULL) 13819ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 13820ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (size <= 0) 13821ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 13822ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 13823ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt = xmlNewParserCtxt(); 13824ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt == NULL) 13825ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 13826ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 13827ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* TODO: xmlParserInputBufferCreateStatic, requires some serious changes */ 13828ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project buf = xmlParserInputBufferCreateMem(buffer, size, XML_CHAR_ENCODING_NONE); 13829ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (buf == NULL) { 13830ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFreeParserCtxt(ctxt); 13831ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 13832ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 13833ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 13834ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project input = xmlNewInputStream(ctxt); 13835ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (input == NULL) { 13836ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFreeParserInputBuffer(buf); 13837ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFreeParserCtxt(ctxt); 13838ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 13839ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 13840ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 13841ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project input->filename = NULL; 13842ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project input->buf = buf; 13843ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project input->base = input->buf->buffer->content; 13844ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project input->cur = input->buf->buffer->content; 13845ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project input->end = &input->buf->buffer->content[input->buf->buffer->use]; 13846ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 13847ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project inputPush(ctxt, input); 13848ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(ctxt); 13849ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 13850ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 13851ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_SAX1_ENABLED 13852ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 13853ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlSAXParseMemoryWithData: 13854ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @sax: the SAX handler block 13855ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @buffer: an pointer to a char array 13856ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @size: the size of the array 13857ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @recovery: work in recovery mode, i.e. tries to read no Well Formed 13858ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * documents 13859ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @data: the userdata 13860ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 13861ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * parse an XML in-memory block and use the given SAX function block 13862ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * to handle the parsing callback. If sax is NULL, fallback to the default 13863ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * DOM tree building routines. 13864ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 13865ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * User data (void *) is stored within the parser context in the 13866ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * context's _private member, so it is available nearly everywhere in libxml 13867ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 13868ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the resulting document tree 13869ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 13870ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 13871ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlDocPtr 13872ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlSAXParseMemoryWithData(xmlSAXHandlerPtr sax, const char *buffer, 13873ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int size, int recovery, void *data) { 13874ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlDocPtr ret; 13875ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParserCtxtPtr ctxt; 13876ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 13877df143a5041f03a22808b59c76698770b74692815Selim Gurun xmlInitParser(); 13878df143a5041f03a22808b59c76698770b74692815Selim Gurun 13879ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt = xmlCreateMemoryParserCtxt(buffer, size); 13880ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt == NULL) return(NULL); 13881ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (sax != NULL) { 13882ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt->sax != NULL) 13883ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree(ctxt->sax); 13884ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->sax = sax; 13885ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 13886ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlDetectSAX2(ctxt); 13887ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (data!=NULL) { 13888ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->_private=data; 13889ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 13890ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 13891ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->recovery = recovery; 13892ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 13893ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParseDocument(ctxt); 13894ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 13895ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ctxt->wellFormed) || recovery) ret = ctxt->myDoc; 13896ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else { 13897ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = NULL; 13898ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFreeDoc(ctxt->myDoc); 13899ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->myDoc = NULL; 13900ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 13901ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (sax != NULL) 13902ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->sax = NULL; 13903ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFreeParserCtxt(ctxt); 13904df143a5041f03a22808b59c76698770b74692815Selim Gurun 13905ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(ret); 13906ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 13907ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 13908ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 13909ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlSAXParseMemory: 13910ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @sax: the SAX handler block 13911ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @buffer: an pointer to a char array 13912ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @size: the size of the array 13913ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @recovery: work in recovery mode, i.e. tries to read not Well Formed 13914ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * documents 13915ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 13916ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * parse an XML in-memory block and use the given SAX function block 13917ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * to handle the parsing callback. If sax is NULL, fallback to the default 13918ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * DOM tree building routines. 13919ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 13920ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the resulting document tree 13921ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 13922ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlDocPtr 13923ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlSAXParseMemory(xmlSAXHandlerPtr sax, const char *buffer, 13924ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int size, int recovery) { 13925ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return xmlSAXParseMemoryWithData(sax, buffer, size, recovery, NULL); 13926ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 13927ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 13928ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 13929ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlParseMemory: 13930ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @buffer: an pointer to a char array 13931ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @size: the size of the array 13932ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 13933ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * parse an XML in-memory block and build a tree. 13934ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 13935ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the resulting document tree 13936ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 13937ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 13938ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlDocPtr xmlParseMemory(const char *buffer, int size) { 13939ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(xmlSAXParseMemory(NULL, buffer, size, 0)); 13940ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 13941ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 13942ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 13943ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlRecoverMemory: 13944ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @buffer: an pointer to a char array 13945ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @size: the size of the array 13946ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 13947ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * parse an XML in-memory block and build a tree. 1394860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * In the case the document is not Well Formed, an attempt to 1394960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * build a tree is tried anyway 1395060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * 1395160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * Returns the resulting document tree or NULL in case of error 13952ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 13953ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 13954ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlDocPtr xmlRecoverMemory(const char *buffer, int size) { 13955ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(xmlSAXParseMemory(NULL, buffer, size, 1)); 13956ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 13957ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 13958ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 13959ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlSAXUserParseMemory: 13960ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @sax: a SAX handler 13961ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @user_data: The user data returned on SAX callbacks 13962ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @buffer: an in-memory XML document input 13963ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @size: the length of the XML document in bytes 13964ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 13965ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * A better SAX parsing routine. 13966ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * parse an XML in-memory buffer and call the given SAX handler routines. 13967df143a5041f03a22808b59c76698770b74692815Selim Gurun * 13968ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns 0 in case of success or a error number otherwise 13969ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 13970ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectint xmlSAXUserParseMemory(xmlSAXHandlerPtr sax, void *user_data, 13971ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const char *buffer, int size) { 13972ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int ret = 0; 13973ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParserCtxtPtr ctxt; 13974df143a5041f03a22808b59c76698770b74692815Selim Gurun 13975df143a5041f03a22808b59c76698770b74692815Selim Gurun xmlInitParser(); 13976df143a5041f03a22808b59c76698770b74692815Selim Gurun 13977ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt = xmlCreateMemoryParserCtxt(buffer, size); 13978ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt == NULL) return -1; 13979ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt->sax != (xmlSAXHandlerPtr) &xmlDefaultSAXHandler) 13980ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree(ctxt->sax); 13981ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->sax = sax; 13982ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlDetectSAX2(ctxt); 13983ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 13984ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (user_data != NULL) 13985ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->userData = user_data; 13986df143a5041f03a22808b59c76698770b74692815Selim Gurun 13987ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParseDocument(ctxt); 13988ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 13989ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt->wellFormed) 13990ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = 0; 13991ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else { 13992ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt->errNo != 0) 13993ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = ctxt->errNo; 13994ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else 13995ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = -1; 13996ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 13997ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (sax != NULL) 13998ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->sax = NULL; 13999ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt->myDoc != NULL) { 14000ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFreeDoc(ctxt->myDoc); 14001ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->myDoc = NULL; 14002ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 14003ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFreeParserCtxt(ctxt); 14004ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 14005ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return ret; 14006ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 14007ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif /* LIBXML_SAX1_ENABLED */ 14008ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 14009ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 14010ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlCreateDocParserCtxt: 14011ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @cur: a pointer to an array of xmlChar 14012ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 14013ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Creates a parser context for an XML in-memory document. 14014ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 14015ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the new parser context or NULL 14016ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 14017ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlParserCtxtPtr 14018ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlCreateDocParserCtxt(const xmlChar *cur) { 14019ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int len; 14020ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 14021ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (cur == NULL) 14022ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 14023ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project len = xmlStrlen(cur); 14024ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(xmlCreateMemoryParserCtxt((const char *)cur, len)); 14025ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 14026ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 14027ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_SAX1_ENABLED 14028ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 14029ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlSAXParseDoc: 14030ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @sax: the SAX handler block 14031ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @cur: a pointer to an array of xmlChar 14032ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @recovery: work in recovery mode, i.e. tries to read no Well Formed 14033ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * documents 14034ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 14035ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * parse an XML in-memory document and build a tree. 14036ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * It use the given SAX function block to handle the parsing callback. 14037ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * If sax is NULL, fallback to the default DOM tree building routines. 14038ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 14039ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the resulting document tree 14040ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 14041ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 14042ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlDocPtr 14043ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlSAXParseDoc(xmlSAXHandlerPtr sax, const xmlChar *cur, int recovery) { 14044ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlDocPtr ret; 14045ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParserCtxtPtr ctxt; 14046ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSAXHandlerPtr oldsax = NULL; 14047ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 14048ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (cur == NULL) return(NULL); 14049ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 14050ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 14051ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt = xmlCreateDocParserCtxt(cur); 14052ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt == NULL) return(NULL); 14053ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (sax != NULL) { 14054ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project oldsax = ctxt->sax; 14055ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->sax = sax; 14056ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->userData = NULL; 14057ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 14058ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlDetectSAX2(ctxt); 14059ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 14060ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParseDocument(ctxt); 14061ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ctxt->wellFormed) || recovery) ret = ctxt->myDoc; 14062ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else { 14063ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = NULL; 14064ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFreeDoc(ctxt->myDoc); 14065ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->myDoc = NULL; 14066ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 14067ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (sax != NULL) 14068ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->sax = oldsax; 14069ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFreeParserCtxt(ctxt); 14070ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 14071ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(ret); 14072ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 14073ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 14074ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 14075ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlParseDoc: 14076ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @cur: a pointer to an array of xmlChar 14077ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 14078ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * parse an XML in-memory document and build a tree. 14079ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 14080ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the resulting document tree 14081ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 14082ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 14083ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlDocPtr 14084ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlParseDoc(const xmlChar *cur) { 14085ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(xmlSAXParseDoc(NULL, cur, 0)); 14086ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 14087ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif /* LIBXML_SAX1_ENABLED */ 14088ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 14089ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_LEGACY_ENABLED 14090ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/************************************************************************ 14091ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * * 14092ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Specific function to keep track of entities references * 14093ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * and used by the XSLT debugger * 14094ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * * 14095ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ************************************************************************/ 14096ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 14097ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic xmlEntityReferenceFunc xmlEntityRefFunc = NULL; 14098ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 14099ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 14100ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlAddEntityReference: 14101ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ent : A valid entity 14102ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @firstNode : A valid first node for children of entity 14103ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @lastNode : A valid last node of children entity 14104ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 14105ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Notify of a reference to an entity of type XML_EXTERNAL_GENERAL_PARSED_ENTITY 14106ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 14107ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic void 14108ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlAddEntityReference(xmlEntityPtr ent, xmlNodePtr firstNode, 14109ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlNodePtr lastNode) 14110ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{ 14111ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (xmlEntityRefFunc != NULL) { 14112ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (*xmlEntityRefFunc) (ent, firstNode, lastNode); 14113ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 14114ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 14115ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 14116ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 14117ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 14118ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlSetEntityReferenceFunc: 14119ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @func: A valid function 14120ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 14121ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Set the function to call call back when a xml reference has been made 14122ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 14123ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectvoid 14124ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlSetEntityReferenceFunc(xmlEntityReferenceFunc func) 14125ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{ 14126ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlEntityRefFunc = func; 14127ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 14128ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif /* LIBXML_LEGACY_ENABLED */ 14129ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 14130ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/************************************************************************ 14131ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * * 14132ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Miscellaneous * 14133ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * * 14134ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ************************************************************************/ 14135ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 14136ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_XPATH_ENABLED 14137ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#include <libxml/xpath.h> 14138ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 14139ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 14140ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectextern void XMLCDECL xmlGenericErrorDefaultFunc(void *ctx, const char *msg, ...); 14141ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic int xmlParserInitialized = 0; 14142ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 14143ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 14144ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlInitParser: 14145ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 14146ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Initialization function for the XML parser. 14147ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * This is not reentrant. Call once before processing in case of 14148ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * use in multithreaded programs. 14149ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 14150ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 14151ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectvoid 14152ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlInitParser(void) { 14153ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (xmlParserInitialized != 0) 14154ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return; 14155ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 14156ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_THREAD_ENABLED 14157ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project __xmlGlobalInitMutexLock(); 14158ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (xmlParserInitialized == 0) { 14159ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 14160df143a5041f03a22808b59c76698770b74692815Selim Gurun xmlInitThreads(); 14161df143a5041f03a22808b59c76698770b74692815Selim Gurun xmlInitGlobals(); 14162ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((xmlGenericError == xmlGenericErrorDefaultFunc) || 14163ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (xmlGenericError == NULL)) 14164ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project initGenericErrorDefaultFunc(NULL); 14165ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlInitMemory(); 14166ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlInitCharEncodingHandlers(); 14167ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlDefaultSAXHandlerInit(); 14168ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlRegisterDefaultInputCallbacks(); 14169ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_OUTPUT_ENABLED 14170ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlRegisterDefaultOutputCallbacks(); 14171ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif /* LIBXML_OUTPUT_ENABLED */ 14172ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_HTML_ENABLED 14173ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project htmlInitAutoClose(); 14174ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project htmlDefaultSAXHandlerInit(); 14175ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 14176ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_XPATH_ENABLED 14177ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlXPathInit(); 14178ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 14179ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParserInitialized = 1; 14180ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_THREAD_ENABLED 14181ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 14182ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project __xmlGlobalInitMutexUnlock(); 14183ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 14184ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 14185ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 14186ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 14187ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlCleanupParser: 14188ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 1418960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * This function name is somewhat misleading. It does not clean up 1419060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * parser state, it cleans up memory allocated by the library itself. 1419160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * It is a cleanup function for the XML library. It tries to reclaim all 1419260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * related global memory allocated for the library processing. 1419360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * It doesn't deallocate any document related memory. One should 1419460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * call xmlCleanupParser() only when the process has finished using 1419560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * the library and all XML/HTML documents built with it. 1419660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * See also xmlInitParser() which has the opposite function of preparing 1419760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * the library for operations. 14198df143a5041f03a22808b59c76698770b74692815Selim Gurun * 14199df143a5041f03a22808b59c76698770b74692815Selim Gurun * WARNING: if your application is multithreaded or has plugin support 14200df143a5041f03a22808b59c76698770b74692815Selim Gurun * calling this may crash the application if another thread or 14201df143a5041f03a22808b59c76698770b74692815Selim Gurun * a plugin is still using libxml2. It's sometimes very hard to 14202df143a5041f03a22808b59c76698770b74692815Selim Gurun * guess if libxml2 is in use in the application, some libraries 14203df143a5041f03a22808b59c76698770b74692815Selim Gurun * or plugins may use it without notice. In case of doubt abstain 14204df143a5041f03a22808b59c76698770b74692815Selim Gurun * from calling this function or do it just before calling exit() 14205df143a5041f03a22808b59c76698770b74692815Selim Gurun * to avoid leak reports from valgrind ! 14206ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 14207ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 14208ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectvoid 14209ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlCleanupParser(void) { 14210ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (!xmlParserInitialized) 14211ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return; 14212ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 14213ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlCleanupCharEncodingHandlers(); 14214ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_CATALOG_ENABLED 14215ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlCatalogCleanup(); 14216ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 14217ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlDictCleanup(); 14218ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlCleanupInputCallbacks(); 14219ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_OUTPUT_ENABLED 14220ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlCleanupOutputCallbacks(); 14221ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 14222ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_SCHEMAS_ENABLED 14223ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaCleanupTypes(); 14224ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlRelaxNGCleanupTypes(); 14225ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 14226ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlCleanupGlobals(); 14227ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlResetLastError(); 14228ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlCleanupThreads(); /* must be last if called not from the main thread */ 14229ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlCleanupMemory(); 14230ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParserInitialized = 0; 14231ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 14232ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 14233ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/************************************************************************ 14234ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * * 14235ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * New set (2.6.0) of simpler and more flexible APIs * 14236ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * * 14237ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ************************************************************************/ 14238ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 14239ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 14240ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * DICT_FREE: 14241ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @str: a string 14242ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 14243ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Free a string if it is not owned by the "dict" dictionnary in the 14244ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * current scope 14245ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 14246ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#define DICT_FREE(str) \ 14247ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((str) && ((!dict) || \ 14248ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (xmlDictOwns(dict, (const xmlChar *)(str)) == 0))) \ 14249ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree((char *)(str)); 14250ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 14251ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 14252ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlCtxtReset: 14253ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctxt: an XML parser context 14254ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 14255ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Reset a parser context 14256ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 14257ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectvoid 14258ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlCtxtReset(xmlParserCtxtPtr ctxt) 14259ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{ 14260ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParserInputPtr input; 14261ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlDictPtr dict; 14262ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 14263ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt == NULL) 14264ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return; 14265ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 14266ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project dict = ctxt->dict; 14267ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 14268ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while ((input = inputPop(ctxt)) != NULL) { /* Non consuming */ 14269ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFreeInputStream(input); 14270ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 14271ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->inputNr = 0; 14272ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->input = NULL; 14273ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 14274ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->spaceNr = 0; 14275ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt->spaceTab != NULL) { 14276ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->spaceTab[0] = -1; 14277ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->space = &ctxt->spaceTab[0]; 14278ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 14279ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->space = NULL; 14280ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 14281ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 14282ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 14283ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->nodeNr = 0; 14284ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->node = NULL; 14285ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 14286ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->nameNr = 0; 14287ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->name = NULL; 14288ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 14289ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project DICT_FREE(ctxt->version); 14290ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->version = NULL; 14291ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project DICT_FREE(ctxt->encoding); 14292ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->encoding = NULL; 14293ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project DICT_FREE(ctxt->directory); 14294ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->directory = NULL; 14295ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project DICT_FREE(ctxt->extSubURI); 14296ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->extSubURI = NULL; 14297ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project DICT_FREE(ctxt->extSubSystem); 14298ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->extSubSystem = NULL; 14299ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt->myDoc != NULL) 14300ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFreeDoc(ctxt->myDoc); 14301ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->myDoc = NULL; 14302ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 14303ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->standalone = -1; 14304ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->hasExternalSubset = 0; 14305ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->hasPErefs = 0; 14306ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->html = 0; 14307ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->external = 0; 14308ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->instate = XML_PARSER_START; 14309ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->token = 0; 14310ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 14311ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->wellFormed = 1; 14312ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->nsWellFormed = 1; 14313ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->disableSAX = 0; 14314ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->valid = 1; 14315ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#if 0 14316ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->vctxt.userData = ctxt; 14317ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->vctxt.error = xmlParserValidityError; 14318ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->vctxt.warning = xmlParserValidityWarning; 14319ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 14320ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->record_info = 0; 14321ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->nbChars = 0; 14322ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->checkIndex = 0; 14323ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->inSubset = 0; 14324ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->errNo = XML_ERR_OK; 14325ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->depth = 0; 14326ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->charset = XML_CHAR_ENCODING_UTF8; 14327ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->catalogs = NULL; 1432860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ctxt->nbentities = 0; 1432960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ctxt->sizeentities = 0; 14330ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlInitNodeInfoSeq(&ctxt->node_seq); 14331ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 14332ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt->attsDefault != NULL) { 14333ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlHashFree(ctxt->attsDefault, (xmlHashDeallocator) xmlFree); 14334ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->attsDefault = NULL; 14335ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 14336ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt->attsSpecial != NULL) { 14337ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlHashFree(ctxt->attsSpecial, NULL); 14338ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->attsSpecial = NULL; 14339ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 14340ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 14341ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_CATALOG_ENABLED 14342ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt->catalogs != NULL) 14343ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlCatalogFreeLocal(ctxt->catalogs); 14344ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 14345ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt->lastError.code != XML_ERR_OK) 14346ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlResetError(&ctxt->lastError); 14347ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 14348ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 14349ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 14350ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlCtxtResetPush: 14351ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctxt: an XML parser context 14352ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @chunk: a pointer to an array of chars 14353ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @size: number of chars in the array 14354ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @filename: an optional file name or URI 14355ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @encoding: the document encoding, or NULL 14356ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 14357ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Reset a push parser context 14358ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 14359ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns 0 in case of success and 1 in case of error 14360ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 14361ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectint 14362ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlCtxtResetPush(xmlParserCtxtPtr ctxt, const char *chunk, 14363ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int size, const char *filename, const char *encoding) 14364ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{ 14365ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParserInputPtr inputStream; 14366ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParserInputBufferPtr buf; 14367ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlCharEncoding enc = XML_CHAR_ENCODING_NONE; 14368ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 14369ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt == NULL) 14370ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(1); 14371ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 14372ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((encoding == NULL) && (chunk != NULL) && (size >= 4)) 14373ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project enc = xmlDetectCharEncoding((const xmlChar *) chunk, size); 14374ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 14375ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project buf = xmlAllocParserInputBuffer(enc); 14376ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (buf == NULL) 14377ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(1); 14378ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 14379ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt == NULL) { 14380ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFreeParserInputBuffer(buf); 14381ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(1); 14382ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 14383ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 14384ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlCtxtReset(ctxt); 14385ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 14386ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt->pushTab == NULL) { 14387ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->pushTab = (void **) xmlMalloc(ctxt->nameMax * 3 * 14388ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project sizeof(xmlChar *)); 14389ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt->pushTab == NULL) { 14390ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlErrMemory(ctxt, NULL); 14391ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFreeParserInputBuffer(buf); 14392ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(1); 14393ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 14394ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 14395ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 14396ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (filename == NULL) { 14397ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->directory = NULL; 14398ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 14399ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->directory = xmlParserGetDirectory(filename); 14400ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 14401ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 14402ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project inputStream = xmlNewInputStream(ctxt); 14403ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (inputStream == NULL) { 14404ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFreeParserInputBuffer(buf); 14405ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(1); 14406ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 14407ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 14408ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (filename == NULL) 14409ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project inputStream->filename = NULL; 14410ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else 14411ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project inputStream->filename = (char *) 14412ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlCanonicPath((const xmlChar *) filename); 14413ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project inputStream->buf = buf; 14414ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project inputStream->base = inputStream->buf->buffer->content; 14415ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project inputStream->cur = inputStream->buf->buffer->content; 14416ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project inputStream->end = 14417ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project &inputStream->buf->buffer->content[inputStream->buf->buffer->use]; 14418ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 14419ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project inputPush(ctxt, inputStream); 14420ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 14421ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((size > 0) && (chunk != NULL) && (ctxt->input != NULL) && 14422ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (ctxt->input->buf != NULL)) { 14423ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int base = ctxt->input->base - ctxt->input->buf->buffer->content; 14424ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int cur = ctxt->input->cur - ctxt->input->base; 14425ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 14426ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParserInputBufferPush(ctxt->input->buf, size, chunk); 14427ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 14428ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->input->base = ctxt->input->buf->buffer->content + base; 14429ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->input->cur = ctxt->input->base + cur; 14430ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->input->end = 14431ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project &ctxt->input->buf->buffer->content[ctxt->input->buf->buffer-> 14432ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project use]; 14433ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef DEBUG_PUSH 14434ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlGenericError(xmlGenericErrorContext, "PP: pushed %d\n", size); 14435ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 14436ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 14437ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 14438ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (encoding != NULL) { 14439ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlCharEncodingHandlerPtr hdlr; 14440ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1444160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (ctxt->encoding != NULL) 1444260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott xmlFree((xmlChar *) ctxt->encoding); 1444360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ctxt->encoding = xmlStrdup((const xmlChar *) encoding); 1444460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott 14445ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project hdlr = xmlFindCharEncodingHandler(encoding); 14446ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (hdlr != NULL) { 14447ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSwitchToEncoding(ctxt, hdlr); 14448ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 14449ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFatalErrMsgStr(ctxt, XML_ERR_UNSUPPORTED_ENCODING, 14450ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "Unsupported encoding %s\n", BAD_CAST encoding); 14451ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 14452ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if (enc != XML_CHAR_ENCODING_NONE) { 14453ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSwitchEncoding(ctxt, enc); 14454ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 14455ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 14456ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(0); 14457ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 14458ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1445960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott 14460ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 1446160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * xmlCtxtUseOptionsInternal: 14462ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctxt: an XML parser context 14463ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @options: a combination of xmlParserOption 1446460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * @encoding: the user provided encoding to use 14465ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 14466ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Applies the options to the parser context 14467ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 14468ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns 0 in case of success, the set of unknown or unimplemented options 14469ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * in case of error. 14470ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 1447160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scottstatic int 1447260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick ScottxmlCtxtUseOptionsInternal(xmlParserCtxtPtr ctxt, int options, const char *encoding) 14473ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{ 14474ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt == NULL) 14475ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(-1); 1447660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (encoding != NULL) { 1447760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (ctxt->encoding != NULL) 1447860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott xmlFree((xmlChar *) ctxt->encoding); 1447960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ctxt->encoding = xmlStrdup((const xmlChar *) encoding); 1448060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } 14481ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (options & XML_PARSE_RECOVER) { 14482ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->recovery = 1; 14483ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project options -= XML_PARSE_RECOVER; 1448460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ctxt->options |= XML_PARSE_RECOVER; 14485ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else 14486ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->recovery = 0; 14487ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (options & XML_PARSE_DTDLOAD) { 14488ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->loadsubset = XML_DETECT_IDS; 14489ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project options -= XML_PARSE_DTDLOAD; 1449060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ctxt->options |= XML_PARSE_DTDLOAD; 14491ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else 14492ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->loadsubset = 0; 14493ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (options & XML_PARSE_DTDATTR) { 14494ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->loadsubset |= XML_COMPLETE_ATTRS; 14495ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project options -= XML_PARSE_DTDATTR; 1449660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ctxt->options |= XML_PARSE_DTDATTR; 14497ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 14498ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (options & XML_PARSE_NOENT) { 14499ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->replaceEntities = 1; 14500ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* ctxt->loadsubset |= XML_DETECT_IDS; */ 14501ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project options -= XML_PARSE_NOENT; 1450260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ctxt->options |= XML_PARSE_NOENT; 14503ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else 14504ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->replaceEntities = 0; 14505ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (options & XML_PARSE_PEDANTIC) { 14506ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->pedantic = 1; 14507ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project options -= XML_PARSE_PEDANTIC; 1450860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ctxt->options |= XML_PARSE_PEDANTIC; 14509ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else 14510ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->pedantic = 0; 14511ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (options & XML_PARSE_NOBLANKS) { 14512ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->keepBlanks = 0; 14513ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->sax->ignorableWhitespace = xmlSAX2IgnorableWhitespace; 14514ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project options -= XML_PARSE_NOBLANKS; 1451560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ctxt->options |= XML_PARSE_NOBLANKS; 14516ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else 14517ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->keepBlanks = 1; 14518ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (options & XML_PARSE_DTDVALID) { 14519ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->validate = 1; 14520ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (options & XML_PARSE_NOWARNING) 14521ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->vctxt.warning = NULL; 14522ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (options & XML_PARSE_NOERROR) 14523ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->vctxt.error = NULL; 14524ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project options -= XML_PARSE_DTDVALID; 1452560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ctxt->options |= XML_PARSE_DTDVALID; 14526ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else 14527ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->validate = 0; 14528ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (options & XML_PARSE_NOWARNING) { 14529ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->sax->warning = NULL; 14530ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project options -= XML_PARSE_NOWARNING; 14531ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 14532ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (options & XML_PARSE_NOERROR) { 14533ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->sax->error = NULL; 14534ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->sax->fatalError = NULL; 14535ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project options -= XML_PARSE_NOERROR; 14536ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 14537ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_SAX1_ENABLED 14538ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (options & XML_PARSE_SAX1) { 14539ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->sax->startElement = xmlSAX2StartElement; 14540ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->sax->endElement = xmlSAX2EndElement; 14541ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->sax->startElementNs = NULL; 14542ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->sax->endElementNs = NULL; 14543ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->sax->initialized = 1; 14544ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project options -= XML_PARSE_SAX1; 1454560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ctxt->options |= XML_PARSE_SAX1; 14546ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 14547ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif /* LIBXML_SAX1_ENABLED */ 14548ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (options & XML_PARSE_NODICT) { 14549ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->dictNames = 0; 14550ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project options -= XML_PARSE_NODICT; 1455160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ctxt->options |= XML_PARSE_NODICT; 14552ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 14553ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->dictNames = 1; 14554ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 14555ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (options & XML_PARSE_NOCDATA) { 14556ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->sax->cdataBlock = NULL; 14557ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project options -= XML_PARSE_NOCDATA; 1455860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ctxt->options |= XML_PARSE_NOCDATA; 14559ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 14560ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (options & XML_PARSE_NSCLEAN) { 14561ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->options |= XML_PARSE_NSCLEAN; 14562ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project options -= XML_PARSE_NSCLEAN; 14563ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 14564ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (options & XML_PARSE_NONET) { 14565ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->options |= XML_PARSE_NONET; 14566ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project options -= XML_PARSE_NONET; 14567ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 14568ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (options & XML_PARSE_COMPACT) { 14569ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->options |= XML_PARSE_COMPACT; 14570ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project options -= XML_PARSE_COMPACT; 14571ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1457260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (options & XML_PARSE_OLD10) { 1457360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ctxt->options |= XML_PARSE_OLD10; 1457460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott options -= XML_PARSE_OLD10; 1457560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } 1457660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (options & XML_PARSE_NOBASEFIX) { 1457760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ctxt->options |= XML_PARSE_NOBASEFIX; 1457860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott options -= XML_PARSE_NOBASEFIX; 1457960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } 1458060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (options & XML_PARSE_HUGE) { 1458160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ctxt->options |= XML_PARSE_HUGE; 1458260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott options -= XML_PARSE_HUGE; 1458360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } 1458460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (options & XML_PARSE_OLDSAX) { 1458560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ctxt->options |= XML_PARSE_OLDSAX; 1458660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott options -= XML_PARSE_OLDSAX; 1458760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } 14588df143a5041f03a22808b59c76698770b74692815Selim Gurun if (options & XML_PARSE_IGNORE_ENC) { 14589df143a5041f03a22808b59c76698770b74692815Selim Gurun ctxt->options |= XML_PARSE_IGNORE_ENC; 14590df143a5041f03a22808b59c76698770b74692815Selim Gurun options -= XML_PARSE_IGNORE_ENC; 14591df143a5041f03a22808b59c76698770b74692815Selim Gurun } 14592ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->linenumbers = 1; 14593ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (options); 14594ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 14595ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 14596ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 1459760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * xmlCtxtUseOptions: 1459860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * @ctxt: an XML parser context 1459960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * @options: a combination of xmlParserOption 1460060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * 1460160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * Applies the options to the parser context 1460260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * 1460360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * Returns 0 in case of success, the set of unknown or unimplemented options 1460460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * in case of error. 1460560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott */ 1460660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scottint 1460760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick ScottxmlCtxtUseOptions(xmlParserCtxtPtr ctxt, int options) 1460860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott{ 1460960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott return(xmlCtxtUseOptionsInternal(ctxt, options, NULL)); 1461060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott} 1461160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott 1461260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott/** 14613ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlDoRead: 14614ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctxt: an XML parser context 14615ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @URL: the base URL to use for the document 14616ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @encoding: the document encoding, or NULL 14617ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @options: a combination of xmlParserOption 14618ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @reuse: keep the context for reuse 14619ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 14620ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Common front-end for the xmlRead functions 1462160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * 14622ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the resulting document tree or NULL 14623ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 14624ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic xmlDocPtr 14625ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlDoRead(xmlParserCtxtPtr ctxt, const char *URL, const char *encoding, 14626ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int options, int reuse) 14627ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{ 14628ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlDocPtr ret; 1462960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott 1463060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott xmlCtxtUseOptionsInternal(ctxt, options, encoding); 14631ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (encoding != NULL) { 14632ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlCharEncodingHandlerPtr hdlr; 14633ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 14634ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project hdlr = xmlFindCharEncodingHandler(encoding); 14635ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (hdlr != NULL) 14636ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSwitchToEncoding(ctxt, hdlr); 14637ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 14638ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((URL != NULL) && (ctxt->input != NULL) && 14639ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (ctxt->input->filename == NULL)) 14640ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->input->filename = (char *) xmlStrdup((const xmlChar *) URL); 14641ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParseDocument(ctxt); 14642ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ctxt->wellFormed) || ctxt->recovery) 14643ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = ctxt->myDoc; 14644ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else { 14645ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = NULL; 14646ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt->myDoc != NULL) { 14647ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFreeDoc(ctxt->myDoc); 14648ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 14649ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 14650ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->myDoc = NULL; 14651ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (!reuse) { 14652ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFreeParserCtxt(ctxt); 14653ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 14654ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 14655ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (ret); 14656ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 14657ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 14658ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 14659ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlReadDoc: 14660ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @cur: a pointer to a zero terminated string 14661ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @URL: the base URL to use for the document 14662ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @encoding: the document encoding, or NULL 14663ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @options: a combination of xmlParserOption 14664ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 14665ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * parse an XML in-memory document and build a tree. 14666ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 14667ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the resulting document tree 14668ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 14669ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlDocPtr 14670ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlReadDoc(const xmlChar * cur, const char *URL, const char *encoding, int options) 14671ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{ 14672ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParserCtxtPtr ctxt; 14673ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 14674ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (cur == NULL) 14675ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (NULL); 14676ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 14677ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt = xmlCreateDocParserCtxt(cur); 14678ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt == NULL) 14679ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (NULL); 14680ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (xmlDoRead(ctxt, URL, encoding, options, 0)); 14681ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 14682ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 14683ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 14684ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlReadFile: 14685ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @filename: a file or URL 14686ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @encoding: the document encoding, or NULL 14687ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @options: a combination of xmlParserOption 14688ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 14689ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * parse an XML file from the filesystem or the network. 14690ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 14691ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the resulting document tree 14692ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 14693ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlDocPtr 14694ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlReadFile(const char *filename, const char *encoding, int options) 14695ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{ 14696ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParserCtxtPtr ctxt; 14697ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 14698ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt = xmlCreateURLParserCtxt(filename, options); 14699ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt == NULL) 14700ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (NULL); 14701ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (xmlDoRead(ctxt, NULL, encoding, options, 0)); 14702ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 14703ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 14704ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 14705ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlReadMemory: 14706ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @buffer: a pointer to a char array 14707ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @size: the size of the array 14708ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @URL: the base URL to use for the document 14709ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @encoding: the document encoding, or NULL 14710ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @options: a combination of xmlParserOption 14711ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 14712ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * parse an XML in-memory document and build a tree. 14713ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 14714ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the resulting document tree 14715ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 14716ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlDocPtr 14717ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlReadMemory(const char *buffer, int size, const char *URL, const char *encoding, int options) 14718ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{ 14719ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParserCtxtPtr ctxt; 14720ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 14721ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt = xmlCreateMemoryParserCtxt(buffer, size); 14722ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt == NULL) 14723ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (NULL); 14724ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (xmlDoRead(ctxt, URL, encoding, options, 0)); 14725ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 14726ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 14727ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 14728ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlReadFd: 14729ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @fd: an open file descriptor 14730ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @URL: the base URL to use for the document 14731ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @encoding: the document encoding, or NULL 14732ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @options: a combination of xmlParserOption 14733ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 14734ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * parse an XML from a file descriptor and build a tree. 14735ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * NOTE that the file descriptor will not be closed when the 14736ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * reader is closed or reset. 14737ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 14738ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the resulting document tree 14739ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 14740ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlDocPtr 14741ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlReadFd(int fd, const char *URL, const char *encoding, int options) 14742ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{ 14743ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParserCtxtPtr ctxt; 14744ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParserInputBufferPtr input; 14745ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParserInputPtr stream; 14746ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 14747ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (fd < 0) 14748ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (NULL); 14749ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 14750ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project input = xmlParserInputBufferCreateFd(fd, XML_CHAR_ENCODING_NONE); 14751ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (input == NULL) 14752ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (NULL); 14753ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project input->closecallback = NULL; 14754ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt = xmlNewParserCtxt(); 14755ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt == NULL) { 14756ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFreeParserInputBuffer(input); 14757ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (NULL); 14758ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 14759ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project stream = xmlNewIOInputStream(ctxt, input, XML_CHAR_ENCODING_NONE); 14760ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (stream == NULL) { 14761ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFreeParserInputBuffer(input); 14762ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFreeParserCtxt(ctxt); 14763ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (NULL); 14764ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 14765ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project inputPush(ctxt, stream); 14766ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (xmlDoRead(ctxt, URL, encoding, options, 0)); 14767ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 14768ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 14769ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 14770ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlReadIO: 14771ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ioread: an I/O read function 14772ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ioclose: an I/O close function 14773ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ioctx: an I/O handler 14774ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @URL: the base URL to use for the document 14775ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @encoding: the document encoding, or NULL 14776ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @options: a combination of xmlParserOption 14777ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 14778ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * parse an XML document from I/O functions and source and build a tree. 14779ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 14780ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the resulting document tree 14781ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 14782ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlDocPtr 14783ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlReadIO(xmlInputReadCallback ioread, xmlInputCloseCallback ioclose, 14784ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project void *ioctx, const char *URL, const char *encoding, int options) 14785ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{ 14786ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParserCtxtPtr ctxt; 14787ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParserInputBufferPtr input; 14788ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParserInputPtr stream; 14789ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 14790ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ioread == NULL) 14791ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (NULL); 14792ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 14793ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project input = xmlParserInputBufferCreateIO(ioread, ioclose, ioctx, 14794ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project XML_CHAR_ENCODING_NONE); 14795ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (input == NULL) 14796ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (NULL); 14797ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt = xmlNewParserCtxt(); 14798ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt == NULL) { 14799ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFreeParserInputBuffer(input); 14800ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (NULL); 14801ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 14802ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project stream = xmlNewIOInputStream(ctxt, input, XML_CHAR_ENCODING_NONE); 14803ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (stream == NULL) { 14804ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFreeParserInputBuffer(input); 14805ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFreeParserCtxt(ctxt); 14806ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (NULL); 14807ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 14808ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project inputPush(ctxt, stream); 14809ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (xmlDoRead(ctxt, URL, encoding, options, 0)); 14810ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 14811ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 14812ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 14813ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlCtxtReadDoc: 14814ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctxt: an XML parser context 14815ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @cur: a pointer to a zero terminated string 14816ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @URL: the base URL to use for the document 14817ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @encoding: the document encoding, or NULL 14818ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @options: a combination of xmlParserOption 14819ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 14820ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * parse an XML in-memory document and build a tree. 14821ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * This reuses the existing @ctxt parser context 14822ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 14823ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the resulting document tree 14824ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 14825ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlDocPtr 14826ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlCtxtReadDoc(xmlParserCtxtPtr ctxt, const xmlChar * cur, 14827ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const char *URL, const char *encoding, int options) 14828ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{ 14829ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParserInputPtr stream; 14830ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 14831ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (cur == NULL) 14832ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (NULL); 14833ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt == NULL) 14834ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (NULL); 14835ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 14836ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlCtxtReset(ctxt); 14837ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 14838ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project stream = xmlNewStringInputStream(ctxt, cur); 14839ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (stream == NULL) { 14840ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (NULL); 14841ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 14842ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project inputPush(ctxt, stream); 14843ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (xmlDoRead(ctxt, URL, encoding, options, 1)); 14844ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 14845ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 14846ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 14847ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlCtxtReadFile: 14848ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctxt: an XML parser context 14849ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @filename: a file or URL 14850ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @encoding: the document encoding, or NULL 14851ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @options: a combination of xmlParserOption 14852ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 14853ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * parse an XML file from the filesystem or the network. 14854ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * This reuses the existing @ctxt parser context 14855ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 14856ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the resulting document tree 14857ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 14858ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlDocPtr 14859ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlCtxtReadFile(xmlParserCtxtPtr ctxt, const char *filename, 14860ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const char *encoding, int options) 14861ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{ 14862ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParserInputPtr stream; 14863ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 14864ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (filename == NULL) 14865ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (NULL); 14866ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt == NULL) 14867ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (NULL); 14868ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 14869ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlCtxtReset(ctxt); 14870ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 14871ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project stream = xmlLoadExternalEntity(filename, NULL, ctxt); 14872ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (stream == NULL) { 14873ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (NULL); 14874ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 14875ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project inputPush(ctxt, stream); 14876ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (xmlDoRead(ctxt, NULL, encoding, options, 1)); 14877ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 14878ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 14879ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 14880ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlCtxtReadMemory: 14881ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctxt: an XML parser context 14882ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @buffer: a pointer to a char array 14883ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @size: the size of the array 14884ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @URL: the base URL to use for the document 14885ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @encoding: the document encoding, or NULL 14886ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @options: a combination of xmlParserOption 14887ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 14888ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * parse an XML in-memory document and build a tree. 14889ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * This reuses the existing @ctxt parser context 14890ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 14891ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the resulting document tree 14892ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 14893ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlDocPtr 14894ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlCtxtReadMemory(xmlParserCtxtPtr ctxt, const char *buffer, int size, 14895ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const char *URL, const char *encoding, int options) 14896ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{ 14897ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParserInputBufferPtr input; 14898ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParserInputPtr stream; 14899ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 14900ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt == NULL) 14901ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (NULL); 14902ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (buffer == NULL) 14903ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (NULL); 14904ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 14905ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlCtxtReset(ctxt); 14906ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 14907ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project input = xmlParserInputBufferCreateMem(buffer, size, XML_CHAR_ENCODING_NONE); 14908ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (input == NULL) { 14909ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 14910ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 14911ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 14912ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project stream = xmlNewIOInputStream(ctxt, input, XML_CHAR_ENCODING_NONE); 14913ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (stream == NULL) { 14914ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFreeParserInputBuffer(input); 14915ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 14916ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 14917ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 14918ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project inputPush(ctxt, stream); 14919ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (xmlDoRead(ctxt, URL, encoding, options, 1)); 14920ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 14921ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 14922ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 14923ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlCtxtReadFd: 14924ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctxt: an XML parser context 14925ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @fd: an open file descriptor 14926ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @URL: the base URL to use for the document 14927ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @encoding: the document encoding, or NULL 14928ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @options: a combination of xmlParserOption 14929ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 14930ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * parse an XML from a file descriptor and build a tree. 14931ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * This reuses the existing @ctxt parser context 14932ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * NOTE that the file descriptor will not be closed when the 14933ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * reader is closed or reset. 14934ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 14935ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the resulting document tree 14936ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 14937ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlDocPtr 14938ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlCtxtReadFd(xmlParserCtxtPtr ctxt, int fd, 14939ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const char *URL, const char *encoding, int options) 14940ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{ 14941ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParserInputBufferPtr input; 14942ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParserInputPtr stream; 14943ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 14944ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (fd < 0) 14945ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (NULL); 14946ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt == NULL) 14947ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (NULL); 14948ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 14949ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlCtxtReset(ctxt); 14950ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 14951ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 14952ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project input = xmlParserInputBufferCreateFd(fd, XML_CHAR_ENCODING_NONE); 14953ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (input == NULL) 14954ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (NULL); 14955ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project input->closecallback = NULL; 14956ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project stream = xmlNewIOInputStream(ctxt, input, XML_CHAR_ENCODING_NONE); 14957ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (stream == NULL) { 14958ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFreeParserInputBuffer(input); 14959ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (NULL); 14960ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 14961ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project inputPush(ctxt, stream); 14962ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (xmlDoRead(ctxt, URL, encoding, options, 1)); 14963ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 14964ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 14965ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 14966ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlCtxtReadIO: 14967ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctxt: an XML parser context 14968ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ioread: an I/O read function 14969ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ioclose: an I/O close function 14970ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ioctx: an I/O handler 14971ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @URL: the base URL to use for the document 14972ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @encoding: the document encoding, or NULL 14973ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @options: a combination of xmlParserOption 14974ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 14975ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * parse an XML document from I/O functions and source and build a tree. 14976ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * This reuses the existing @ctxt parser context 14977ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 14978ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the resulting document tree 14979ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 14980ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlDocPtr 14981ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlCtxtReadIO(xmlParserCtxtPtr ctxt, xmlInputReadCallback ioread, 14982ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlInputCloseCallback ioclose, void *ioctx, 14983ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const char *URL, 14984ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const char *encoding, int options) 14985ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{ 14986ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParserInputBufferPtr input; 14987ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParserInputPtr stream; 14988ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 14989ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ioread == NULL) 14990ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (NULL); 14991ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt == NULL) 14992ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (NULL); 14993ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 14994ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlCtxtReset(ctxt); 14995ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 14996ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project input = xmlParserInputBufferCreateIO(ioread, ioclose, ioctx, 14997ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project XML_CHAR_ENCODING_NONE); 14998ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (input == NULL) 14999ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (NULL); 15000ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project stream = xmlNewIOInputStream(ctxt, input, XML_CHAR_ENCODING_NONE); 15001ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (stream == NULL) { 15002ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFreeParserInputBuffer(input); 15003ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (NULL); 15004ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 15005ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project inputPush(ctxt, stream); 15006ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (xmlDoRead(ctxt, URL, encoding, options, 1)); 15007ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 15008ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 15009ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#define bottom_parser 15010ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#include "elfgcchack.h" 15011