1*9ceaae4aSArrigo Marchioridiff -ru misc/expat-2.5.0/lib/makefile.mk misc/build/expat-2.5.0/lib/makefile.mk 2*9ceaae4aSArrigo Marchiori--- misc/expat-2.5.0/lib/makefile.mk 2023-02-06 23:22:07.391327553 +0100 3*9ceaae4aSArrigo Marchiori+++ misc/build/expat-2.5.0/lib/makefile.mk 2023-02-06 23:22:40.584115842 +0100 4*9ceaae4aSArrigo Marchiori@@ -1,1 +1,79 @@ 5*9ceaae4aSArrigo Marchiori-dummy 6*9ceaae4aSArrigo Marchiori+#************************************************************** 7*9ceaae4aSArrigo Marchiori+# 8*9ceaae4aSArrigo Marchiori+# Licensed to the Apache Software Foundation (ASF) under one 9*9ceaae4aSArrigo Marchiori+# or more contributor license agreements. See the NOTICE file 10*9ceaae4aSArrigo Marchiori+# distributed with this work for additional information 11*9ceaae4aSArrigo Marchiori+# regarding copyright ownership. The ASF licenses this file 12*9ceaae4aSArrigo Marchiori+# to you under the Apache License, Version 2.0 (the 13*9ceaae4aSArrigo Marchiori+# "License"); you may not use this file except in compliance 14*9ceaae4aSArrigo Marchiori+# with the License. You may obtain a copy of the License at 15*9ceaae4aSArrigo Marchiori+# 16*9ceaae4aSArrigo Marchiori+# http://www.apache.org/licenses/LICENSE-2.0 17*9ceaae4aSArrigo Marchiori+# 18*9ceaae4aSArrigo Marchiori+# Unless required by applicable law or agreed to in writing, 19*9ceaae4aSArrigo Marchiori+# software distributed under the License is distributed on an 20*9ceaae4aSArrigo Marchiori+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 21*9ceaae4aSArrigo Marchiori+# KIND, either express or implied. See the License for the 22*9ceaae4aSArrigo Marchiori+# specific language governing permissions and limitations 23*9ceaae4aSArrigo Marchiori+# under the License. 24*9ceaae4aSArrigo Marchiori+# 25*9ceaae4aSArrigo Marchiori+#************************************************************** 26*9ceaae4aSArrigo Marchiori+PRJ=..$/..$/..$/..$/.. 27*9ceaae4aSArrigo Marchiori+ 28*9ceaae4aSArrigo Marchiori+PRJNAME=expat 29*9ceaae4aSArrigo Marchiori+TARGET=expat 30*9ceaae4aSArrigo Marchiori+LIBTARGET=NO 31*9ceaae4aSArrigo Marchiori+EXTERNAL_WARNINGS_NOT_ERRORS=TRUE 32*9ceaae4aSArrigo Marchiori+ 33*9ceaae4aSArrigo Marchiori+# --- Settings ----------------------------------------------------- 34*9ceaae4aSArrigo Marchiori+.INCLUDE : settings.mk 35*9ceaae4aSArrigo Marchiori+# --- Files -------------------------------------------------------- 36*9ceaae4aSArrigo Marchiori+ 37*9ceaae4aSArrigo Marchiori+CFLAGS+=-I.. 38*9ceaae4aSArrigo Marchiori+ 39*9ceaae4aSArrigo Marchiori+.IF "$(OS)"=="WNT" 40*9ceaae4aSArrigo Marchiori+CDEFS+=-DWIN32 41*9ceaae4aSArrigo Marchiori+.ELSE 42*9ceaae4aSArrigo Marchiori+CDEFS+=-DHAVE_EXPAT_CONFIG_H 43*9ceaae4aSArrigo Marchiori+.ENDIF 44*9ceaae4aSArrigo Marchiori+ 45*9ceaae4aSArrigo Marchiori+.IF "$(OS)"=="MACOSX" && "$(SYSBASE)"!="" 46*9ceaae4aSArrigo Marchiori+CDEFS+=-DHAVE_MEMMOVE -DHAVE_BCOPY 47*9ceaae4aSArrigo Marchiori+.ENDIF # "$(OS)"=="MACOSX" 48*9ceaae4aSArrigo Marchiori+ 49*9ceaae4aSArrigo Marchiori+SECOND_BUILD=UNICODE 50*9ceaae4aSArrigo Marchiori+UNICODE_SLOFILES=$(SLO)$/xmlparse.obj 51*9ceaae4aSArrigo Marchiori+UNICODECDEFS+=-DXML_UNICODE 52*9ceaae4aSArrigo Marchiori+ 53*9ceaae4aSArrigo Marchiori+LIB1ARCHIV=$(LB)$/libascii_$(TARGET)_xmlparse.a 54*9ceaae4aSArrigo Marchiori+LIB1TARGET=$(SLB)$/ascii_$(TARGET)_xmlparse.lib 55*9ceaae4aSArrigo Marchiori+LIB1OBJFILES=$(SLO)$/xmlparse.obj 56*9ceaae4aSArrigo Marchiori+ 57*9ceaae4aSArrigo Marchiori+LIB2ARCHIV=$(LB)$/lib$(TARGET)_xmlparse.a 58*9ceaae4aSArrigo Marchiori+LIB2TARGET=$(SLB)$/$(TARGET)_xmlparse.lib 59*9ceaae4aSArrigo Marchiori+LIB2OBJFILES =$(REAL_UNICODE_SLOFILES) 60*9ceaae4aSArrigo Marchiori+ 61*9ceaae4aSArrigo Marchiori+LIB3ARCHIV=$(LB)$/lib$(TARGET)_xmltok.a 62*9ceaae4aSArrigo Marchiori+LIB3TARGET=$(SLB)$/$(TARGET)_xmltok.lib 63*9ceaae4aSArrigo Marchiori+LIB3OBJFILES=$(SLO)$/xmlrole.obj $(SLO)$/xmltok.obj 64*9ceaae4aSArrigo Marchiori+ 65*9ceaae4aSArrigo Marchiori+.IF "$(BUILD_X64)"!="" 66*9ceaae4aSArrigo Marchiori+# ---------------- X64 stuff special --------------------- 67*9ceaae4aSArrigo Marchiori+# use UNICODE only because shell/shlxthandler 68*9ceaae4aSArrigo Marchiori+# doesn't link against ascii_expat_xmlparse 69*9ceaae4aSArrigo Marchiori+#--------------------------------------------------------- 70*9ceaae4aSArrigo Marchiori+SLOFILES_X64=$(SLO_X64)$/xmlparse.obj \ 71*9ceaae4aSArrigo Marchiori+ $(SLO_X64)$/xmlrole.obj \ 72*9ceaae4aSArrigo Marchiori+ $(SLO_X64)$/xmltok.obj 73*9ceaae4aSArrigo Marchiori+CDEFS_X64+=-DXML_UNICODE -DWIN32 74*9ceaae4aSArrigo Marchiori+CFLAGS_X64+=-I.. 75*9ceaae4aSArrigo Marchiori+LIB1TARGET_X64=$(SLB_X64)$/$(TARGET)_xmlparse.lib 76*9ceaae4aSArrigo Marchiori+LIB1OBJFILES_X64=$(SLO_X64)$/xmlparse.obj 77*9ceaae4aSArrigo Marchiori+LIB2TARGET_X64=$(SLB_X64)$/$(TARGET)_xmltok.lib 78*9ceaae4aSArrigo Marchiori+LIB2OBJFILES_X64=$(SLO_X64)$/xmlrole.obj $(SLO_X64)$/xmltok.obj 79*9ceaae4aSArrigo Marchiori+.ENDIF # "$(BUILD_X64)"!="" 80*9ceaae4aSArrigo Marchiori+ 81*9ceaae4aSArrigo Marchiori+# --- Targets ------------------------------------------------------ 82*9ceaae4aSArrigo Marchiori+.INCLUDE : set_wntx64.mk 83*9ceaae4aSArrigo Marchiori+.INCLUDE : target.mk 84*9ceaae4aSArrigo Marchiori+.INCLUDE : tg_wntx64.mk 85*9ceaae4aSArrigo Marchioridiff -ru misc/expat-2.5.0/Changes misc/build/expat-2.5.0/Changes 86*9ceaae4aSArrigo Marchiori--- misc/expat-2.5.0/Changes 2022-10-25 17:09:08.000000000 +0200 87*9ceaae4aSArrigo Marchiori+++ misc/build/expat-2.5.0/Changes 2023-02-06 23:22:40.572115558 +0100 88*9ceaae4aSArrigo Marchiori@@ -2,6 +2,9 @@ 89*9ceaae4aSArrigo Marchiori https://github.com/libexpat/libexpat/labels/help%20wanted 90*9ceaae4aSArrigo Marchiori If you can help, please get in touch. Thanks! 91*9ceaae4aSArrigo Marchiori 92*9ceaae4aSArrigo Marchiori+Release 2.5.0-aoo Sat February 04 2023 93*9ceaae4aSArrigo Marchiori+ Adapted to AOO sources. 94*9ceaae4aSArrigo Marchiori+ 95*9ceaae4aSArrigo Marchiori Release 2.5.0 Tue October 25 2022 96*9ceaae4aSArrigo Marchiori Security fixes: 97*9ceaae4aSArrigo Marchiori #616 #649 #650 CVE-2022-43680 -- Fix heap use-after-free after overeager 98*9ceaae4aSArrigo Marchioridiff -ru misc/expat-2.5.0/expat_config.h misc/build/expat-2.5.0/expat_config.h 99*9ceaae4aSArrigo Marchiori--- misc/expat-2.5.0/expat_config.h 2022-10-25 17:34:58.000000000 +0200 100*9ceaae4aSArrigo Marchiori+++ misc/build/expat-2.5.0/expat_config.h 2023-02-06 23:22:40.604116318 +0100 101*9ceaae4aSArrigo Marchiori@@ -14,7 +14,7 @@ 102*9ceaae4aSArrigo Marchiori /* #undef HAVE_ARC4RANDOM */ 103*9ceaae4aSArrigo Marchiori 104*9ceaae4aSArrigo Marchiori /* Define to 1 if you have the `arc4random_buf' function. */ 105*9ceaae4aSArrigo Marchiori-#define HAVE_ARC4RANDOM_BUF 1 106*9ceaae4aSArrigo Marchiori+/* #undef HAVE_ARC4RANDOM_BUF */ 107*9ceaae4aSArrigo Marchiori 108*9ceaae4aSArrigo Marchiori /* Define to 1 if you have the <dlfcn.h> header file. */ 109*9ceaae4aSArrigo Marchiori #define HAVE_DLFCN_H 1 110*9ceaae4aSArrigo Marchiori@@ -74,13 +74,13 @@ 111*9ceaae4aSArrigo Marchiori #define PACKAGE "expat" 112*9ceaae4aSArrigo Marchiori 113*9ceaae4aSArrigo Marchiori /* Define to the address where bug reports for this package should be sent. */ 114*9ceaae4aSArrigo Marchiori-#define PACKAGE_BUGREPORT "expat-bugs@libexpat.org" 115*9ceaae4aSArrigo Marchiori+#define PACKAGE_BUGREPORT "dev@openoffice.apache.org" 116*9ceaae4aSArrigo Marchiori 117*9ceaae4aSArrigo Marchiori /* Define to the full name of this package. */ 118*9ceaae4aSArrigo Marchiori #define PACKAGE_NAME "expat" 119*9ceaae4aSArrigo Marchiori 120*9ceaae4aSArrigo Marchiori /* Define to the full name and version of this package. */ 121*9ceaae4aSArrigo Marchiori-#define PACKAGE_STRING "expat 2.5.0" 122*9ceaae4aSArrigo Marchiori+#define PACKAGE_STRING "expat 2.5.0-aoo" 123*9ceaae4aSArrigo Marchiori 124*9ceaae4aSArrigo Marchiori /* Define to the one symbol short name of this package. */ 125*9ceaae4aSArrigo Marchiori #define PACKAGE_TARNAME "expat" 126*9ceaae4aSArrigo Marchiori@@ -89,7 +89,7 @@ 127*9ceaae4aSArrigo Marchiori #define PACKAGE_URL "" 128*9ceaae4aSArrigo Marchiori 129*9ceaae4aSArrigo Marchiori /* Define to the version of this package. */ 130*9ceaae4aSArrigo Marchiori-#define PACKAGE_VERSION "2.5.0" 131*9ceaae4aSArrigo Marchiori+#define PACKAGE_VERSION "2.5.0-aoo" 132*9ceaae4aSArrigo Marchiori 133*9ceaae4aSArrigo Marchiori /* Define to 1 if all of the C90 standard headers exist (not just the ones 134*9ceaae4aSArrigo Marchiori required in a freestanding environment). This macro is provided for 135*9ceaae4aSArrigo Marchiori@@ -97,7 +97,7 @@ 136*9ceaae4aSArrigo Marchiori #define STDC_HEADERS 1 137*9ceaae4aSArrigo Marchiori 138*9ceaae4aSArrigo Marchiori /* Version number of package */ 139*9ceaae4aSArrigo Marchiori-#define VERSION "2.5.0" 140*9ceaae4aSArrigo Marchiori+#define VERSION "2.5.0-aoo" 141*9ceaae4aSArrigo Marchiori 142*9ceaae4aSArrigo Marchiori /* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most 143*9ceaae4aSArrigo Marchiori significant byte first (like Motorola and SPARC, unlike Intel). */ 144*9ceaae4aSArrigo Marchiori@@ -119,8 +119,10 @@ 145*9ceaae4aSArrigo Marchiori point. */ 146*9ceaae4aSArrigo Marchiori #define XML_CONTEXT_BYTES 1024 147*9ceaae4aSArrigo Marchiori 148*9ceaae4aSArrigo Marchiori+#if ! defined(_WIN32) 149*9ceaae4aSArrigo Marchiori /* Define to include code reading entropy from `/dev/urandom'. */ 150*9ceaae4aSArrigo Marchiori #define XML_DEV_URANDOM 1 151*9ceaae4aSArrigo Marchiori+#endif 152*9ceaae4aSArrigo Marchiori 153*9ceaae4aSArrigo Marchiori /* Define to make parameter entity parsing functionality available. */ 154*9ceaae4aSArrigo Marchiori #define XML_DTD 1 155*9ceaae4aSArrigo Marchiori@@ -128,6 +130,11 @@ 156*9ceaae4aSArrigo Marchiori /* Define to make XML Namespaces functionality available. */ 157*9ceaae4aSArrigo Marchiori #define XML_NS 1 158*9ceaae4aSArrigo Marchiori 159*9ceaae4aSArrigo Marchiori+/* Define to __FUNCTION__ or "" if `__func__' does not conform to ANSI C. */ 160*9ceaae4aSArrigo Marchiori+#ifdef _MSC_VER 161*9ceaae4aSArrigo Marchiori+# define __func__ __FUNCTION__ 162*9ceaae4aSArrigo Marchiori+#endif 163*9ceaae4aSArrigo Marchiori+ 164*9ceaae4aSArrigo Marchiori /* Define to empty if `const' does not conform to ANSI C. */ 165*9ceaae4aSArrigo Marchiori /* #undef const */ 166*9ceaae4aSArrigo Marchiori 167*9ceaae4aSArrigo Marchioridiff -ru misc/expat-2.5.0/lib/siphash.h misc/build/expat-2.5.0/lib/siphash.h 168*9ceaae4aSArrigo Marchiori--- misc/expat-2.5.0/lib/siphash.h 2022-10-23 17:16:56.000000000 +0200 169*9ceaae4aSArrigo Marchiori+++ misc/build/expat-2.5.0/lib/siphash.h 2023-02-06 23:22:40.588115938 +0100 170*9ceaae4aSArrigo Marchiori@@ -99,7 +99,15 @@ 171*9ceaae4aSArrigo Marchiori #define SIPHASH_H 172*9ceaae4aSArrigo Marchiori 173*9ceaae4aSArrigo Marchiori #include <stddef.h> /* size_t */ 174*9ceaae4aSArrigo Marchiori-#include <stdint.h> /* uint64_t uint32_t uint8_t */ 175*9ceaae4aSArrigo Marchiori+#if defined(_WIN32) && defined(_MSC_VER) && (_MSC_VER < 1600) 176*9ceaae4aSArrigo Marchiori+/* For vs2003/7.1 up to vs2008/9.0; _MSC_VER 1600 is vs2010/10.0 */ 177*9ceaae4aSArrigo Marchiori+typedef unsigned __int8 uint8_t; 178*9ceaae4aSArrigo Marchiori+typedef unsigned __int32 uint32_t; 179*9ceaae4aSArrigo Marchiori+typedef unsigned __int64 uint64_t; 180*9ceaae4aSArrigo Marchiori+#else 181*9ceaae4aSArrigo Marchiori+# include <stdint.h> /* uint64_t uint32_t uint8_t */ 182*9ceaae4aSArrigo Marchiori+#endif 183*9ceaae4aSArrigo Marchiori+ 184*9ceaae4aSArrigo Marchiori 185*9ceaae4aSArrigo Marchiori /* 186*9ceaae4aSArrigo Marchiori * Workaround to not require a C++11 compiler for using ULL suffix 187*9ceaae4aSArrigo Marchioridiff -ru misc/expat-2.5.0/lib/winconfig.h misc/build/expat-2.5.0/lib/winconfig.h 188*9ceaae4aSArrigo Marchiori--- misc/expat-2.5.0/lib/winconfig.h 2022-10-24 18:32:55.000000000 +0200 189*9ceaae4aSArrigo Marchiori+++ misc/build/expat-2.5.0/lib/winconfig.h 2023-02-06 23:22:40.584115842 +0100 190*9ceaae4aSArrigo Marchiori@@ -42,4 +42,11 @@ 191*9ceaae4aSArrigo Marchiori #include <memory.h> 192*9ceaae4aSArrigo Marchiori #include <string.h> 193*9ceaae4aSArrigo Marchiori 194*9ceaae4aSArrigo Marchiori+# define XML_NS 1 195*9ceaae4aSArrigo Marchiori+# define XML_DTD 1 196*9ceaae4aSArrigo Marchiori+# define XML_CONTEXT_BYTES 1024 197*9ceaae4aSArrigo Marchiori+ 198*9ceaae4aSArrigo Marchiori+/* we will assume all Windows platforms are little endian */ 199*9ceaae4aSArrigo Marchiori+# define BYTEORDER 1234 200*9ceaae4aSArrigo Marchiori+ 201*9ceaae4aSArrigo Marchiori #endif /* ndef WINCONFIG_H */ 202*9ceaae4aSArrigo Marchioridiff -ru misc/expat-2.5.0/lib/xmlparse.c misc/build/expat-2.5.0/lib/xmlparse.c 203*9ceaae4aSArrigo Marchiori--- misc/expat-2.5.0/lib/xmlparse.c 2022-10-25 17:09:08.000000000 +0200 204*9ceaae4aSArrigo Marchiori+++ misc/build/expat-2.5.0/lib/xmlparse.c 2023-02-06 23:22:40.584115842 +0100 205*9ceaae4aSArrigo Marchiori@@ -60,8 +60,6 @@ 206*9ceaae4aSArrigo Marchiori 207*9ceaae4aSArrigo Marchiori #define XML_BUILDING_EXPAT 1 208*9ceaae4aSArrigo Marchiori 209*9ceaae4aSArrigo Marchiori-#include <expat_config.h> 210*9ceaae4aSArrigo Marchiori- 211*9ceaae4aSArrigo Marchiori #if ! defined(_GNU_SOURCE) 212*9ceaae4aSArrigo Marchiori # define _GNU_SOURCE 1 /* syscall prototype */ 213*9ceaae4aSArrigo Marchiori #endif 214*9ceaae4aSArrigo Marchiori@@ -79,9 +77,19 @@ 215*9ceaae4aSArrigo Marchiori #include <limits.h> /* UINT_MAX */ 216*9ceaae4aSArrigo Marchiori #include <stdio.h> /* fprintf */ 217*9ceaae4aSArrigo Marchiori #include <stdlib.h> /* getenv, rand_s */ 218*9ceaae4aSArrigo Marchiori-#include <stdint.h> /* uintptr_t */ 219*9ceaae4aSArrigo Marchiori #include <math.h> /* isnan */ 220*9ceaae4aSArrigo Marchiori 221*9ceaae4aSArrigo Marchiori+#if defined(_WIN32) && defined(_MSC_VER) && (_MSC_VER < 1600) 222*9ceaae4aSArrigo Marchiori+/* vs2008/9.0 and earlier lack stdint.h; _MSC_VER 1600 is vs2010/10.0 */ 223*9ceaae4aSArrigo Marchiori+# if defined(_WIN64) 224*9ceaae4aSArrigo Marchiori+typedef unsigned __int64 uintptr_t; 225*9ceaae4aSArrigo Marchiori+# else 226*9ceaae4aSArrigo Marchiori+typedef unsigned __int32 uintptr_t; 227*9ceaae4aSArrigo Marchiori+# endif 228*9ceaae4aSArrigo Marchiori+#else 229*9ceaae4aSArrigo Marchiori+# include <stdint.h> /* uintptr_t */ 230*9ceaae4aSArrigo Marchiori+#endif 231*9ceaae4aSArrigo Marchiori+ 232*9ceaae4aSArrigo Marchiori #ifdef _WIN32 233*9ceaae4aSArrigo Marchiori # define getpid GetCurrentProcessId 234*9ceaae4aSArrigo Marchiori #else 235*9ceaae4aSArrigo Marchiori@@ -94,7 +102,13 @@ 236*9ceaae4aSArrigo Marchiori 237*9ceaae4aSArrigo Marchiori #ifdef _WIN32 238*9ceaae4aSArrigo Marchiori # include "winconfig.h" 239*9ceaae4aSArrigo Marchiori+#include <float.h> 240*9ceaae4aSArrigo Marchiori+#ifndef isnan 241*9ceaae4aSArrigo Marchiori+#define isnan _isnan 242*9ceaae4aSArrigo Marchiori #endif 243*9ceaae4aSArrigo Marchiori+#else 244*9ceaae4aSArrigo Marchiori+# include <expat_config.h> 245*9ceaae4aSArrigo Marchiori+#endif /* ndef _WIN32 */ 246*9ceaae4aSArrigo Marchiori 247*9ceaae4aSArrigo Marchiori #include "ascii.h" 248*9ceaae4aSArrigo Marchiori #include "expat.h" 249*9ceaae4aSArrigo Marchiori@@ -720,7 +734,9 @@ 250*9ceaae4aSArrigo Marchiori 251*9ceaae4aSArrigo Marchiori XML_Parser XMLCALL 252*9ceaae4aSArrigo Marchiori XML_ParserCreateNS(const XML_Char *encodingName, XML_Char nsSep) { 253*9ceaae4aSArrigo Marchiori- XML_Char tmp[2] = {nsSep, 0}; 254*9ceaae4aSArrigo Marchiori+ XML_Char tmp[2]; 255*9ceaae4aSArrigo Marchiori+ tmp[0] = nsSep; 256*9ceaae4aSArrigo Marchiori+ tmp[1] = 0; 257*9ceaae4aSArrigo Marchiori return XML_ParserCreate_MM(encodingName, NULL, tmp); 258*9ceaae4aSArrigo Marchiori } 259*9ceaae4aSArrigo Marchiori 260*9ceaae4aSArrigo Marchiori@@ -1354,7 +1370,9 @@ 261*9ceaae4aSArrigo Marchiori would be otherwise. 262*9ceaae4aSArrigo Marchiori */ 263*9ceaae4aSArrigo Marchiori if (parser->m_ns) { 264*9ceaae4aSArrigo Marchiori- XML_Char tmp[2] = {parser->m_namespaceSeparator, 0}; 265*9ceaae4aSArrigo Marchiori+ XML_Char tmp[2]; 266*9ceaae4aSArrigo Marchiori+ tmp[0] = parser->m_namespaceSeparator; 267*9ceaae4aSArrigo Marchiori+ tmp[1] = 0; 268*9ceaae4aSArrigo Marchiori parser = parserCreate(encodingName, &parser->m_mem, tmp, newDtd); 269*9ceaae4aSArrigo Marchiori } else { 270*9ceaae4aSArrigo Marchiori parser = parserCreate(encodingName, &parser->m_mem, NULL, newDtd); 271*9ceaae4aSArrigo Marchiori@@ -3469,6 +3487,8 @@ 272*9ceaae4aSArrigo Marchiori i = 0; 273*9ceaae4aSArrigo Marchiori if (nPrefixes) { 274*9ceaae4aSArrigo Marchiori int j; /* hash table index */ 275*9ceaae4aSArrigo Marchiori+ unsigned int nsAttsSize; 276*9ceaae4aSArrigo Marchiori+ unsigned char oldNsAttsPower; 277*9ceaae4aSArrigo Marchiori unsigned long version = parser->m_nsAttsVersion; 278*9ceaae4aSArrigo Marchiori 279*9ceaae4aSArrigo Marchiori /* Detect and prevent invalid shift */ 280*9ceaae4aSArrigo Marchiori@@ -3476,8 +3496,8 @@ 281*9ceaae4aSArrigo Marchiori return XML_ERROR_NO_MEMORY; 282*9ceaae4aSArrigo Marchiori } 283*9ceaae4aSArrigo Marchiori 284*9ceaae4aSArrigo Marchiori- unsigned int nsAttsSize = 1u << parser->m_nsAttsPower; 285*9ceaae4aSArrigo Marchiori- unsigned char oldNsAttsPower = parser->m_nsAttsPower; 286*9ceaae4aSArrigo Marchiori+ nsAttsSize = 1u << parser->m_nsAttsPower; 287*9ceaae4aSArrigo Marchiori+ oldNsAttsPower = parser->m_nsAttsPower; 288*9ceaae4aSArrigo Marchiori /* size of hash table must be at least 2 * (# of prefixed attributes) */ 289*9ceaae4aSArrigo Marchiori if ((nPrefixes << 1) 290*9ceaae4aSArrigo Marchiori >> parser->m_nsAttsPower) { /* true for m_nsAttsPower = 0 */ 291*9ceaae4aSArrigo Marchiori@@ -3922,6 +3942,7 @@ 292*9ceaae4aSArrigo Marchiori if (parser->m_freeBindingList) { 293*9ceaae4aSArrigo Marchiori b = parser->m_freeBindingList; 294*9ceaae4aSArrigo Marchiori if (len > b->uriAlloc) { 295*9ceaae4aSArrigo Marchiori+ XML_Char *temp = NULL; 296*9ceaae4aSArrigo Marchiori /* Detect and prevent integer overflow */ 297*9ceaae4aSArrigo Marchiori if (len > INT_MAX - EXPAND_SPARE) { 298*9ceaae4aSArrigo Marchiori return XML_ERROR_NO_MEMORY; 299*9ceaae4aSArrigo Marchiori@@ -3937,7 +3958,7 @@ 300*9ceaae4aSArrigo Marchiori } 301*9ceaae4aSArrigo Marchiori #endif 302*9ceaae4aSArrigo Marchiori 303*9ceaae4aSArrigo Marchiori- XML_Char *temp = (XML_Char *)REALLOC( 304*9ceaae4aSArrigo Marchiori+ temp = (XML_Char *)REALLOC( 305*9ceaae4aSArrigo Marchiori parser, b->uri, sizeof(XML_Char) * (len + EXPAND_SPARE)); 306*9ceaae4aSArrigo Marchiori if (temp == NULL) 307*9ceaae4aSArrigo Marchiori return XML_ERROR_NO_MEMORY; 308*9ceaae4aSArrigo Marchiori@@ -4638,11 +4659,6 @@ 309*9ceaae4aSArrigo Marchiori ASCII_I, ASCII_O, ASCII_N, ASCII_LPAREN, '\0'}; 310*9ceaae4aSArrigo Marchiori static const XML_Char enumValueSep[] = {ASCII_PIPE, '\0'}; 311*9ceaae4aSArrigo Marchiori static const XML_Char enumValueStart[] = {ASCII_LPAREN, '\0'}; 312*9ceaae4aSArrigo Marchiori- 313*9ceaae4aSArrigo Marchiori-#ifndef XML_DTD 314*9ceaae4aSArrigo Marchiori- UNUSED_P(account); 315*9ceaae4aSArrigo Marchiori-#endif 316*9ceaae4aSArrigo Marchiori- 317*9ceaae4aSArrigo Marchiori /* save one level of indirection */ 318*9ceaae4aSArrigo Marchiori DTD *const dtd = parser->m_dtd; 319*9ceaae4aSArrigo Marchiori 320*9ceaae4aSArrigo Marchiori@@ -4650,6 +4666,10 @@ 321*9ceaae4aSArrigo Marchiori const char **eventEndPP; 322*9ceaae4aSArrigo Marchiori enum XML_Content_Quant quant; 323*9ceaae4aSArrigo Marchiori 324*9ceaae4aSArrigo Marchiori+#ifndef XML_DTD 325*9ceaae4aSArrigo Marchiori+ UNUSED_P(account); 326*9ceaae4aSArrigo Marchiori+#endif 327*9ceaae4aSArrigo Marchiori+ 328*9ceaae4aSArrigo Marchiori if (enc == parser->m_encoding) { 329*9ceaae4aSArrigo Marchiori eventPP = &parser->m_eventPtr; 330*9ceaae4aSArrigo Marchiori eventEndPP = &parser->m_eventEndPtr; 331*9ceaae4aSArrigo Marchiori@@ -5290,12 +5310,13 @@ 332*9ceaae4aSArrigo Marchiori if (parser->m_prologState.level >= parser->m_groupSize) { 333*9ceaae4aSArrigo Marchiori if (parser->m_groupSize) { 334*9ceaae4aSArrigo Marchiori { 335*9ceaae4aSArrigo Marchiori+ char *new_connector = NULL; 336*9ceaae4aSArrigo Marchiori /* Detect and prevent integer overflow */ 337*9ceaae4aSArrigo Marchiori if (parser->m_groupSize > (unsigned int)(-1) / 2u) { 338*9ceaae4aSArrigo Marchiori return XML_ERROR_NO_MEMORY; 339*9ceaae4aSArrigo Marchiori } 340*9ceaae4aSArrigo Marchiori 341*9ceaae4aSArrigo Marchiori- char *const new_connector = (char *)REALLOC( 342*9ceaae4aSArrigo Marchiori+ new_connector = (char *)REALLOC( 343*9ceaae4aSArrigo Marchiori parser, parser->m_groupConnector, parser->m_groupSize *= 2); 344*9ceaae4aSArrigo Marchiori if (new_connector == NULL) { 345*9ceaae4aSArrigo Marchiori parser->m_groupSize /= 2; 346*9ceaae4aSArrigo Marchiori@@ -5309,13 +5330,14 @@ 347*9ceaae4aSArrigo Marchiori * The preprocessor guard addresses the "always false" warning 348*9ceaae4aSArrigo Marchiori * from -Wtype-limits on platforms where 349*9ceaae4aSArrigo Marchiori * sizeof(unsigned int) < sizeof(size_t), e.g. on x86_64. */ 350*9ceaae4aSArrigo Marchiori+ int *new_scaff_index = NULL; 351*9ceaae4aSArrigo Marchiori #if UINT_MAX >= SIZE_MAX 352*9ceaae4aSArrigo Marchiori if (parser->m_groupSize > (size_t)(-1) / sizeof(int)) { 353*9ceaae4aSArrigo Marchiori return XML_ERROR_NO_MEMORY; 354*9ceaae4aSArrigo Marchiori } 355*9ceaae4aSArrigo Marchiori #endif 356*9ceaae4aSArrigo Marchiori 357*9ceaae4aSArrigo Marchiori- int *const new_scaff_index = (int *)REALLOC( 358*9ceaae4aSArrigo Marchiori+ new_scaff_index = (int *)REALLOC( 359*9ceaae4aSArrigo Marchiori parser, dtd->scaffIndex, parser->m_groupSize * sizeof(int)); 360*9ceaae4aSArrigo Marchiori if (new_scaff_index == NULL) 361*9ceaae4aSArrigo Marchiori return XML_ERROR_NO_MEMORY; 362*9ceaae4aSArrigo Marchiori@@ -6404,13 +6426,14 @@ 363*9ceaae4aSArrigo Marchiori } 364*9ceaae4aSArrigo Marchiori } else { 365*9ceaae4aSArrigo Marchiori DEFAULT_ATTRIBUTE *temp; 366*9ceaae4aSArrigo Marchiori+ int count; 367*9ceaae4aSArrigo Marchiori 368*9ceaae4aSArrigo Marchiori /* Detect and prevent integer overflow */ 369*9ceaae4aSArrigo Marchiori if (type->allocDefaultAtts > INT_MAX / 2) { 370*9ceaae4aSArrigo Marchiori return 0; 371*9ceaae4aSArrigo Marchiori } 372*9ceaae4aSArrigo Marchiori 373*9ceaae4aSArrigo Marchiori- int count = type->allocDefaultAtts * 2; 374*9ceaae4aSArrigo Marchiori+ count = type->allocDefaultAtts * 2; 375*9ceaae4aSArrigo Marchiori 376*9ceaae4aSArrigo Marchiori /* Detect and prevent integer overflow. 377*9ceaae4aSArrigo Marchiori * The preprocessor guard addresses the "always false" warning 378*9ceaae4aSArrigo Marchiori@@ -7072,22 +7095,26 @@ 379*9ceaae4aSArrigo Marchiori /* check for overflow (table is half full) */ 380*9ceaae4aSArrigo Marchiori if (table->used >> (table->power - 1)) { 381*9ceaae4aSArrigo Marchiori unsigned char newPower = table->power + 1; 382*9ceaae4aSArrigo Marchiori+ size_t newSize; 383*9ceaae4aSArrigo Marchiori+ unsigned long newMask; 384*9ceaae4aSArrigo Marchiori+ size_t tsize; 385*9ceaae4aSArrigo Marchiori+ NAMED **newV = NULL; 386*9ceaae4aSArrigo Marchiori 387*9ceaae4aSArrigo Marchiori /* Detect and prevent invalid shift */ 388*9ceaae4aSArrigo Marchiori if (newPower >= sizeof(unsigned long) * 8 /* bits per byte */) { 389*9ceaae4aSArrigo Marchiori return NULL; 390*9ceaae4aSArrigo Marchiori } 391*9ceaae4aSArrigo Marchiori 392*9ceaae4aSArrigo Marchiori- size_t newSize = (size_t)1 << newPower; 393*9ceaae4aSArrigo Marchiori- unsigned long newMask = (unsigned long)newSize - 1; 394*9ceaae4aSArrigo Marchiori+ newSize = (size_t)1 << newPower; 395*9ceaae4aSArrigo Marchiori+ newMask = (unsigned long)newSize - 1; 396*9ceaae4aSArrigo Marchiori 397*9ceaae4aSArrigo Marchiori /* Detect and prevent integer overflow */ 398*9ceaae4aSArrigo Marchiori if (newSize > (size_t)(-1) / sizeof(NAMED *)) { 399*9ceaae4aSArrigo Marchiori return NULL; 400*9ceaae4aSArrigo Marchiori } 401*9ceaae4aSArrigo Marchiori 402*9ceaae4aSArrigo Marchiori- size_t tsize = newSize * sizeof(NAMED *); 403*9ceaae4aSArrigo Marchiori- NAMED **newV = table->mem->malloc_fcn(tsize); 404*9ceaae4aSArrigo Marchiori+ tsize = newSize * sizeof(NAMED *); 405*9ceaae4aSArrigo Marchiori+ newV = table->mem->malloc_fcn(tsize); 406*9ceaae4aSArrigo Marchiori if (! newV) 407*9ceaae4aSArrigo Marchiori return NULL; 408*9ceaae4aSArrigo Marchiori memset(newV, 0, tsize); 409*9ceaae4aSArrigo Marchiori@@ -7489,6 +7516,10 @@ 410*9ceaae4aSArrigo Marchiori DTD *const dtd = parser->m_dtd; /* save one level of indirection */ 411*9ceaae4aSArrigo Marchiori XML_Content *ret; 412*9ceaae4aSArrigo Marchiori XML_Char *str; /* the current string writing location */ 413*9ceaae4aSArrigo Marchiori+ size_t allocsize; 414*9ceaae4aSArrigo Marchiori+ XML_Content *dest = NULL; 415*9ceaae4aSArrigo Marchiori+ XML_Content *destLimit = NULL; 416*9ceaae4aSArrigo Marchiori+ XML_Content *jobDest = NULL; 417*9ceaae4aSArrigo Marchiori 418*9ceaae4aSArrigo Marchiori /* Detect and prevent integer overflow. 419*9ceaae4aSArrigo Marchiori * The preprocessor guard addresses the "always false" warning 420*9ceaae4aSArrigo Marchiori@@ -7507,7 +7538,7 @@ 421*9ceaae4aSArrigo Marchiori return NULL; 422*9ceaae4aSArrigo Marchiori } 423*9ceaae4aSArrigo Marchiori 424*9ceaae4aSArrigo Marchiori- const size_t allocsize = (dtd->scaffCount * sizeof(XML_Content) 425*9ceaae4aSArrigo Marchiori+ allocsize = (dtd->scaffCount * sizeof(XML_Content) 426*9ceaae4aSArrigo Marchiori + (dtd->contentStringLen * sizeof(XML_Char))); 427*9ceaae4aSArrigo Marchiori 428*9ceaae4aSArrigo Marchiori ret = (XML_Content *)MALLOC(parser, allocsize); 429*9ceaae4aSArrigo Marchiori@@ -7563,9 +7594,9 @@ 430*9ceaae4aSArrigo Marchiori * 431*9ceaae4aSArrigo Marchiori * - The algorithm repeats until all target array indices have been processed. 432*9ceaae4aSArrigo Marchiori */ 433*9ceaae4aSArrigo Marchiori- XML_Content *dest = ret; /* tree node writing location, moves upwards */ 434*9ceaae4aSArrigo Marchiori- XML_Content *const destLimit = &ret[dtd->scaffCount]; 435*9ceaae4aSArrigo Marchiori- XML_Content *jobDest = ret; /* next free writing location in target array */ 436*9ceaae4aSArrigo Marchiori+ dest = ret; /* tree node writing location, moves upwards */ 437*9ceaae4aSArrigo Marchiori+ destLimit = &ret[dtd->scaffCount]; 438*9ceaae4aSArrigo Marchiori+ jobDest = ret; /* next free writing location in target array */ 439*9ceaae4aSArrigo Marchiori str = (XML_Char *)&ret[dtd->scaffCount]; 440*9ceaae4aSArrigo Marchiori 441*9ceaae4aSArrigo Marchiori /* Add the starting job, the root node (index 0) of the source tree */ 442*9ceaae4aSArrigo Marchiori@@ -7670,13 +7701,14 @@ 443*9ceaae4aSArrigo Marchiori static void 444*9ceaae4aSArrigo Marchiori accountingReportStats(XML_Parser originParser, const char *epilog) { 445*9ceaae4aSArrigo Marchiori const XML_Parser rootParser = getRootParserOf(originParser, NULL); 446*9ceaae4aSArrigo Marchiori+ float amplificationFactor; 447*9ceaae4aSArrigo Marchiori assert(! rootParser->m_parentParser); 448*9ceaae4aSArrigo Marchiori 449*9ceaae4aSArrigo Marchiori if (rootParser->m_accounting.debugLevel < 1) { 450*9ceaae4aSArrigo Marchiori return; 451*9ceaae4aSArrigo Marchiori } 452*9ceaae4aSArrigo Marchiori 453*9ceaae4aSArrigo Marchiori- const float amplificationFactor 454*9ceaae4aSArrigo Marchiori+ amplificationFactor 455*9ceaae4aSArrigo Marchiori = accountingGetCurrentAmplification(rootParser); 456*9ceaae4aSArrigo Marchiori fprintf(stderr, 457*9ceaae4aSArrigo Marchiori "expat: Accounting(%p): Direct " EXPAT_FMT_ULL( 458*9ceaae4aSArrigo Marchiori@@ -7696,6 +7728,10 @@ 459*9ceaae4aSArrigo Marchiori unsigned int levelsAwayFromRootParser, const char *before, 460*9ceaae4aSArrigo Marchiori const char *after, ptrdiff_t bytesMore, int source_line, 461*9ceaae4aSArrigo Marchiori enum XML_Account account) { 462*9ceaae4aSArrigo Marchiori+ const char ellipis[] = "[..]"; 463*9ceaae4aSArrigo Marchiori+ const size_t ellipsisLength = sizeof(ellipis) /* because compile-time */ - 1; 464*9ceaae4aSArrigo Marchiori+ const unsigned int contextLength = 10; 465*9ceaae4aSArrigo Marchiori+ const char *walker = NULL; 466*9ceaae4aSArrigo Marchiori assert(! rootParser->m_parentParser); 467*9ceaae4aSArrigo Marchiori 468*9ceaae4aSArrigo Marchiori fprintf(stderr, 469*9ceaae4aSArrigo Marchiori@@ -7703,12 +7739,8 @@ 470*9ceaae4aSArrigo Marchiori bytesMore, (account == XML_ACCOUNT_DIRECT) ? "DIR" : "EXP", 471*9ceaae4aSArrigo Marchiori levelsAwayFromRootParser, source_line, 10, ""); 472*9ceaae4aSArrigo Marchiori 473*9ceaae4aSArrigo Marchiori- const char ellipis[] = "[..]"; 474*9ceaae4aSArrigo Marchiori- const size_t ellipsisLength = sizeof(ellipis) /* because compile-time */ - 1; 475*9ceaae4aSArrigo Marchiori- const unsigned int contextLength = 10; 476*9ceaae4aSArrigo Marchiori- 477*9ceaae4aSArrigo Marchiori /* Note: Performance is of no concern here */ 478*9ceaae4aSArrigo Marchiori- const char *walker = before; 479*9ceaae4aSArrigo Marchiori+ walker = before; 480*9ceaae4aSArrigo Marchiori if ((rootParser->m_accounting.debugLevel >= 3) 481*9ceaae4aSArrigo Marchiori || (after - before) 482*9ceaae4aSArrigo Marchiori <= (ptrdiff_t)(contextLength + ellipsisLength + contextLength)) { 483*9ceaae4aSArrigo Marchiori@@ -7732,6 +7764,14 @@ 484*9ceaae4aSArrigo Marchiori accountingDiffTolerated(XML_Parser originParser, int tok, const char *before, 485*9ceaae4aSArrigo Marchiori const char *after, int source_line, 486*9ceaae4aSArrigo Marchiori enum XML_Account account) { 487*9ceaae4aSArrigo Marchiori+ unsigned int levelsAwayFromRootParser; 488*9ceaae4aSArrigo Marchiori+ XML_Parser rootParser; 489*9ceaae4aSArrigo Marchiori+ int isDirect; 490*9ceaae4aSArrigo Marchiori+ ptrdiff_t bytesMore; 491*9ceaae4aSArrigo Marchiori+ XmlBigCount *additionTarget = NULL; 492*9ceaae4aSArrigo Marchiori+ XmlBigCount countBytesOutput; 493*9ceaae4aSArrigo Marchiori+ float amplificationFactor; 494*9ceaae4aSArrigo Marchiori+ XML_Bool tolerated; 495*9ceaae4aSArrigo Marchiori /* Note: We need to check the token type *first* to be sure that 496*9ceaae4aSArrigo Marchiori * we can even access variable <after>, safely. 497*9ceaae4aSArrigo Marchiori * E.g. for XML_TOK_NONE <after> may hold an invalid pointer. */ 498*9ceaae4aSArrigo Marchiori@@ -7746,16 +7786,15 @@ 499*9ceaae4aSArrigo Marchiori if (account == XML_ACCOUNT_NONE) 500*9ceaae4aSArrigo Marchiori return XML_TRUE; /* because these bytes have been accounted for, already */ 501*9ceaae4aSArrigo Marchiori 502*9ceaae4aSArrigo Marchiori- unsigned int levelsAwayFromRootParser; 503*9ceaae4aSArrigo Marchiori- const XML_Parser rootParser 504*9ceaae4aSArrigo Marchiori+ rootParser 505*9ceaae4aSArrigo Marchiori = getRootParserOf(originParser, &levelsAwayFromRootParser); 506*9ceaae4aSArrigo Marchiori assert(! rootParser->m_parentParser); 507*9ceaae4aSArrigo Marchiori 508*9ceaae4aSArrigo Marchiori- const int isDirect 509*9ceaae4aSArrigo Marchiori+ isDirect 510*9ceaae4aSArrigo Marchiori = (account == XML_ACCOUNT_DIRECT) && (originParser == rootParser); 511*9ceaae4aSArrigo Marchiori- const ptrdiff_t bytesMore = after - before; 512*9ceaae4aSArrigo Marchiori+ bytesMore = after - before; 513*9ceaae4aSArrigo Marchiori 514*9ceaae4aSArrigo Marchiori- XmlBigCount *const additionTarget 515*9ceaae4aSArrigo Marchiori+ additionTarget 516*9ceaae4aSArrigo Marchiori = isDirect ? &rootParser->m_accounting.countBytesDirect 517*9ceaae4aSArrigo Marchiori : &rootParser->m_accounting.countBytesIndirect; 518*9ceaae4aSArrigo Marchiori 519*9ceaae4aSArrigo Marchiori@@ -7764,12 +7803,12 @@ 520*9ceaae4aSArrigo Marchiori return XML_FALSE; 521*9ceaae4aSArrigo Marchiori *additionTarget += bytesMore; 522*9ceaae4aSArrigo Marchiori 523*9ceaae4aSArrigo Marchiori- const XmlBigCount countBytesOutput 524*9ceaae4aSArrigo Marchiori+ countBytesOutput 525*9ceaae4aSArrigo Marchiori = rootParser->m_accounting.countBytesDirect 526*9ceaae4aSArrigo Marchiori + rootParser->m_accounting.countBytesIndirect; 527*9ceaae4aSArrigo Marchiori- const float amplificationFactor 528*9ceaae4aSArrigo Marchiori+ amplificationFactor 529*9ceaae4aSArrigo Marchiori = accountingGetCurrentAmplification(rootParser); 530*9ceaae4aSArrigo Marchiori- const XML_Bool tolerated 531*9ceaae4aSArrigo Marchiori+ tolerated 532*9ceaae4aSArrigo Marchiori = (countBytesOutput < rootParser->m_accounting.activationThresholdBytes) 533*9ceaae4aSArrigo Marchiori || (amplificationFactor 534*9ceaae4aSArrigo Marchiori <= rootParser->m_accounting.maximumAmplificationFactor); 535*9ceaae4aSArrigo Marchiori@@ -7800,14 +7839,15 @@ 536*9ceaae4aSArrigo Marchiori static void 537*9ceaae4aSArrigo Marchiori entityTrackingReportStats(XML_Parser rootParser, ENTITY *entity, 538*9ceaae4aSArrigo Marchiori const char *action, int sourceLine) { 539*9ceaae4aSArrigo Marchiori+ const char *entityName; 540*9ceaae4aSArrigo Marchiori assert(! rootParser->m_parentParser); 541*9ceaae4aSArrigo Marchiori if (rootParser->m_entity_stats.debugLevel < 1) 542*9ceaae4aSArrigo Marchiori return; 543*9ceaae4aSArrigo Marchiori 544*9ceaae4aSArrigo Marchiori # if defined(XML_UNICODE) 545*9ceaae4aSArrigo Marchiori- const char *const entityName = "[..]"; 546*9ceaae4aSArrigo Marchiori+ entityName = "[..]"; 547*9ceaae4aSArrigo Marchiori # else 548*9ceaae4aSArrigo Marchiori- const char *const entityName = entity->name; 549*9ceaae4aSArrigo Marchiori+ entityName = entity->name; 550*9ceaae4aSArrigo Marchiori # endif 551*9ceaae4aSArrigo Marchiori 552*9ceaae4aSArrigo Marchiori fprintf( 553*9ceaae4aSArrigo Marchiori@@ -8387,14 +8427,17 @@ 554*9ceaae4aSArrigo Marchiori static unsigned long 555*9ceaae4aSArrigo Marchiori getDebugLevel(const char *variableName, unsigned long defaultDebugLevel) { 556*9ceaae4aSArrigo Marchiori const char *const valueOrNull = getenv(variableName); 557*9ceaae4aSArrigo Marchiori+ const char *value = NULL; 558*9ceaae4aSArrigo Marchiori+ char *afterValue = NULL; 559*9ceaae4aSArrigo Marchiori+ unsigned long debugLevel; 560*9ceaae4aSArrigo Marchiori if (valueOrNull == NULL) { 561*9ceaae4aSArrigo Marchiori return defaultDebugLevel; 562*9ceaae4aSArrigo Marchiori } 563*9ceaae4aSArrigo Marchiori- const char *const value = valueOrNull; 564*9ceaae4aSArrigo Marchiori+ value = valueOrNull; 565*9ceaae4aSArrigo Marchiori 566*9ceaae4aSArrigo Marchiori errno = 0; 567*9ceaae4aSArrigo Marchiori- char *afterValue = (char *)value; 568*9ceaae4aSArrigo Marchiori- unsigned long debugLevel = strtoul(value, &afterValue, 10); 569*9ceaae4aSArrigo Marchiori+ afterValue = (char *)value; 570*9ceaae4aSArrigo Marchiori+ debugLevel = strtoul(value, &afterValue, 10); 571*9ceaae4aSArrigo Marchiori if ((errno != 0) || (afterValue[0] != '\0')) { 572*9ceaae4aSArrigo Marchiori errno = 0; 573*9ceaae4aSArrigo Marchiori return defaultDebugLevel; 574*9ceaae4aSArrigo Marchioridiff -ru misc/expat-2.5.0/lib/xmltok.c misc/build/expat-2.5.0/lib/xmltok.c 575*9ceaae4aSArrigo Marchiori--- misc/expat-2.5.0/lib/xmltok.c 2022-10-24 18:32:55.000000000 +0200 576*9ceaae4aSArrigo Marchiori+++ misc/build/expat-2.5.0/lib/xmltok.c 2023-02-06 23:22:40.588115938 +0100 577*9ceaae4aSArrigo Marchiori@@ -44,14 +44,22 @@ 578*9ceaae4aSArrigo Marchiori USE OR OTHER DEALINGS IN THE SOFTWARE. 579*9ceaae4aSArrigo Marchiori */ 580*9ceaae4aSArrigo Marchiori 581*9ceaae4aSArrigo Marchiori-#include <expat_config.h> 582*9ceaae4aSArrigo Marchiori- 583*9ceaae4aSArrigo Marchiori #include <stddef.h> 584*9ceaae4aSArrigo Marchiori #include <string.h> /* memcpy */ 585*9ceaae4aSArrigo Marchiori-#include <stdbool.h> 586*9ceaae4aSArrigo Marchiori+ 587*9ceaae4aSArrigo Marchiori+#if defined(_MSC_VER) && (_MSC_VER <= 1700) 588*9ceaae4aSArrigo Marchiori+/* for vs2012/11.0/1700 and earlier Visual Studio compilers */ 589*9ceaae4aSArrigo Marchiori+# define bool int 590*9ceaae4aSArrigo Marchiori+# define false 0 591*9ceaae4aSArrigo Marchiori+# define true 1 592*9ceaae4aSArrigo Marchiori+#else 593*9ceaae4aSArrigo Marchiori+# include <stdbool.h> 594*9ceaae4aSArrigo Marchiori+#endif 595*9ceaae4aSArrigo Marchiori 596*9ceaae4aSArrigo Marchiori #ifdef _WIN32 597*9ceaae4aSArrigo Marchiori # include "winconfig.h" 598*9ceaae4aSArrigo Marchiori+#else 599*9ceaae4aSArrigo Marchiori+# include <expat_config.h> 600*9ceaae4aSArrigo Marchiori #endif 601*9ceaae4aSArrigo Marchiori 602*9ceaae4aSArrigo Marchiori #include "expat_external.h" 603*9ceaae4aSArrigo Marchioridiff -ru misc/expat-2.5.0/tests/runtests.c misc/build/expat-2.5.0/tests/runtests.c 604*9ceaae4aSArrigo Marchiori--- misc/expat-2.5.0/tests/runtests.c 2022-10-25 17:09:08.000000000 +0200 605*9ceaae4aSArrigo Marchiori+++ misc/build/expat-2.5.0/tests/runtests.c 2023-02-06 23:22:40.592116032 +0100 606*9ceaae4aSArrigo Marchiori@@ -40,7 +40,15 @@ 607*9ceaae4aSArrigo Marchiori USE OR OTHER DEALINGS IN THE SOFTWARE. 608*9ceaae4aSArrigo Marchiori */ 609*9ceaae4aSArrigo Marchiori 610*9ceaae4aSArrigo Marchiori-#include <expat_config.h> 611*9ceaae4aSArrigo Marchiori+#ifdef _WIN32 612*9ceaae4aSArrigo Marchiori+# include "winconfig.h" 613*9ceaae4aSArrigo Marchiori+#include <float.h> 614*9ceaae4aSArrigo Marchiori+#ifndef isnan 615*9ceaae4aSArrigo Marchiori+#define isnan _isnan 616*9ceaae4aSArrigo Marchiori+#endif 617*9ceaae4aSArrigo Marchiori+#else 618*9ceaae4aSArrigo Marchiori+# include <expat_config.h> 619*9ceaae4aSArrigo Marchiori+#endif /* ndef _WIN32 */ 620*9ceaae4aSArrigo Marchiori 621*9ceaae4aSArrigo Marchiori #if defined(NDEBUG) 622*9ceaae4aSArrigo Marchiori # undef NDEBUG /* because test suite relies on assert(...) at the moment */ 623*9ceaae4aSArrigo Marchiori@@ -53,11 +61,28 @@ 624*9ceaae4aSArrigo Marchiori #include <stddef.h> /* ptrdiff_t */ 625*9ceaae4aSArrigo Marchiori #include <ctype.h> 626*9ceaae4aSArrigo Marchiori #include <limits.h> 627*9ceaae4aSArrigo Marchiori-#include <stdint.h> /* intptr_t uint64_t */ 628*9ceaae4aSArrigo Marchiori+ 629*9ceaae4aSArrigo Marchiori+#if defined(_WIN32) && defined(_MSC_VER) && (_MSC_VER < 1600) 630*9ceaae4aSArrigo Marchiori+/* vs2008/9.0 and earlier lack stdint.h; _MSC_VER 1600 is vs2010/10.0 */ 631*9ceaae4aSArrigo Marchiori+# if defined(_WIN64) 632*9ceaae4aSArrigo Marchiori+typedef unsigned __int64 uintptr_t; 633*9ceaae4aSArrigo Marchiori+# else 634*9ceaae4aSArrigo Marchiori+typedef unsigned __int32 uintptr_t; 635*9ceaae4aSArrigo Marchiori+# endif 636*9ceaae4aSArrigo Marchiori+#else 637*9ceaae4aSArrigo Marchiori+# include <stdint.h> /* uintptr_t */ 638*9ceaae4aSArrigo Marchiori+#endif 639*9ceaae4aSArrigo Marchiori 640*9ceaae4aSArrigo Marchiori #if ! defined(__cplusplus) 641*9ceaae4aSArrigo Marchiori+#if defined(_MSC_VER) && (_MSC_VER <= 1700) 642*9ceaae4aSArrigo Marchiori+/* for vs2012/11.0/1700 and earlier Visual Studio compilers */ 643*9ceaae4aSArrigo Marchiori+# define bool int 644*9ceaae4aSArrigo Marchiori+# define false 0 645*9ceaae4aSArrigo Marchiori+# define true 1 646*9ceaae4aSArrigo Marchiori+#else 647*9ceaae4aSArrigo Marchiori # include <stdbool.h> 648*9ceaae4aSArrigo Marchiori #endif 649*9ceaae4aSArrigo Marchiori+#endif 650*9ceaae4aSArrigo Marchiori 651*9ceaae4aSArrigo Marchiori #include "expat.h" 652*9ceaae4aSArrigo Marchiori #include "chardata.h" 653*9ceaae4aSArrigo Marchiori@@ -2666,8 +2691,8 @@ 654*9ceaae4aSArrigo Marchiori static void XMLCALL 655*9ceaae4aSArrigo Marchiori element_decl_check_model(void *userData, const XML_Char *name, 656*9ceaae4aSArrigo Marchiori XML_Content *model) { 657*9ceaae4aSArrigo Marchiori- UNUSED_P(userData); 658*9ceaae4aSArrigo Marchiori uint32_t errorFlags = 0; 659*9ceaae4aSArrigo Marchiori+ UNUSED_P(userData); 660*9ceaae4aSArrigo Marchiori 661*9ceaae4aSArrigo Marchiori /* Expected model array structure is this: 662*9ceaae4aSArrigo Marchiori * [0] (type 6, quant 0) 663*9ceaae4aSArrigo Marchiori@@ -3926,10 +3951,9 @@ 664*9ceaae4aSArrigo Marchiori #if defined(XML_CONTEXT_BYTES) 665*9ceaae4aSArrigo Marchiori START_TEST(test_get_buffer_3_overflow) { 666*9ceaae4aSArrigo Marchiori XML_Parser parser = XML_ParserCreate(NULL); 667*9ceaae4aSArrigo Marchiori- assert(parser != NULL); 668*9ceaae4aSArrigo Marchiori- 669*9ceaae4aSArrigo Marchiori- const char *const text = "\n"; 670*9ceaae4aSArrigo Marchiori+ const char *text = "\n"; 671*9ceaae4aSArrigo Marchiori const int expectedKeepValue = (int)strlen(text); 672*9ceaae4aSArrigo Marchiori+ assert(parser != NULL); 673*9ceaae4aSArrigo Marchiori 674*9ceaae4aSArrigo Marchiori // After this call, variable "keep" in XML_GetBuffer will 675*9ceaae4aSArrigo Marchiori // have value expectedKeepValue 676*9ceaae4aSArrigo Marchiori@@ -4992,8 +5016,8 @@ 677*9ceaae4aSArrigo Marchiori 678*9ceaae4aSArrigo Marchiori static void XMLCALL 679*9ceaae4aSArrigo Marchiori suspending_comment_handler(void *userData, const XML_Char *data) { 680*9ceaae4aSArrigo Marchiori- UNUSED_P(data); 681*9ceaae4aSArrigo Marchiori XML_Parser parser = (XML_Parser)userData; 682*9ceaae4aSArrigo Marchiori+ UNUSED_P(data); 683*9ceaae4aSArrigo Marchiori XML_StopParser(parser, XML_TRUE); 684*9ceaae4aSArrigo Marchiori } 685*9ceaae4aSArrigo Marchiori 686*9ceaae4aSArrigo Marchiori@@ -6210,13 +6234,16 @@ 687*9ceaae4aSArrigo Marchiori for (; j < sizeof(atNameStart) / sizeof(atNameStart[0]); j++) { 688*9ceaae4aSArrigo Marchiori const bool expectedSuccess 689*9ceaae4aSArrigo Marchiori = atNameStart[j] ? cases[i].goodNameStart : cases[i].goodName; 690*9ceaae4aSArrigo Marchiori+ XML_Parser parser; 691*9ceaae4aSArrigo Marchiori+ enum XML_Status status; 692*9ceaae4aSArrigo Marchiori+ bool success; 693*9ceaae4aSArrigo Marchiori sprintf(doc, "<%s%s><!--", atNameStart[j] ? "" : "a", cases[i].tagName); 694*9ceaae4aSArrigo Marchiori- XML_Parser parser = XML_ParserCreate(NULL); 695*9ceaae4aSArrigo Marchiori+ parser = XML_ParserCreate(NULL); 696*9ceaae4aSArrigo Marchiori 697*9ceaae4aSArrigo Marchiori- const enum XML_Status status 698*9ceaae4aSArrigo Marchiori+ status 699*9ceaae4aSArrigo Marchiori = XML_Parse(parser, doc, (int)strlen(doc), /*isFinal=*/XML_FALSE); 700*9ceaae4aSArrigo Marchiori 701*9ceaae4aSArrigo Marchiori- bool success = true; 702*9ceaae4aSArrigo Marchiori+ success = true; 703*9ceaae4aSArrigo Marchiori if ((status == XML_STATUS_OK) != expectedSuccess) { 704*9ceaae4aSArrigo Marchiori success = false; 705*9ceaae4aSArrigo Marchiori } 706*9ceaae4aSArrigo Marchiori@@ -6812,13 +6839,14 @@ 707*9ceaae4aSArrigo Marchiori CharData storage; 708*9ceaae4aSArrigo Marchiori XML_Parser parser = XML_ParserCreate(NULL); 709*9ceaae4aSArrigo Marchiori ParserPlusStorage parserPlusStorage = {parser, &storage}; 710*9ceaae4aSArrigo Marchiori- 711*9ceaae4aSArrigo Marchiori+ enum XML_Status status; 712*9ceaae4aSArrigo Marchiori+ 713*9ceaae4aSArrigo Marchiori CharData_Init(&storage); 714*9ceaae4aSArrigo Marchiori XML_SetParamEntityParsing(parser, XML_PARAM_ENTITY_PARSING_ALWAYS); 715*9ceaae4aSArrigo Marchiori XML_SetCommentHandler(parser, accumulate_and_suspend_comment_handler); 716*9ceaae4aSArrigo Marchiori XML_SetUserData(parser, &parserPlusStorage); 717*9ceaae4aSArrigo Marchiori 718*9ceaae4aSArrigo Marchiori- enum XML_Status status = XML_Parse(parser, text, (int)strlen(text), XML_TRUE); 719*9ceaae4aSArrigo Marchiori+ status = XML_Parse(parser, text, (int)strlen(text), XML_TRUE); 720*9ceaae4aSArrigo Marchiori while (status == XML_STATUS_SUSPENDED) { 721*9ceaae4aSArrigo Marchiori status = XML_ResumeParser(parser); 722*9ceaae4aSArrigo Marchiori } 723*9ceaae4aSArrigo Marchiori@@ -10214,6 +10242,8 @@ 724*9ceaae4aSArrigo Marchiori const XML_Char *base, 725*9ceaae4aSArrigo Marchiori const XML_Char *systemId, 726*9ceaae4aSArrigo Marchiori const XML_Char *publicId) { 727*9ceaae4aSArrigo Marchiori+ const XML_Char *encodingName = XCS("UTF-8"); // needs something non-NULL 728*9ceaae4aSArrigo Marchiori+ XML_Parser ext_parser; 729*9ceaae4aSArrigo Marchiori UNUSED_P(base); 730*9ceaae4aSArrigo Marchiori UNUSED_P(systemId); 731*9ceaae4aSArrigo Marchiori UNUSED_P(publicId); 732*9ceaae4aSArrigo Marchiori@@ -10226,8 +10256,7 @@ 733*9ceaae4aSArrigo Marchiori // &(parser->m_mem));" in function parserInit. 734*9ceaae4aSArrigo Marchiori allocation_count = 3; 735*9ceaae4aSArrigo Marchiori 736*9ceaae4aSArrigo Marchiori- const XML_Char *const encodingName = XCS("UTF-8"); // needs something non-NULL 737*9ceaae4aSArrigo Marchiori- const XML_Parser ext_parser 738*9ceaae4aSArrigo Marchiori+ ext_parser 739*9ceaae4aSArrigo Marchiori = XML_ExternalEntityParserCreate(parser, context, encodingName); 740*9ceaae4aSArrigo Marchiori if (ext_parser != NULL) 741*9ceaae4aSArrigo Marchiori fail( 742*9ceaae4aSArrigo Marchiori@@ -11718,14 +11747,17 @@ 743*9ceaae4aSArrigo Marchiori const XML_Char *base, 744*9ceaae4aSArrigo Marchiori const XML_Char *systemId, 745*9ceaae4aSArrigo Marchiori const XML_Char *publicId) { 746*9ceaae4aSArrigo Marchiori- UNUSED_P(context); 747*9ceaae4aSArrigo Marchiori- UNUSED_P(base); 748*9ceaae4aSArrigo Marchiori- UNUSED_P(publicId); 749*9ceaae4aSArrigo Marchiori- 750*9ceaae4aSArrigo Marchiori const struct AccountingTestCase *const testCase 751*9ceaae4aSArrigo Marchiori = (const struct AccountingTestCase *)XML_GetUserData(parser); 752*9ceaae4aSArrigo Marchiori 753*9ceaae4aSArrigo Marchiori const char *externalText = NULL; 754*9ceaae4aSArrigo Marchiori+ XML_Parser entParser; 755*9ceaae4aSArrigo Marchiori+ XmlParseFunction xmlParseFunction; 756*9ceaae4aSArrigo Marchiori+ enum XML_Status status; 757*9ceaae4aSArrigo Marchiori+ UNUSED_P(context); 758*9ceaae4aSArrigo Marchiori+ UNUSED_P(base); 759*9ceaae4aSArrigo Marchiori+ UNUSED_P(publicId); 760*9ceaae4aSArrigo Marchiori+ 761*9ceaae4aSArrigo Marchiori if (xcstrcmp(systemId, XCS("first.ent")) == 0) { 762*9ceaae4aSArrigo Marchiori externalText = testCase->firstExternalText; 763*9ceaae4aSArrigo Marchiori } else if (xcstrcmp(systemId, XCS("second.ent")) == 0) { 764*9ceaae4aSArrigo Marchiori@@ -11735,13 +11767,13 @@ 765*9ceaae4aSArrigo Marchiori } 766*9ceaae4aSArrigo Marchiori assert(externalText); 767*9ceaae4aSArrigo Marchiori 768*9ceaae4aSArrigo Marchiori- XML_Parser entParser = XML_ExternalEntityParserCreate(parser, context, 0); 769*9ceaae4aSArrigo Marchiori+ entParser = XML_ExternalEntityParserCreate(parser, context, 0); 770*9ceaae4aSArrigo Marchiori assert(entParser); 771*9ceaae4aSArrigo Marchiori 772*9ceaae4aSArrigo Marchiori- const XmlParseFunction xmlParseFunction 773*9ceaae4aSArrigo Marchiori+ xmlParseFunction 774*9ceaae4aSArrigo Marchiori = testCase->singleBytesWanted ? _XML_Parse_SINGLE_BYTES : XML_Parse; 775*9ceaae4aSArrigo Marchiori 776*9ceaae4aSArrigo Marchiori- const enum XML_Status status = xmlParseFunction( 777*9ceaae4aSArrigo Marchiori+ status = xmlParseFunction( 778*9ceaae4aSArrigo Marchiori entParser, externalText, (int)strlen(externalText), XML_TRUE); 779*9ceaae4aSArrigo Marchiori 780*9ceaae4aSArrigo Marchiori XML_ParserFree(entParser); 781*9ceaae4aSArrigo Marchiori@@ -11951,6 +11983,10 @@ 782*9ceaae4aSArrigo Marchiori + cases[u].expectedCountBytesIndirectExtra; 783*9ceaae4aSArrigo Marchiori 784*9ceaae4aSArrigo Marchiori XML_Parser parser = XML_ParserCreate(NULL); 785*9ceaae4aSArrigo Marchiori+ XmlParseFunction xmlParseFunction; 786*9ceaae4aSArrigo Marchiori+ enum XML_Status status; 787*9ceaae4aSArrigo Marchiori+ unsigned long long actualCountBytesDirect; 788*9ceaae4aSArrigo Marchiori+ unsigned long long actualCountBytesIndirect; 789*9ceaae4aSArrigo Marchiori XML_SetParamEntityParsing(parser, XML_PARAM_ENTITY_PARSING_ALWAYS); 790*9ceaae4aSArrigo Marchiori if (cases[u].firstExternalText) { 791*9ceaae4aSArrigo Marchiori XML_SetExternalEntityRefHandler(parser, 792*9ceaae4aSArrigo Marchiori@@ -11959,19 +11995,19 @@ 793*9ceaae4aSArrigo Marchiori cases[u].singleBytesWanted = singleBytesWanted; 794*9ceaae4aSArrigo Marchiori } 795*9ceaae4aSArrigo Marchiori 796*9ceaae4aSArrigo Marchiori- const XmlParseFunction xmlParseFunction 797*9ceaae4aSArrigo Marchiori+ xmlParseFunction 798*9ceaae4aSArrigo Marchiori = singleBytesWanted ? _XML_Parse_SINGLE_BYTES : XML_Parse; 799*9ceaae4aSArrigo Marchiori 800*9ceaae4aSArrigo Marchiori- enum XML_Status status 801*9ceaae4aSArrigo Marchiori+ status 802*9ceaae4aSArrigo Marchiori = xmlParseFunction(parser, cases[u].primaryText, 803*9ceaae4aSArrigo Marchiori (int)strlen(cases[u].primaryText), XML_TRUE); 804*9ceaae4aSArrigo Marchiori if (status != XML_STATUS_OK) { 805*9ceaae4aSArrigo Marchiori _xml_failure(parser, __FILE__, __LINE__); 806*9ceaae4aSArrigo Marchiori } 807*9ceaae4aSArrigo Marchiori 808*9ceaae4aSArrigo Marchiori- const unsigned long long actualCountBytesDirect 809*9ceaae4aSArrigo Marchiori+ actualCountBytesDirect 810*9ceaae4aSArrigo Marchiori = testingAccountingGetCountBytesDirect(parser); 811*9ceaae4aSArrigo Marchiori- const unsigned long long actualCountBytesIndirect 812*9ceaae4aSArrigo Marchiori+ actualCountBytesIndirect 813*9ceaae4aSArrigo Marchiori = testingAccountingGetCountBytesIndirect(parser); 814*9ceaae4aSArrigo Marchiori 815*9ceaae4aSArrigo Marchiori XML_ParserFree(parser); 816