From 834d34eee897a08c2d640d70ea9e8517c835c496 Mon Sep 17 00:00:00 2001 From: Remi Collet Date: Tue, 12 Dec 2023 08:26:12 +0100 Subject: refresh patches (avoid offset) --- php-7.2.0-includedir.patch | 2 +- php-7.2.0-oci8conf.patch | 26 +- php-7.4.0-httpd.patch | 2 +- php-7.4.0-libdb.patch | 2 +- php-7.4.0-phpize.patch | 4 +- php-8.0.0-phpinfo.patch | 6 +- php-8.0.10-phar-sha.patch | 8 +- php-8.0.19-parser.patch | 2 +- php-8.0.30-libxml212.patch | 681 +++++++++++++++++++++++++++++++++++++++++++++ php-8.0.6-deprecated.patch | 22 +- 10 files changed, 707 insertions(+), 48 deletions(-) create mode 100644 php-8.0.30-libxml212.patch diff --git a/php-7.2.0-includedir.patch b/php-7.2.0-includedir.patch index 7a42cd6..b6205ad 100644 --- a/php-7.2.0-includedir.patch +++ b/php-7.2.0-includedir.patch @@ -1,6 +1,6 @@ --- php-7.2.0/configure.ac.includedir +++ php-7.2.0/configure.ac -@@ -1230,7 +1230,7 @@ +@@ -1262,7 +1262,7 @@ EXPANDED_DATADIR=$datadir EXPANDED_PHP_CONFIG_FILE_PATH=`eval echo "$PHP_CONFIG_FILE_PATH"` EXPANDED_PHP_CONFIG_FILE_SCAN_DIR=`eval echo "$PHP_CONFIG_FILE_SCAN_DIR"` diff --git a/php-7.2.0-oci8conf.patch b/php-7.2.0-oci8conf.patch index 0ad16a1..c9ab1f5 100644 --- a/php-7.2.0-oci8conf.patch +++ b/php-7.2.0-oci8conf.patch @@ -1,7 +1,7 @@ diff -up ./ext/ldap/php_ldap.h.remi-oci8 ./ext/ldap/php_ldap.h --- ./ext/ldap/php_ldap.h.remi-oci8 2017-06-20 15:45:35.000000000 +0200 +++ ./ext/ldap/php_ldap.h 2017-06-20 16:55:01.640203868 +0200 -@@ -27,7 +27,7 @@ +@@ -23,7 +23,7 @@ #include #endif @@ -10,26 +10,4 @@ diff -up ./ext/ldap/php_ldap.h.remi-oci8 ./ext/ldap/php_ldap.h extern zend_module_entry ldap_module_entry; #define ldap_module_ptr &ldap_module_entry -diff -up ./ext/oci8/config.m4.remi-oci8 ./ext/oci8/config.m4 ---- ./ext/oci8/config.m4.remi-oci8 2017-06-20 15:45:39.000000000 +0200 -+++ ./ext/oci8/config.m4 2017-06-20 16:55:01.640203868 +0200 -@@ -372,6 +372,7 @@ if test "$PHP_OCI8" != "no"; then - - dnl Header directory for Instant Client SDK RPM install - OCISDKRPMINC=`echo "$PHP_OCI8_INSTANT_CLIENT" | $PHP_OCI8_SED -e 's!^/usr/lib/oracle/\(.*\)/client\('${PHP_OCI8_IC_LIBDIR_SUFFIX}'\)*/lib[/]*$!/usr/include/oracle/\1/client\2!'` -+ OCISDKRPMINC=`echo "$PHP_OCI8_INSTANT_CLIENT" | $PHP_OCI8_SED -e 's!^/usr/\(lib64\|lib\)/oracle/\(.*\)/\(client64\|client\)/lib[/]*$!/usr/include/oracle/\2/\3!'` - - dnl Header directory for Instant Client SDK zip file install - OCISDKZIPINC=$PHP_OCI8_INSTANT_CLIENT/sdk/include -diff -up ./ext/pdo_oci/config.m4.remi-oci8 ./ext/pdo_oci/config.m4 ---- ./ext/pdo_oci/config.m4.remi-oci8 2017-06-20 16:55:01.640203868 +0200 -+++ ./ext/pdo_oci/config.m4 2017-06-20 17:16:03.053538358 +0200 -@@ -93,7 +93,7 @@ if test "$PHP_PDO_OCI" != "no"; then - - AC_MSG_CHECKING([for oci.h]) - dnl Header directory for Instant Client SDK RPM install -- OCISDKRPMINC=`echo "$PDO_OCI_LIB_DIR" | $PHP_PDO_OCI_SED -e 's!^\(.*\)/lib/oracle/\(.*\)/\('${PDO_OCI_CLIENT_DIR}'\)/lib[/]*$!\1/include/oracle/\2/\3!'` -+ OCISDKRPMINC=`echo "$PDO_OCI_LIB_DIR" | $PHP_PDO_OCI_SED -e 's!^\(.*\)/\(lib64\|lib\)/oracle/\(.*\)/\('${PDO_OCI_CLIENT_DIR}'\)/lib[/]*$!\1/include/oracle/\3/\4!'` - - dnl Header directory for manual installation - OCISDKMANINC=`echo "$PDO_OCI_LIB_DIR" | $PHP_PDO_OCI_SED -e 's!^\(.*\)/lib[/]*$!\1/include!'` + diff --git a/php-7.4.0-httpd.patch b/php-7.4.0-httpd.patch index 34f7c8a..4313adb 100644 --- a/php-7.4.0-httpd.patch +++ b/php-7.4.0-httpd.patch @@ -7,7 +7,7 @@ mod_php is build twice diff --git a/sapi/apache2handler/config.m4 b/sapi/apache2handler/config.m4 --- a/sapi/apache2handler/config.m4 +++ b/sapi/apache2handler/config.m4 -@@ -105,17 +105,6 @@ if test "$PHP_APXS2" != "no"; then +@@ -108,17 +108,6 @@ if test "$PHP_APXS2" != "no"; then ;; esac diff --git a/php-7.4.0-libdb.patch b/php-7.4.0-libdb.patch index d7c6289..aa4e214 100644 --- a/php-7.4.0-libdb.patch +++ b/php-7.4.0-libdb.patch @@ -79,7 +79,7 @@ diff -up ./ext/dba/dba.c.libdb ./ext/dba/dba.c PHP_MINIT_FUNCTION(dba); PHP_MSHUTDOWN_FUNCTION(dba); PHP_MINFO_FUNCTION(dba); -@@ -459,6 +463,10 @@ PHP_MINFO_FUNCTION(dba) +@@ -452,6 +456,10 @@ PHP_MINFO_FUNCTION(dba) php_info_print_table_start(); php_info_print_table_row(2, "DBA support", "enabled"); diff --git a/php-7.4.0-phpize.patch b/php-7.4.0-phpize.patch index fb99f3e..76c3ed5 100644 --- a/php-7.4.0-phpize.patch +++ b/php-7.4.0-phpize.patch @@ -1,7 +1,7 @@ diff -up ./scripts/phpize.in.headers ./scripts/phpize.in --- ./scripts/phpize.in.headers 2019-07-23 10:05:11.000000000 +0200 +++ ./scripts/phpize.in 2019-07-23 10:18:13.648098089 +0200 -@@ -165,6 +165,15 @@ phpize_autotools() +@@ -166,6 +166,15 @@ phpize_autotools() $PHP_AUTOHEADER || exit 1 } @@ -17,7 +17,7 @@ diff -up ./scripts/phpize.in.headers ./scripts/phpize.in # Main script case "$1" in -@@ -183,12 +192,15 @@ case "$1" in +@@ -184,12 +193,15 @@ case "$1" in # Version --version|-v) diff --git a/php-8.0.0-phpinfo.patch b/php-8.0.0-phpinfo.patch index 391d996..bd1e283 100644 --- a/php-8.0.0-phpinfo.patch +++ b/php-8.0.0-phpinfo.patch @@ -24,7 +24,7 @@ diff --git a/configure.ac b/configure.ac index 9d9c8b155b07..143dc061346b 100644 --- a/configure.ac +++ b/configure.ac -@@ -1289,10 +1289,10 @@ if test -n "${PHP_BUILD_PROVIDER}"; then +@@ -1300,10 +1300,10 @@ if test -n "${PHP_BUILD_PROVIDER}"; then AC_DEFINE_UNQUOTED(PHP_BUILD_PROVIDER,"$PHP_BUILD_PROVIDER",[build provider]) fi if test -n "${PHP_BUILD_COMPILER}"; then @@ -41,7 +41,7 @@ diff --git a/ext/standard/info.c b/ext/standard/info.c index 153cb6cde014..8ceef31d9fe4 100644 --- a/ext/standard/info.c +++ b/ext/standard/info.c -@@ -798,11 +798,11 @@ PHPAPI ZEND_COLD void php_print_info(int flag) +@@ -799,11 +799,11 @@ PHPAPI ZEND_COLD void php_print_info(int flag) #ifdef PHP_BUILD_PROVIDER php_info_print_table_row(2, "Build Provider", PHP_BUILD_PROVIDER); #endif @@ -82,7 +82,7 @@ index 5092fb0ffd68..9d296acec631 100644 diff -up ./ext/standard/info.c.phpinfo ./ext/standard/info.c --- ./ext/standard/info.c.phpinfo 2020-07-21 10:49:31.000000000 +0200 +++ ./ext/standard/info.c 2020-07-21 11:41:56.295633523 +0200 -@@ -804,9 +804,6 @@ PHPAPI ZEND_COLD void php_print_info(int +@@ -805,9 +805,6 @@ PHPAPI ZEND_COLD void php_print_info(int #ifdef PHP_BUILD_ARCH php_info_print_table_row(2, "Architecture", PHP_BUILD_ARCH); #endif diff --git a/php-8.0.10-phar-sha.patch b/php-8.0.10-phar-sha.patch index 7d6fa2c..9a6cea2 100644 --- a/php-8.0.10-phar-sha.patch +++ b/php-8.0.10-phar-sha.patch @@ -203,7 +203,7 @@ index 77f21cef9da53..bc08e4edde05d 100644 efree(savebuf); efree(sig); php_stream_close(fp); -@@ -3162,7 +3164,9 @@ int phar_flush(phar_archive_data *phar, char *user_stub, zend_long len, int conv +@@ -3171,7 +3173,9 @@ int phar_flush(phar_archive_data *phar, char *user_stub, zend_long len, int conv php_stream_write(newfile, digest, digest_len); efree(digest); @@ -284,7 +284,7 @@ index 9c1e5f2fa1eef..c05970e657f18 100644 } #endif } -@@ -3028,6 +3032,8 @@ PHP_METHOD(Phar, setSignatureAlgorithm) +@@ -3029,6 +3033,8 @@ PHP_METHOD(Phar, setSignatureAlgorithm) case PHAR_SIG_MD5: case PHAR_SIG_SHA1: case PHAR_SIG_OPENSSL: @@ -293,7 +293,7 @@ index 9c1e5f2fa1eef..c05970e657f18 100644 if (phar_obj->archive->is_persistent && FAILURE == phar_copy_on_write(&(phar_obj->archive))) { zend_throw_exception_ex(phar_ce_PharException, 0, "phar \"%s\" is persistent, unable to copy on write", phar_obj->archive->fname); RETURN_THROWS(); -@@ -3066,19 +3072,25 @@ PHP_METHOD(Phar, getSignature) +@@ -3067,19 +3073,25 @@ PHP_METHOD(Phar, getSignature) add_assoc_stringl(return_value, "hash", phar_obj->archive->signature, phar_obj->archive->sig_len); switch(phar_obj->archive->sig_flags) { case PHAR_SIG_MD5: @@ -324,7 +324,7 @@ index 9c1e5f2fa1eef..c05970e657f18 100644 break; default: unknown = strpprintf(0, "Unknown (%u)", phar_obj->archive->sig_flags); -@@ -5103,6 +5115,8 @@ void phar_object_init(void) /* {{{ */ +@@ -5104,6 +5116,8 @@ void phar_object_init(void) /* {{{ */ REGISTER_PHAR_CLASS_CONST_LONG(phar_ce_archive, "PHPS", PHAR_MIME_PHPS) REGISTER_PHAR_CLASS_CONST_LONG(phar_ce_archive, "MD5", PHAR_SIG_MD5) REGISTER_PHAR_CLASS_CONST_LONG(phar_ce_archive, "OPENSSL", PHAR_SIG_OPENSSL) diff --git a/php-8.0.19-parser.patch b/php-8.0.19-parser.patch index 8a28e4d..af41d8a 100644 --- a/php-8.0.19-parser.patch +++ b/php-8.0.19-parser.patch @@ -1,7 +1,7 @@ diff -up ./build/gen_stub.php.syslib ./build/gen_stub.php --- ./build/gen_stub.php.syslib 2020-06-25 08:11:51.782046813 +0200 +++ ./build/gen_stub.php 2020-06-25 08:13:11.188860368 +0200 -@@ -1075,6 +1075,12 @@ function initPhpParser() { +@@ -1801,6 +1801,12 @@ function initPhpParser() { } $isInitialized = true; diff --git a/php-8.0.30-libxml212.patch b/php-8.0.30-libxml212.patch new file mode 100644 index 0000000..2fb4cd6 --- /dev/null +++ b/php-8.0.30-libxml212.patch @@ -0,0 +1,681 @@ +From fe8de9dc9194de70b32afd78b89d7cc8ca577b27 Mon Sep 17 00:00:00 2001 +From: Niels Dossche <7771979+nielsdos@users.noreply.github.com> +Date: Fri, 17 Nov 2023 19:45:40 +0100 +Subject: [PATCH 1/4] Fix GH-12702: libxml2 2.12.0 issue building from src + +Fixes GH-12702. + +Co-authored-by: nono303 +--- + ext/dom/document.c | 1 + + ext/libxml/php_libxml.h | 1 + + 2 files changed, 2 insertions(+) + +diff --git a/ext/dom/document.c b/ext/dom/document.c +index 02522b5014..6d1b074085 100644 +--- a/ext/dom/document.c ++++ b/ext/dom/document.c +@@ -23,6 +23,7 @@ + #if defined(HAVE_LIBXML) && defined(HAVE_DOM) + #include "php_dom.h" + #include ++#include + #ifdef LIBXML_SCHEMAS_ENABLED + #include + #include +diff --git a/ext/libxml/php_libxml.h b/ext/libxml/php_libxml.h +index d0ce7cec71..02717417a7 100644 +--- a/ext/libxml/php_libxml.h ++++ b/ext/libxml/php_libxml.h +@@ -35,6 +35,7 @@ extern zend_module_entry libxml_module_entry; + + #include "zend_smart_str.h" + #include ++#include + + #define LIBXML_SAVE_NOEMPTYTAG 1<<2 + +-- +2.43.0 + +From f344d24ed5d723a132f3a793eb2ee8204195067c Mon Sep 17 00:00:00 2001 +From: Niels Dossche <7771979+nielsdos@users.noreply.github.com> +Date: Fri, 1 Dec 2023 18:03:35 +0100 +Subject: [PATCH 2/4] Fix libxml2 2.12 build due to API breaks + +See https://github.com/php/php-src/actions/runs/7062192818/job/19225478601 +--- + ext/libxml/libxml.c | 14 ++++++++++---- + ext/soap/php_sdl.c | 2 +- + 2 files changed, 11 insertions(+), 5 deletions(-) + +diff --git a/ext/libxml/libxml.c b/ext/libxml/libxml.c +index 73486ae253..5700492f0a 100644 +--- a/ext/libxml/libxml.c ++++ b/ext/libxml/libxml.c +@@ -481,7 +481,11 @@ static void _php_libxml_free_error(void *ptr) + xmlResetError((xmlErrorPtr) ptr); + } + +-static void _php_list_set_error_structure(xmlErrorPtr error, const char *msg) ++#if LIBXML_VERSION >= 21200 ++static void _php_list_set_error_structure(const xmlError *error, const char *msg) ++#else ++static void _php_list_set_error_structure(xmlError *error, const char *msg) ++#endif + { + xmlError error_copy; + int ret; +@@ -732,7 +736,11 @@ PHP_LIBXML_API void php_libxml_ctx_warning(void *ctx, const char *msg, ...) + va_end(args); + } + ++#if LIBXML_VERSION >= 21200 ++PHP_LIBXML_API void php_libxml_structured_error_handler(void *userData, const xmlError *error) ++#else + PHP_LIBXML_API void php_libxml_structured_error_handler(void *userData, xmlErrorPtr error) ++#endif + { + _php_list_set_error_structure(error, NULL); + +@@ -1035,11 +1043,9 @@ PHP_FUNCTION(libxml_use_internal_errors) + /* {{{ Retrieve last error from libxml */ + PHP_FUNCTION(libxml_get_last_error) + { +- xmlErrorPtr error; +- + ZEND_PARSE_PARAMETERS_NONE(); + +- error = xmlGetLastError(); ++ const xmlError *error = xmlGetLastError(); + + if (error) { + object_init_ex(return_value, libxmlerror_class_entry); +diff --git a/ext/soap/php_sdl.c b/ext/soap/php_sdl.c +index e5e7f2f955..6060f63450 100644 +--- a/ext/soap/php_sdl.c ++++ b/ext/soap/php_sdl.c +@@ -331,7 +331,7 @@ static void load_wsdl_ex(zval *this_ptr, char *struri, sdlCtx *ctx, int include) + sdl_restore_uri_credentials(ctx); + + if (!wsdl) { +- xmlErrorPtr xmlErrorPtr = xmlGetLastError(); ++ const xmlError *xmlErrorPtr = xmlGetLastError(); + + if (xmlErrorPtr) { + soap_error2(E_ERROR, "Parsing WSDL: Couldn't load from '%s' : %s", struri, xmlErrorPtr->message); +-- +2.43.0 + +From 8e1a378b5e4d01c99c4654114e4cf4c0953b5b5a Mon Sep 17 00:00:00 2001 +From: Niels Dossche <7771979+nielsdos@users.noreply.github.com> +Date: Sat, 29 Apr 2023 21:07:50 +0200 +Subject: [PATCH 3/4] Fix GH-11160: Few tests failed building with new libxml + 2.11.0 + +It's possible to categorise the failures into 2 categories: + - Changed error message. In this case we either duplicate the test and + modify the error message. Or if the change in error message is + small, we use the EXPECTF matchers to make the test compatible with both + old and new versions of libxml2. + - Missing warnings. This is caused by a change in libxml2 where the + parser started using SAX APIs internally [1]. In this case the + error_type passed to php_libxml_internal_error_handler() changed from + PHP_LIBXML_ERROR to PHP_LIBXML_CTX_WARNING because it internally + started to use the SAX handlers instead of the generic handlers. + However, for the SAX handlers the current input stack is empty, so + nothing is actually printed. I fixed this by falling back to a + regular warning without a filename & line number reference, which + mimicks the old behaviour. Furthermore, this change now also shows + an additional warning in a test which was previously hidden. + +[1] https://gitlab.gnome.org/GNOME/libxml2/-/commit/9a82b94a94bd310db426edd453b0f38c6c8f69f5 + +Closes GH-11162. +--- + .../DOMDocument_loadXML_error2_gte2_11.phpt | 34 +++++++ + ...> DOMDocument_loadXML_error2_pre2_11.phpt} | 4 + + .../DOMDocument_load_error2_gte2_11.phpt | 34 +++++++ + ...t => DOMDocument_load_error2_pre2_11.phpt} | 4 + + ext/libxml/libxml.c | 2 + + ext/libxml/tests/bug61367-read_2.phpt | 2 +- + .../tests/libxml_disable_entity_loader_2.phpt | 2 +- + ...set_external_entity_loader_variation2.phpt | 2 + + ext/xml/tests/bug26614_libxml_gte2_11.phpt | 95 +++++++++++++++++++ + ...bxml.phpt => bug26614_libxml_pre2_11.phpt} | 1 + + 10 files changed, 178 insertions(+), 2 deletions(-) + create mode 100644 ext/dom/tests/DOMDocument_loadXML_error2_gte2_11.phpt + rename ext/dom/tests/{DOMDocument_loadXML_error2.phpt => DOMDocument_loadXML_error2_pre2_11.phpt} (90%) + create mode 100644 ext/dom/tests/DOMDocument_load_error2_gte2_11.phpt + rename ext/dom/tests/{DOMDocument_load_error2.phpt => DOMDocument_load_error2_pre2_11.phpt} (90%) + create mode 100644 ext/xml/tests/bug26614_libxml_gte2_11.phpt + rename ext/xml/tests/{bug26614_libxml.phpt => bug26614_libxml_pre2_11.phpt} (96%) + +diff --git a/ext/dom/tests/DOMDocument_loadXML_error2_gte2_11.phpt b/ext/dom/tests/DOMDocument_loadXML_error2_gte2_11.phpt +new file mode 100644 +index 0000000000..ff5ceb3fbe +--- /dev/null ++++ b/ext/dom/tests/DOMDocument_loadXML_error2_gte2_11.phpt +@@ -0,0 +1,34 @@ ++--TEST-- ++Test DOMDocument::loadXML() detects not-well formed XML ++--SKIPIF-- ++= 2.11'); ++?> ++--DESCRIPTION-- ++This test verifies the method detects attributes values not closed between " or ' ++Environment variables used in the test: ++- XML_FILE: the xml file to load ++- LOAD_OPTIONS: the second parameter to pass to the method ++- EXPECTED_RESULT: the expected result ++--CREDITS-- ++Antonio Diaz Ruiz ++--INI-- ++assert.bail=true ++--EXTENSIONS-- ++dom ++--ENV-- ++XML_FILE=/not_well_formed2.xml ++LOAD_OPTIONS=0 ++EXPECTED_RESULT=0 ++--FILE_EXTERNAL-- ++domdocumentloadxml_test_method.inc ++--EXPECTF-- ++Warning: DOMDocument::loadXML(): AttValue: " or ' expected in Entity, line: 4 in %s on line %d ++ ++Warning: DOMDocument::loadXML(): internal error: xmlParseStartTag: problem parsing attributes in Entity, line: 4 in %s on line %d ++ ++Warning: DOMDocument::loadXML(): Couldn't find end of Start Tag book line 4 in Entity, line: 4 in %s on line %d ++ ++Warning: DOMDocument::loadXML(): Opening and ending tag mismatch: books line 3 and book in Entity, line: 7 in %s on line %d ++ ++Warning: DOMDocument::loadXML(): Extra content at the end of the document in Entity, line: 8 in %s on line %d +diff --git a/ext/dom/tests/DOMDocument_loadXML_error2.phpt b/ext/dom/tests/DOMDocument_loadXML_error2_pre2_11.phpt +similarity index 90% +rename from ext/dom/tests/DOMDocument_loadXML_error2.phpt +rename to ext/dom/tests/DOMDocument_loadXML_error2_pre2_11.phpt +index 6d56a317ed..0e36d20905 100644 +--- a/ext/dom/tests/DOMDocument_loadXML_error2.phpt ++++ b/ext/dom/tests/DOMDocument_loadXML_error2_pre2_11.phpt +@@ -1,5 +1,9 @@ + --TEST-- + Test DOMDocument::loadXML() detects not-well formed XML ++--SKIPIF-- ++= 21100) die('skip libxml2 test variant for version < 2.11'); ++?> + --DESCRIPTION-- + This test verifies the method detects attributes values not closed between " or ' + Environment variables used in the test: +diff --git a/ext/dom/tests/DOMDocument_load_error2_gte2_11.phpt b/ext/dom/tests/DOMDocument_load_error2_gte2_11.phpt +new file mode 100644 +index 0000000000..32b6bf1611 +--- /dev/null ++++ b/ext/dom/tests/DOMDocument_load_error2_gte2_11.phpt +@@ -0,0 +1,34 @@ ++--TEST-- ++Test DOMDocument::load() detects not-well formed ++--SKIPIF-- ++= 2.11'); ++?> ++--DESCRIPTION-- ++This test verifies the method detects attributes values not closed between " or ' ++Environment variables used in the test: ++- XML_FILE: the xml file to load ++- LOAD_OPTIONS: the second parameter to pass to the method ++- EXPECTED_RESULT: the expected result ++--CREDITS-- ++Antonio Diaz Ruiz ++--INI-- ++assert.bail=true ++--EXTENSIONS-- ++dom ++--ENV-- ++XML_FILE=/not_well_formed2.xml ++LOAD_OPTIONS=0 ++EXPECTED_RESULT=0 ++--FILE_EXTERNAL-- ++domdocumentload_test_method.inc ++--EXPECTF-- ++Warning: DOMDocument::load(): AttValue: " or ' expected in %s on line %d ++ ++Warning: DOMDocument::load(): internal error: xmlParseStartTag: problem parsing attributes in %s on line %d ++ ++Warning: DOMDocument::load(): Couldn't find end of Start Tag book line 4 in %s on line %d ++ ++Warning: DOMDocument::load(): Opening and ending tag mismatch: books line 3 and book in %s on line %d ++ ++Warning: DOMDocument::load(): Extra content at the end of the document in %s on line %d +diff --git a/ext/dom/tests/DOMDocument_load_error2.phpt b/ext/dom/tests/DOMDocument_load_error2_pre2_11.phpt +similarity index 90% +rename from ext/dom/tests/DOMDocument_load_error2.phpt +rename to ext/dom/tests/DOMDocument_load_error2_pre2_11.phpt +index f450cf1654..b97fff9d2f 100644 +--- a/ext/dom/tests/DOMDocument_load_error2.phpt ++++ b/ext/dom/tests/DOMDocument_load_error2_pre2_11.phpt +@@ -1,5 +1,9 @@ + --TEST-- + Test DOMDocument::load() detects not-well formed XML ++--SKIPIF-- ++= 21100) die('skip libxml2 test variant for version < 2.11'); ++?> + --DESCRIPTION-- + This test verifies the method detects attributes values not closed between " or ' + Environment variables used in the test: +diff --git a/ext/libxml/libxml.c b/ext/libxml/libxml.c +index 5700492f0a..554fcc34ff 100644 +--- a/ext/libxml/libxml.c ++++ b/ext/libxml/libxml.c +@@ -529,6 +529,8 @@ static void php_libxml_ctx_error_level(int level, void *ctx, const char *msg) + } else { + php_error_docref(NULL, level, "%s in Entity, line: %d", msg, parser->input->line); + } ++ } else { ++ php_error_docref(NULL, E_WARNING, "%s", msg); + } + } + +diff --git a/ext/libxml/tests/bug61367-read_2.phpt b/ext/libxml/tests/bug61367-read_2.phpt +index ed6576aa75..b935261cb2 100644 +--- a/ext/libxml/tests/bug61367-read_2.phpt ++++ b/ext/libxml/tests/bug61367-read_2.phpt +@@ -55,6 +55,6 @@ bool(true) + int(4) + bool(true) + +-Warning: DOMDocument::loadXML(): I/O warning : failed to load external entity "file:///%s/test_bug_61367-read/bad" in %s on line %d ++Warning: DOMDocument::loadXML(): %Sfailed to load external entity "file:///%s/test_bug_61367-read/bad" in %s on line %d + + Warning: Attempt to read property "nodeValue" on null in %s on line %d +diff --git a/ext/libxml/tests/libxml_disable_entity_loader_2.phpt b/ext/libxml/tests/libxml_disable_entity_loader_2.phpt +index caa7356ad3..d90f909ac2 100644 +--- a/ext/libxml/tests/libxml_disable_entity_loader_2.phpt ++++ b/ext/libxml/tests/libxml_disable_entity_loader_2.phpt +@@ -38,6 +38,6 @@ bool(true) + Deprecated: Function libxml_disable_entity_loader() is deprecated in %s on line %d + bool(false) + +-Warning: DOMDocument::loadXML(): I/O warning : failed to load external entity "%s" in %s on line %d ++Warning: DOMDocument::loadXML(): %Sfailed to load external entity "%s" in %s on line %d + bool(true) + Done +diff --git a/ext/libxml/tests/libxml_set_external_entity_loader_variation2.phpt b/ext/libxml/tests/libxml_set_external_entity_loader_variation2.phpt +index 87894bcb91..ddaf9bfa50 100644 +--- a/ext/libxml/tests/libxml_set_external_entity_loader_variation2.phpt ++++ b/ext/libxml/tests/libxml_set_external_entity_loader_variation2.phpt +@@ -39,6 +39,8 @@ echo "Done.\n"; + string(10) "-//FOO/BAR" + string(%d) "%sfoobar.dtd" + ++Warning: DOMDocument::validate(): Failed to load external entity "-//FOO/BAR" in %s on line %d ++ + Warning: DOMDocument::validate(): Could not load the external subset "foobar.dtd" in %s on line %d + bool(false) + bool(true) +diff --git a/ext/xml/tests/bug26614_libxml_gte2_11.phpt b/ext/xml/tests/bug26614_libxml_gte2_11.phpt +new file mode 100644 +index 0000000000..9a81b67686 +--- /dev/null ++++ b/ext/xml/tests/bug26614_libxml_gte2_11.phpt +@@ -0,0 +1,95 @@ ++--TEST-- ++Bug #26614 (CDATA sections skipped on line count) ++--EXTENSIONS-- ++xml ++--SKIPIF-- ++= 2.11'); ++?> ++--FILE-- ++ ++ ++ ++'; ++ ++// Case 2: replace some characters so that we get comments instead ++$xmls["Comment"] =' ++ ++ ++'; ++ ++// Case 3: replace even more characters so that only textual data is left ++$xmls["Text"] =' ++ ++-!-- ATA[ ++multi ++line ++CDATA ++block ++--- ++'; ++ ++function startElement($parser, $name, $attrs) { ++ printf("<$name> at line %d, col %d (byte %d)\n", ++ xml_get_current_line_number($parser), ++ xml_get_current_column_number($parser), ++ xml_get_current_byte_index($parser)); ++} ++ ++function endElement($parser, $name) { ++ printf(" at line %d, col %d (byte %d)\n", ++ xml_get_current_line_number($parser), ++ xml_get_current_column_number($parser), ++ xml_get_current_byte_index($parser)); ++} ++ ++function characterData($parser, $data) { ++ // dummy ++} ++ ++foreach ($xmls as $desc => $xml) { ++ echo "$desc\n"; ++ $xml_parser = xml_parser_create(); ++ xml_set_element_handler($xml_parser, "startElement", "endElement"); ++ xml_set_character_data_handler($xml_parser, "characterData"); ++ if (!xml_parse($xml_parser, $xml, true)) ++ echo "Error: ".xml_error_string(xml_get_error_code($xml_parser))."\n"; ++ xml_parser_free($xml_parser); ++} ++?> ++--EXPECTF-- ++CDATA ++ at line 2, col %d (byte 50) ++ at line 9, col %d (byte 96) ++Comment ++ at line 2, col %d (byte 50) ++ at line 9, col %d (byte 96) ++Text ++ at line 2, col %d (byte 50) ++ at line 9, col %d (byte 96) +diff --git a/ext/xml/tests/bug26614_libxml.phpt b/ext/xml/tests/bug26614_libxml_pre2_11.phpt +similarity index 96% +rename from ext/xml/tests/bug26614_libxml.phpt +rename to ext/xml/tests/bug26614_libxml_pre2_11.phpt +index b6c0b87581..90283850d2 100644 +--- a/ext/xml/tests/bug26614_libxml.phpt ++++ b/ext/xml/tests/bug26614_libxml_pre2_11.phpt +@@ -4,6 +4,7 @@ Bug #26614 (CDATA sections skipped on line count) + = 21100) die('skip libxml2 test variant for version < 2.11'); + ?> + --FILE-- + +Date: Wed, 29 Nov 2023 20:49:29 +0100 +Subject: [PATCH 4/4] Test fixes for libxml2 2.12.0 + +--- + ext/dom/tests/DOMDocument_loadXML_error1.phpt | 4 +++ + .../DOMDocument_loadXML_error1_gte2_12.phpt | 26 ++++++++++++++++ + .../DOMDocument_loadXML_error2_gte2_11.phpt | 2 +- + .../DOMDocument_loadXML_error2_gte2_12.phpt | 30 +++++++++++++++++++ + ext/dom/tests/DOMDocument_load_error1.phpt | 4 +++ + .../DOMDocument_load_error1_gte2_12.phpt | 26 ++++++++++++++++ + .../DOMDocument_load_error2_gte2_11.phpt | 2 +- + .../DOMDocument_load_error2_gte2_12.phpt | 30 +++++++++++++++++++ + ext/xml/tests/bug81351.phpt | 4 +-- + ext/xml/tests/xml_error_string_basic.phpt | 6 ++-- + 10 files changed, 127 insertions(+), 7 deletions(-) + create mode 100644 ext/dom/tests/DOMDocument_loadXML_error1_gte2_12.phpt + create mode 100644 ext/dom/tests/DOMDocument_loadXML_error2_gte2_12.phpt + create mode 100644 ext/dom/tests/DOMDocument_load_error1_gte2_12.phpt + create mode 100644 ext/dom/tests/DOMDocument_load_error2_gte2_12.phpt + +diff --git a/ext/dom/tests/DOMDocument_loadXML_error1.phpt b/ext/dom/tests/DOMDocument_loadXML_error1.phpt +index 4d3b81db79..0549d67630 100644 +--- a/ext/dom/tests/DOMDocument_loadXML_error1.phpt ++++ b/ext/dom/tests/DOMDocument_loadXML_error1.phpt +@@ -1,5 +1,9 @@ + --TEST-- + Test DOMDocument::loadXML() detects not-well formed XML ++--SKIPIF-- ++= 21200) die('skip libxml2 test variant for version < 2.12'); ++?> + --DESCRIPTION-- + This test verifies the method detects an opening and ending tag mismatch + Environment variables used in the test: +diff --git a/ext/dom/tests/DOMDocument_loadXML_error1_gte2_12.phpt b/ext/dom/tests/DOMDocument_loadXML_error1_gte2_12.phpt +new file mode 100644 +index 0000000000..e1ded0ffad +--- /dev/null ++++ b/ext/dom/tests/DOMDocument_loadXML_error1_gte2_12.phpt +@@ -0,0 +1,26 @@ ++--TEST-- ++Test DOMDocument::loadXML() detects not-well formed XML ++--SKIPIF-- ++= 2.12'); ++?> ++--DESCRIPTION-- ++This test verifies the method detects an opening and ending tag mismatch ++Environment variables used in the test: ++- XML_FILE: the xml file to load ++- LOAD_OPTIONS: the second parameter to pass to the method ++- EXPECTED_RESULT: the expected result ++--CREDITS-- ++Antonio Diaz Ruiz ++--EXTENSIONS-- ++dom ++--ENV-- ++XML_FILE=/not_well_formed.xml ++LOAD_OPTIONS=0 ++EXPECTED_RESULT=0 ++--FILE_EXTERNAL-- ++domdocumentloadxml_test_method.inc ++--EXPECTF-- ++Warning: DOMDocument::load%r(XML){0,1}%r(): Opening and ending tag mismatch: title line 5 and book %s ++ ++Warning: DOMDocument::load%r(XML){0,1}%r(): %rexpected '>'|Opening and ending tag mismatch: book line (4|5) and books%r %s +diff --git a/ext/dom/tests/DOMDocument_loadXML_error2_gte2_11.phpt b/ext/dom/tests/DOMDocument_loadXML_error2_gte2_11.phpt +index ff5ceb3fbe..f52d334813 100644 +--- a/ext/dom/tests/DOMDocument_loadXML_error2_gte2_11.phpt ++++ b/ext/dom/tests/DOMDocument_loadXML_error2_gte2_11.phpt +@@ -2,7 +2,7 @@ + Test DOMDocument::loadXML() detects not-well formed XML + --SKIPIF-- + = 2.11'); ++if (LIBXML_VERSION < 21100 || LIBXML_VERSION >= 21200) die('skip libxml2 test variant for version >= 2.11 && <= 2.12'); + ?> + --DESCRIPTION-- + This test verifies the method detects attributes values not closed between " or ' +diff --git a/ext/dom/tests/DOMDocument_loadXML_error2_gte2_12.phpt b/ext/dom/tests/DOMDocument_loadXML_error2_gte2_12.phpt +new file mode 100644 +index 0000000000..6a3ff5841f +--- /dev/null ++++ b/ext/dom/tests/DOMDocument_loadXML_error2_gte2_12.phpt +@@ -0,0 +1,30 @@ ++--TEST-- ++Test DOMDocument::loadXML() detects not-well formed XML ++--SKIPIF-- ++= 2.12'); ++?> ++--DESCRIPTION-- ++This test verifies the method detects attributes values not closed between " or ' ++Environment variables used in the test: ++- XML_FILE: the xml file to load ++- LOAD_OPTIONS: the second parameter to pass to the method ++- EXPECTED_RESULT: the expected result ++--CREDITS-- ++Antonio Diaz Ruiz ++--EXTENSIONS-- ++dom ++--ENV-- ++XML_FILE=/not_well_formed2.xml ++LOAD_OPTIONS=0 ++EXPECTED_RESULT=0 ++--FILE_EXTERNAL-- ++domdocumentloadxml_test_method.inc ++--EXPECTF-- ++Warning: DOMDocument::loadXML(): AttValue: " or ' expected in Entity, line: 4 in %s on line %d ++ ++Warning: DOMDocument::loadXML(): internal error: xmlParseStartTag: problem parsing attributes in Entity, line: 4 in %s on line %d ++ ++Warning: DOMDocument::loadXML(): Couldn't find end of Start Tag book line 4 in Entity, line: 4 in %s on line %d ++ ++Warning: DOMDocument::loadXML(): Opening and ending tag mismatch: books line 3 and book in Entity, line: 7 in %s on line %d +diff --git a/ext/dom/tests/DOMDocument_load_error1.phpt b/ext/dom/tests/DOMDocument_load_error1.phpt +index 8ac181d769..4416f5f6fe 100644 +--- a/ext/dom/tests/DOMDocument_load_error1.phpt ++++ b/ext/dom/tests/DOMDocument_load_error1.phpt +@@ -1,5 +1,9 @@ + --TEST-- + Test DOMDocument::load() detects not-well formed XML ++--SKIPIF-- ++= 21200) die('skip libxml2 test variant for version < 2.12'); ++?> + --DESCRIPTION-- + This test verifies the method detects an opening and ending tag mismatch + Environment variables used in the test: +diff --git a/ext/dom/tests/DOMDocument_load_error1_gte2_12.phpt b/ext/dom/tests/DOMDocument_load_error1_gte2_12.phpt +new file mode 100644 +index 0000000000..183c8406fd +--- /dev/null ++++ b/ext/dom/tests/DOMDocument_load_error1_gte2_12.phpt +@@ -0,0 +1,26 @@ ++--TEST-- ++Test DOMDocument::load() detects not-well formed XML ++--SKIPIF-- ++= 2.12'); ++?> ++--DESCRIPTION-- ++This test verifies the method detects an opening and ending tag mismatch ++Environment variables used in the test: ++- XML_FILE: the xml file to load ++- LOAD_OPTIONS: the second parameter to pass to the method ++- EXPECTED_RESULT: the expected result ++--CREDITS-- ++Antonio Diaz Ruiz ++--EXTENSIONS-- ++dom ++--ENV-- ++XML_FILE=/not_well_formed.xml ++LOAD_OPTIONS=0 ++EXPECTED_RESULT=0 ++--FILE_EXTERNAL-- ++domdocumentload_test_method.inc ++--EXPECTF-- ++Warning: DOMDocument::load%r(XML){0,1}%r(): Opening and ending tag mismatch: title line 5 and book %s ++ ++Warning: DOMDocument::load%r(XML){0,1}%r(): %rexpected '>'|Opening and ending tag mismatch: book line (4|5) and books%r %s +diff --git a/ext/dom/tests/DOMDocument_load_error2_gte2_11.phpt b/ext/dom/tests/DOMDocument_load_error2_gte2_11.phpt +index 32b6bf1611..4d9f992b3b 100644 +--- a/ext/dom/tests/DOMDocument_load_error2_gte2_11.phpt ++++ b/ext/dom/tests/DOMDocument_load_error2_gte2_11.phpt +@@ -2,7 +2,7 @@ + Test DOMDocument::load() detects not-well formed + --SKIPIF-- + = 2.11'); ++if (LIBXML_VERSION < 21100 || LIBXML_VERSION >= 21200) die('skip libxml2 test variant for version >= 2.11 && <= 2.12'); + ?> + --DESCRIPTION-- + This test verifies the method detects attributes values not closed between " or ' +diff --git a/ext/dom/tests/DOMDocument_load_error2_gte2_12.phpt b/ext/dom/tests/DOMDocument_load_error2_gte2_12.phpt +new file mode 100644 +index 0000000000..4fadf41736 +--- /dev/null ++++ b/ext/dom/tests/DOMDocument_load_error2_gte2_12.phpt +@@ -0,0 +1,30 @@ ++--TEST-- ++Test DOMDocument::load() detects not-well formed ++--SKIPIF-- ++= 2.12'); ++?> ++--DESCRIPTION-- ++This test verifies the method detects attributes values not closed between " or ' ++Environment variables used in the test: ++- XML_FILE: the xml file to load ++- LOAD_OPTIONS: the second parameter to pass to the method ++- EXPECTED_RESULT: the expected result ++--CREDITS-- ++Antonio Diaz Ruiz ++--EXTENSIONS-- ++dom ++--ENV-- ++XML_FILE=/not_well_formed2.xml ++LOAD_OPTIONS=0 ++EXPECTED_RESULT=0 ++--FILE_EXTERNAL-- ++domdocumentload_test_method.inc ++--EXPECTF-- ++Warning: DOMDocument::load(): AttValue: " or ' expected in %s on line %d ++ ++Warning: DOMDocument::load(): internal error: xmlParseStartTag: problem parsing attributes in %s on line %d ++ ++Warning: DOMDocument::load(): Couldn't find end of Start Tag book line 4 in %s on line %d ++ ++Warning: DOMDocument::load(): Opening and ending tag mismatch: books line 3 and book in %s on line %d +diff --git a/ext/xml/tests/bug81351.phpt b/ext/xml/tests/bug81351.phpt +index 19e4ca590b..dc934001be 100644 +--- a/ext/xml/tests/bug81351.phpt ++++ b/ext/xml/tests/bug81351.phpt +@@ -23,6 +23,6 @@ $code = xml_get_error_code($parser); + $error = xml_error_string($code); + echo "xml_parse returned $success, xml_get_error_code = $code, xml_error_string = $error\r\n"; + ?> +---EXPECT-- ++--EXPECTF-- + xml_parse returned 1, xml_get_error_code = 0, xml_error_string = No error +-xml_parse returned 0, xml_get_error_code = 5, xml_error_string = Invalid document end ++%rxml_parse returned 0, xml_get_error_code = 5, xml_error_string = Invalid document end|xml_parse returned 0, xml_get_error_code = 77, xml_error_string = Tag not finished%r +diff --git a/ext/xml/tests/xml_error_string_basic.phpt b/ext/xml/tests/xml_error_string_basic.phpt +index e72fa68bd1..9020415f1f 100644 +--- a/ext/xml/tests/xml_error_string_basic.phpt ++++ b/ext/xml/tests/xml_error_string_basic.phpt +@@ -25,9 +25,9 @@ foreach ($xmls as $xml) { + xml_parser_free($xml_parser); + } + ?> +---EXPECT-- +-int(5) +-string(20) "Invalid document end" ++--EXPECTF-- ++int(%r5|77%r) ++string(%d) %r"Invalid document end"|"Tag not finished"%r + int(47) + string(35) "Processing Instruction not finished" + int(57) +-- +2.43.0 + diff --git a/php-8.0.6-deprecated.patch b/php-8.0.6-deprecated.patch index 1e6b93b..9a07bb0 100644 --- a/php-8.0.6-deprecated.patch +++ b/php-8.0.6-deprecated.patch @@ -15,7 +15,7 @@ diff --git a/ext/sockets/sockaddr_conv.c b/ext/sockets/sockaddr_conv.c index 57996612d2d7e..65c8418fb3a6f 100644 --- a/ext/sockets/sockaddr_conv.c +++ b/ext/sockets/sockaddr_conv.c -@@ -87,7 +87,11 @@ int php_set_inet_addr(struct sockaddr_in *sin, char *string, php_socket *php_soc +@@ -89,7 +89,11 @@ int php_set_inet_addr(struct sockaddr_in *sin, char *string, php_socket *php_soc struct in_addr tmp; struct hostent *host_entry; @@ -42,7 +42,7 @@ index 16ad3e8013a4c..85c938d1b97b1 100644 static int php_open_listen_sock(php_socket *sock, int port, int backlog) /* {{{ */ { -@@ -1082,10 +1084,12 @@ PHP_FUNCTION(socket_getsockname) +@@ -1086,10 +1088,12 @@ PHP_FUNCTION(socket_getsockname) struct sockaddr_in *sin; #if HAVE_IPV6 struct sockaddr_in6 *sin6; @@ -57,7 +57,7 @@ index 16ad3e8013a4c..85c938d1b97b1 100644 socklen_t salen = sizeof(php_sockaddr_storage); if (zend_parse_parameters(ZEND_NUM_ARGS(), "Oz|z", &arg1, socket_ce, &addr, &port) == FAILURE) { -@@ -1106,8 +1110,8 @@ PHP_FUNCTION(socket_getsockname) +@@ -1110,8 +1114,8 @@ PHP_FUNCTION(socket_getsockname) #if HAVE_IPV6 case AF_INET6: sin6 = (struct sockaddr_in6 *) sa; @@ -68,7 +68,7 @@ index 16ad3e8013a4c..85c938d1b97b1 100644 if (port != NULL) { ZEND_TRY_ASSIGN_REF_LONG(port, htons(sin6->sin6_port)); -@@ -1117,11 +1121,14 @@ PHP_FUNCTION(socket_getsockname) +@@ -1121,11 +1125,14 @@ PHP_FUNCTION(socket_getsockname) #endif case AF_INET: sin = (struct sockaddr_in *) sa; @@ -84,7 +84,7 @@ index 16ad3e8013a4c..85c938d1b97b1 100644 ZEND_TRY_ASSIGN_REF_STRING(addr, addr_string); if (port != NULL) { -@@ -1154,10 +1161,12 @@ PHP_FUNCTION(socket_getpeername) +@@ -1158,10 +1165,12 @@ PHP_FUNCTION(socket_getpeername) struct sockaddr_in *sin; #if HAVE_IPV6 struct sockaddr_in6 *sin6; @@ -99,7 +99,7 @@ index 16ad3e8013a4c..85c938d1b97b1 100644 socklen_t salen = sizeof(php_sockaddr_storage); if (zend_parse_parameters(ZEND_NUM_ARGS(), "Oz|z", &arg1, socket_ce, &arg2, &arg3) == FAILURE) { -@@ -1178,9 +1187,9 @@ PHP_FUNCTION(socket_getpeername) +@@ -1182,9 +1191,9 @@ PHP_FUNCTION(socket_getpeername) #if HAVE_IPV6 case AF_INET6: sin6 = (struct sockaddr_in6 *) sa; @@ -111,7 +111,7 @@ index 16ad3e8013a4c..85c938d1b97b1 100644 if (arg3 != NULL) { ZEND_TRY_ASSIGN_REF_LONG(arg3, htons(sin6->sin6_port)); -@@ -1191,11 +1200,14 @@ PHP_FUNCTION(socket_getpeername) +@@ -1195,11 +1204,14 @@ PHP_FUNCTION(socket_getpeername) #endif case AF_INET: sin = (struct sockaddr_in *) sa; @@ -127,7 +127,7 @@ index 16ad3e8013a4c..85c938d1b97b1 100644 ZEND_TRY_ASSIGN_REF_STRING(arg2, addr_string); if (arg3 != NULL) { -@@ -1527,12 +1539,14 @@ PHP_FUNCTION(socket_recvfrom) +@@ -1531,12 +1543,14 @@ PHP_FUNCTION(socket_recvfrom) struct sockaddr_in sin; #if HAVE_IPV6 struct sockaddr_in6 sin6; @@ -144,7 +144,7 @@ index 16ad3e8013a4c..85c938d1b97b1 100644 zend_string *recv_buf; if (zend_parse_parameters(ZEND_NUM_ARGS(), "Ozllz|z", &arg1, socket_ce, &arg2, &arg3, &arg4, &arg5, &arg6) == FAILURE) { -@@ -1590,7 +1604,11 @@ PHP_FUNCTION(socket_recvfrom) +@@ -1594,7 +1608,11 @@ PHP_FUNCTION(socket_recvfrom) ZSTR_LEN(recv_buf) = retval; ZSTR_VAL(recv_buf)[ZSTR_LEN(recv_buf)] = '\0'; @@ -156,7 +156,7 @@ index 16ad3e8013a4c..85c938d1b97b1 100644 ZEND_TRY_ASSIGN_REF_NEW_STR(arg2, recv_buf); ZEND_TRY_ASSIGN_REF_STRING(arg5, address ? address : "0.0.0.0"); -@@ -1617,11 +1635,11 @@ PHP_FUNCTION(socket_recvfrom) +@@ -1621,11 +1639,11 @@ PHP_FUNCTION(socket_recvfrom) ZSTR_LEN(recv_buf) = retval; ZSTR_VAL(recv_buf)[ZSTR_LEN(recv_buf)] = '\0'; @@ -315,7 +315,7 @@ diff --git a/sapi/litespeed/lsapilib.c b/sapi/litespeed/lsapilib.c index a72b5dc1b988..305f3326a682 100644 --- a/sapi/litespeed/lsapilib.c +++ b/sapi/litespeed/lsapilib.c -@@ -2672,8 +2672,12 @@ int LSAPI_ParseSockAddr( const char * pBind, struct sockaddr * pAddr ) +@@ -2673,8 +2673,12 @@ int LSAPI_ParseSockAddr( const char * pBind, struct sockaddr * pAddr ) ((struct sockaddr_in *)pAddr)->sin_addr.s_addr = htonl( INADDR_LOOPBACK ); else { -- cgit