mirror of
https://github.com/Kitware/CMake.git
synced 2026-01-20 13:40:24 -06:00
expat 2020-10-03 (162e16b0)
Code extracted from:
https://github.com/libexpat/libexpat.git
at commit 162e16b0a7392a20ecdb2a4d0d13b5a03a7b2380 (R_2_2_10).
This commit is contained in:
committed by
Brad King
parent
1712885b4f
commit
79d5048a80
2
COPYING
2
COPYING
@@ -1,5 +1,5 @@
|
||||
Copyright (c) 1998-2000 Thai Open Source Software Center Ltd and Clark Cooper
|
||||
Copyright (c) 2001-2017 Expat maintainers
|
||||
Copyright (c) 2001-2019 Expat maintainers
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of this software and associated documentation files (the
|
||||
|
||||
12
README.md
12
README.md
@@ -3,7 +3,7 @@
|
||||
[](https://repology.org/metapackage/expat/versions)
|
||||
|
||||
|
||||
# Expat, Release 2.2.9
|
||||
# Expat, Release 2.2.10
|
||||
|
||||
This is Expat, a C library for parsing XML, started by
|
||||
[James Clark](https://en.wikipedia.org/wiki/James_Clark_(programmer)) in 1997.
|
||||
@@ -16,9 +16,9 @@ structures for which you may register handlers.
|
||||
Expat supports the following compilers:
|
||||
- GNU GCC >=4.5
|
||||
- LLVM Clang >=3.5
|
||||
- Microsoft Visual Studio >=8.0/2005
|
||||
- Microsoft Visual Studio >=9.0/2008
|
||||
|
||||
Windows users should use the
|
||||
Windows users can use the
|
||||
[`expat_win32` package](https://sourceforge.net/projects/expat/files/expat_win32/),
|
||||
which includes both precompiled libraries and executables, and source code for
|
||||
developers.
|
||||
@@ -156,6 +156,9 @@ EXPAT_BUILD_EXAMPLES:BOOL=ON
|
||||
// build fuzzers for the expat library
|
||||
EXPAT_BUILD_FUZZERS:BOOL=OFF
|
||||
|
||||
// build pkg-config file
|
||||
EXPAT_BUILD_PKGCONFIG:BOOL=ON
|
||||
|
||||
// build the tests for expat library
|
||||
EXPAT_BUILD_TESTS:BOOL=ON
|
||||
|
||||
@@ -171,6 +174,9 @@ EXPAT_ENABLE_INSTALL:BOOL=ON
|
||||
// Use /MT flag (static CRT) when compiling in MSVC
|
||||
EXPAT_MSVC_STATIC_CRT:BOOL=OFF
|
||||
|
||||
// build fuzzers via ossfuzz for the expat library
|
||||
EXPAT_OSSFUZZ_BUILD:BOOL=OFF
|
||||
|
||||
// build a shared expat library
|
||||
EXPAT_SHARED_LIBS:BOOL=ON
|
||||
|
||||
|
||||
@@ -318,7 +318,7 @@ typedef void(XMLCALL *XML_EndDoctypeDeclHandler)(void *userData);
|
||||
|
||||
For internal entities (<!ENTITY foo "bar">), value will
|
||||
be non-NULL and systemId, publicID, and notationName will be NULL.
|
||||
The value string is NOT nul-terminated; the length is provided in
|
||||
The value string is NOT null-terminated; the length is provided in
|
||||
the value_length argument. Since it is legal to have zero-length
|
||||
values, do not use this argument to test for internal entities.
|
||||
|
||||
@@ -707,7 +707,7 @@ XML_GetBase(XML_Parser parser);
|
||||
/* Returns the number of the attribute/value pairs passed in last call
|
||||
to the XML_StartElementHandler that were specified in the start-tag
|
||||
rather than defaulted. Each attribute/value pair counts as 2; thus
|
||||
this correspondds to an index into the atts array passed to the
|
||||
this corresponds to an index into the atts array passed to the
|
||||
XML_StartElementHandler. Returns -1 if parser == NULL.
|
||||
*/
|
||||
XMLPARSEAPI(int)
|
||||
@@ -716,7 +716,7 @@ XML_GetSpecifiedAttributeCount(XML_Parser parser);
|
||||
/* Returns the index of the ID attribute passed in the last call to
|
||||
XML_StartElementHandler, or -1 if there is no ID attribute or
|
||||
parser == NULL. Each attribute/value pair counts as 2; thus this
|
||||
correspondds to an index into the atts array passed to the
|
||||
corresponds to an index into the atts array passed to the
|
||||
XML_StartElementHandler.
|
||||
*/
|
||||
XMLPARSEAPI(int)
|
||||
@@ -1015,7 +1015,7 @@ XML_GetFeatureList(void);
|
||||
*/
|
||||
#define XML_MAJOR_VERSION 2
|
||||
#define XML_MINOR_VERSION 2
|
||||
#define XML_MICRO_VERSION 9
|
||||
#define XML_MICRO_VERSION 10
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/* f519f27c7c3b79fee55aeb8b1e53b7384b079d9118bf3a62eb3a60986a6742f2 (2.2.9+)
|
||||
/* 5cd169f2942b85c05e0b1b96f9990f91ac3d07e470ad7ce906ac8590c8ed4f35 (2.2.10+)
|
||||
__ __ _
|
||||
___\ \/ /_ __ __ _| |_
|
||||
/ _ \\ /| '_ \ / _` | __|
|
||||
@@ -48,6 +48,17 @@
|
||||
#include <stdio.h> /* fprintf */
|
||||
#include <stdlib.h> /* getenv, rand_s */
|
||||
|
||||
#if defined(_WIN32) && defined(_MSC_VER) && (_MSC_VER < 1600)
|
||||
/* vs2008/9.0 and earlier lack stdint.h; _MSC_VER 1600 is vs2010/10.0 */
|
||||
# if defined(_WIN64)
|
||||
typedef unsigned __int64 uintptr_t;
|
||||
# else
|
||||
typedef unsigned __int32 uintptr_t;
|
||||
# endif
|
||||
#else
|
||||
# include <stdint.h> /* uintptr_t */
|
||||
#endif
|
||||
|
||||
#ifdef _WIN32
|
||||
# define getpid GetCurrentProcessId
|
||||
#else
|
||||
@@ -99,14 +110,14 @@
|
||||
enabled. For end user security, that is probably not what you want. \
|
||||
\
|
||||
Your options include: \
|
||||
* Linux + glibc >=2.25 (getrandom): HAVE_GETRANDOM, \
|
||||
* Linux + glibc <2.25 (syscall SYS_getrandom): HAVE_SYSCALL_GETRANDOM, \
|
||||
* Linux >=3.17 + glibc >=2.25 (getrandom): HAVE_GETRANDOM, \
|
||||
* Linux >=3.17 + glibc (including <2.25) (syscall SYS_getrandom): HAVE_SYSCALL_GETRANDOM, \
|
||||
* BSD / macOS >=10.7 (arc4random_buf): HAVE_ARC4RANDOM_BUF, \
|
||||
* BSD / macOS <10.7 (arc4random): HAVE_ARC4RANDOM, \
|
||||
* BSD / macOS (including <10.7) (arc4random): HAVE_ARC4RANDOM, \
|
||||
* libbsd (arc4random_buf): HAVE_ARC4RANDOM_BUF + HAVE_LIBBSD, \
|
||||
* libbsd (arc4random): HAVE_ARC4RANDOM + HAVE_LIBBSD, \
|
||||
* Linux / BSD / macOS (/dev/urandom): XML_DEV_URANDOM \
|
||||
* Windows (rand_s): _WIN32. \
|
||||
* Linux (including <3.17) / BSD / macOS (including <10.7) (/dev/urandom): XML_DEV_URANDOM, \
|
||||
* Windows >=Vista (rand_s): _WIN32. \
|
||||
\
|
||||
If insist on not using any of these, bypass this error by defining \
|
||||
XML_POOR_ENTROPY; you have been warned. \
|
||||
@@ -121,9 +132,7 @@
|
||||
# define XmlGetInternalEncoding XmlGetUtf16InternalEncoding
|
||||
# define XmlGetInternalEncodingNS XmlGetUtf16InternalEncodingNS
|
||||
# define XmlEncode XmlUtf16Encode
|
||||
/* Using pointer subtraction to convert to integer type. */
|
||||
# define MUST_CONVERT(enc, s) \
|
||||
(! (enc)->isUtf16 || (((char *)(s) - (char *)NULL) & 1))
|
||||
# define MUST_CONVERT(enc, s) (! (enc)->isUtf16 || (((uintptr_t)(s)) & 1))
|
||||
typedef unsigned short ICHAR;
|
||||
#else
|
||||
# define XML_ENCODE_MAX XML_UTF8_ENCODE_MAX
|
||||
@@ -736,6 +745,15 @@ writeRandomBytes_arc4random(void *target, size_t count) {
|
||||
|
||||
#ifdef _WIN32
|
||||
|
||||
/* Provide declaration of rand_s() for MinGW-32 (not 64, which has it),
|
||||
as it didn't declare it in its header prior to version 5.3.0 of its
|
||||
runtime package (mingwrt, containing stdlib.h). The upstream fix
|
||||
was introduced at https://osdn.net/projects/mingw/ticket/39658 . */
|
||||
# if defined(__MINGW32__) && defined(__MINGW32_VERSION) \
|
||||
&& __MINGW32_VERSION < 5003000L && ! defined(__MINGW64_VERSION_MAJOR)
|
||||
__declspec(dllimport) int rand_s(unsigned int *);
|
||||
# endif
|
||||
|
||||
/* Obtain entropy on Windows using the rand_s() function which
|
||||
* generates cryptographically secure random numbers. Internally it
|
||||
* uses RtlGenRandom API which is present in Windows XP and later.
|
||||
@@ -1401,6 +1419,7 @@ XML_UseForeignDTD(XML_Parser parser, XML_Bool useDTD) {
|
||||
parser->m_useForeignDTD = useDTD;
|
||||
return XML_ERROR_NONE;
|
||||
#else
|
||||
UNUSED_P(useDTD);
|
||||
return XML_ERROR_FEATURE_REQUIRES_XML_DTD;
|
||||
#endif
|
||||
}
|
||||
@@ -1782,7 +1801,7 @@ XML_Parse(XML_Parser parser, const char *s, int len, int isFinal) {
|
||||
int nLeftOver;
|
||||
enum XML_Status result;
|
||||
/* Detect overflow (a+b > MAX <==> b > MAX-a) */
|
||||
if (len > ((XML_Size)-1) / 2 - parser->m_parseEndByteIndex) {
|
||||
if ((XML_Size)len > ((XML_Size)-1) / 2 - parser->m_parseEndByteIndex) {
|
||||
parser->m_errorCode = XML_ERROR_NO_MEMORY;
|
||||
parser->m_eventPtr = parser->m_eventEndPtr = NULL;
|
||||
parser->m_processor = errorProcessor;
|
||||
@@ -2157,7 +2176,7 @@ XML_GetInputContext(XML_Parser parser, int *offset, int *size) {
|
||||
(void)offset;
|
||||
(void)size;
|
||||
#endif /* defined XML_CONTEXT_BYTES */
|
||||
return (char *)0;
|
||||
return (const char *)0;
|
||||
}
|
||||
|
||||
XML_Size XMLCALL
|
||||
@@ -3573,7 +3592,7 @@ doCdataSection(XML_Parser parser, const ENCODING *enc, const char **startPtr,
|
||||
*startPtr = NULL;
|
||||
|
||||
for (;;) {
|
||||
const char *next;
|
||||
const char *next = s; /* in case of XML_TOK_NONE or XML_TOK_PARTIAL */
|
||||
int tok = XmlCdataSectionTok(enc, s, end, &next);
|
||||
*eventEndPP = next;
|
||||
switch (tok) {
|
||||
@@ -3691,7 +3710,7 @@ ignoreSectionProcessor(XML_Parser parser, const char *start, const char *end,
|
||||
static enum XML_Error
|
||||
doIgnoreSection(XML_Parser parser, const ENCODING *enc, const char **startPtr,
|
||||
const char *end, const char **nextPtr, XML_Bool haveMore) {
|
||||
const char *next;
|
||||
const char *next = *startPtr; /* in case of XML_TOK_NONE or XML_TOK_PARTIAL */
|
||||
int tok;
|
||||
const char *s = *startPtr;
|
||||
const char **eventPP;
|
||||
@@ -5172,8 +5191,8 @@ processInternalEntity(XML_Parser parser, ENTITY *entity, XML_Bool betweenDecl) {
|
||||
openEntity->betweenDecl = betweenDecl;
|
||||
openEntity->internalEventPtr = NULL;
|
||||
openEntity->internalEventEndPtr = NULL;
|
||||
textStart = (char *)entity->textPtr;
|
||||
textEnd = (char *)(entity->textPtr + entity->textLen);
|
||||
textStart = (const char *)entity->textPtr;
|
||||
textEnd = (const char *)(entity->textPtr + entity->textLen);
|
||||
/* Set a safe default value in case 'next' does not get set */
|
||||
next = textStart;
|
||||
|
||||
@@ -5215,8 +5234,8 @@ internalEntityProcessor(XML_Parser parser, const char *s, const char *end,
|
||||
return XML_ERROR_UNEXPECTED_STATE;
|
||||
|
||||
entity = openEntity->entity;
|
||||
textStart = ((char *)entity->textPtr) + entity->processed;
|
||||
textEnd = (char *)(entity->textPtr + entity->textLen);
|
||||
textStart = ((const char *)entity->textPtr) + entity->processed;
|
||||
textEnd = (const char *)(entity->textPtr + entity->textLen);
|
||||
/* Set a safe default value in case 'next' does not get set */
|
||||
next = textStart;
|
||||
|
||||
@@ -5236,7 +5255,7 @@ internalEntityProcessor(XML_Parser parser, const char *s, const char *end,
|
||||
return result;
|
||||
else if (textEnd != next
|
||||
&& parser->m_parsingStatus.parsing == XML_SUSPENDED) {
|
||||
entity->processed = (int)(next - (char *)entity->textPtr);
|
||||
entity->processed = (int)(next - (const char *)entity->textPtr);
|
||||
return result;
|
||||
} else {
|
||||
entity->open = XML_FALSE;
|
||||
@@ -5431,8 +5450,8 @@ appendAttributeValue(XML_Parser parser, const ENCODING *enc, XML_Bool isCdata,
|
||||
const XML_Char *textEnd = entity->textPtr + entity->textLen;
|
||||
entity->open = XML_TRUE;
|
||||
result = appendAttributeValue(parser, parser->m_internalEncoding,
|
||||
isCdata, (char *)entity->textPtr,
|
||||
(char *)textEnd, pool);
|
||||
isCdata, (const char *)entity->textPtr,
|
||||
(const char *)textEnd, pool);
|
||||
entity->open = XML_FALSE;
|
||||
if (result)
|
||||
return result;
|
||||
@@ -5531,8 +5550,8 @@ storeEntityValue(XML_Parser parser, const ENCODING *enc,
|
||||
} else {
|
||||
entity->open = XML_TRUE;
|
||||
result = storeEntityValue(
|
||||
parser, parser->m_internalEncoding, (char *)entity->textPtr,
|
||||
(char *)(entity->textPtr + entity->textLen));
|
||||
parser, parser->m_internalEncoding, (const char *)entity->textPtr,
|
||||
(const char *)(entity->textPtr + entity->textLen));
|
||||
entity->open = XML_FALSE;
|
||||
if (result)
|
||||
goto endEntityValue;
|
||||
@@ -6487,7 +6506,7 @@ hashTableInit(HASH_TABLE *p, const XML_Memory_Handling_Suite *ms) {
|
||||
static void FASTCALL
|
||||
hashTableIterInit(HASH_TABLE_ITER *iter, const HASH_TABLE *table) {
|
||||
iter->p = table->v;
|
||||
iter->end = iter->p + table->size;
|
||||
iter->end = iter->p ? iter->p + table->size : NULL;
|
||||
}
|
||||
|
||||
static NAMED *FASTCALL
|
||||
|
||||
@@ -1220,6 +1220,8 @@ common(PROLOG_STATE *state, int tok) {
|
||||
#ifdef XML_DTD
|
||||
if (! state->documentEntity && tok == XML_TOK_PARAM_ENTITY_REF)
|
||||
return XML_ROLE_INNER_PARAM_ENTITY_REF;
|
||||
#else
|
||||
UNUSED_P(tok);
|
||||
#endif
|
||||
state->handler = error;
|
||||
return XML_ROLE_ERROR;
|
||||
|
||||
@@ -589,13 +589,13 @@ static const struct normal_encoding ascii_encoding
|
||||
static int PTRFASTCALL
|
||||
unicode_byte_type(char hi, char lo) {
|
||||
switch ((unsigned char)hi) {
|
||||
/* 0xD800–0xDBFF first 16-bit code unit or high surrogate (W1) */
|
||||
/* 0xD800-0xDBFF first 16-bit code unit or high surrogate (W1) */
|
||||
case 0xD8:
|
||||
case 0xD9:
|
||||
case 0xDA:
|
||||
case 0xDB:
|
||||
return BT_LEAD4;
|
||||
/* 0xDC00–0xDFFF second 16-bit code unit or low surrogate (W2) */
|
||||
/* 0xDC00-0xDFFF second 16-bit code unit or low surrogate (W2) */
|
||||
case 0xDC:
|
||||
case 0xDD:
|
||||
case 0xDE:
|
||||
|
||||
@@ -1768,13 +1768,14 @@ PREFIX(updatePosition)(const ENCODING *enc, const char *ptr, const char *end,
|
||||
# define LEAD_CASE(n) \
|
||||
case BT_LEAD##n: \
|
||||
ptr += n; \
|
||||
pos->columnNumber++; \
|
||||
break;
|
||||
LEAD_CASE(2)
|
||||
LEAD_CASE(3)
|
||||
LEAD_CASE(4)
|
||||
# undef LEAD_CASE
|
||||
case BT_LF:
|
||||
pos->columnNumber = (XML_Size)-1;
|
||||
pos->columnNumber = 0;
|
||||
pos->lineNumber++;
|
||||
ptr += MINBPC(enc);
|
||||
break;
|
||||
@@ -1783,13 +1784,13 @@ PREFIX(updatePosition)(const ENCODING *enc, const char *ptr, const char *end,
|
||||
ptr += MINBPC(enc);
|
||||
if (HAS_CHAR(enc, ptr, end) && BYTE_TYPE(enc, ptr) == BT_LF)
|
||||
ptr += MINBPC(enc);
|
||||
pos->columnNumber = (XML_Size)-1;
|
||||
pos->columnNumber = 0;
|
||||
break;
|
||||
default:
|
||||
ptr += MINBPC(enc);
|
||||
pos->columnNumber++;
|
||||
break;
|
||||
}
|
||||
pos->columnNumber++;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user