|
| 1 | +# https://github.com/php/php-src/issues/12762 |
| 2 | +diff --git "a/Zend/zend_call_stack.c" "b/Zend/zend_call_stack.c" |
| 3 | +index 06ee521911..0ac230a0bd 100644 |
| 4 | +--- "a/Zend/zend_call_stack.c" |
| 5 | ++++ "b/Zend/zend_call_stack.c" |
| 6 | +@@ -376,7 +376,19 @@ static bool zend_call_stack_get_win32(zend_call_stack *stack) |
| 7 | + * v Lower addresses v |
| 8 | + */ |
| 9 | + |
| 10 | +- GetCurrentThreadStackLimits(&low_limit, &high_limit); |
| 11 | ++ typedef void (WINAPI* FuncT)(PULONG_PTR , PULONG_PTR); |
| 12 | ++ HINSTANCE hDLL = LoadLibrary("Kernel32.dll"); |
| 13 | ++ FuncT GetCurrentThreadStackLimits = (FuncT) GetProcAddress((HMODULE)hDLL, "GetCurrentThreadStackLimits"); |
| 14 | ++ if (GetCurrentThreadStackLimits) { |
| 15 | ++ GetCurrentThreadStackLimits(&low_limit, &high_limit); |
| 16 | ++ } else { |
| 17 | ++ NT_TIB* tib = (NT_TIB*)NtCurrentTeb(); |
| 18 | ++ high_limit = (ULONG_PTR)tib->StackBase; |
| 19 | ++ MEMORY_BASIC_INFORMATION mbi; |
| 20 | ++ if (VirtualQuery(tib->StackLimit, &mbi, sizeof(mbi))) { |
| 21 | ++ low_limit = (ULONG_PTR)mbi.AllocationBase; |
| 22 | ++ } |
| 23 | ++ } |
| 24 | + |
| 25 | + result_size = VirtualQuery((void*)low_limit, |
| 26 | + &uncommitted_region, sizeof(uncommitted_region)); |
| 27 | +diff --git "a/main/network.c" "b/main/network.c" |
| 28 | +index 1ad7e370cc..9cc9de2a2c 100644 |
| 29 | +--- "a/main/network.c" |
| 30 | ++++ "b/main/network.c" |
| 31 | +@@ -104,7 +104,7 @@ static const char *php_gai_strerror(int code) |
| 32 | + int code; |
| 33 | + const char *msg; |
| 34 | + } values[] = { |
| 35 | +-# ifdef EAI_ADDRFAMILY |
| 36 | ++# ifdef EAI_ADDRFAMILY /* Not available in MSVC */ |
| 37 | + {EAI_ADDRFAMILY, "Address family for hostname not supported"}, |
| 38 | + # endif |
| 39 | + {EAI_AGAIN, "Temporary failure in name resolution"}, |
| 40 | +@@ -112,13 +112,15 @@ static const char *php_gai_strerror(int code) |
| 41 | + {EAI_FAIL, "Non-recoverable failure in name resolution"}, |
| 42 | + {EAI_FAMILY, "ai_family not supported"}, |
| 43 | + {EAI_MEMORY, "Memory allocation failure"}, |
| 44 | +-# ifdef EAI_NODATA |
| 45 | ++# ifdef EAI_NODATA /* Not available in MSVC */ |
| 46 | + {EAI_NODATA, "No address associated with hostname"}, |
| 47 | + # endif |
| 48 | + {EAI_NONAME, "Name or service not known"}, |
| 49 | + {EAI_SERVICE, "Servname not supported for ai_socktype"}, |
| 50 | + {EAI_SOCKTYPE, "ai_socktype not supported"}, |
| 51 | ++# ifdef EAI_SYSTEM /* Not available in MSVC */ |
| 52 | + {EAI_SYSTEM, "System error"}, |
| 53 | ++# endif |
| 54 | + {0, NULL} |
| 55 | + }; |
| 56 | + int i; |
| 57 | +diff --git "a/ext/iconv/iconv.c" "b/ext/iconv/iconv.c" |
| 58 | +index 9d7905c9a9..36dabfdc69 100644 |
| 59 | +--- "a/ext/iconv/iconv.c" |
| 60 | ++++ "b/ext/iconv/iconv.c" |
| 61 | +@@ -69,7 +69,7 @@ char *get_iconv_version(void) { |
| 62 | + |
| 63 | + #ifdef HAVE_LIBICONV |
| 64 | + static char buf[16]; |
| 65 | +- snprintf(buf, sizeof(buf), "%d.%d", _libiconv_version >> 8, _libiconv_version & 0xff); |
| 66 | ++ snprintf(buf, sizeof(buf), "%d.%d", _LIBICONV_VERSION >> 8, _LIBICONV_VERSION & 0xff); |
| 67 | + version = buf; |
| 68 | + #elif HAVE_GLIBC_ICONV |
| 69 | + version = (char *) gnu_get_libc_version(); |
| 70 | + |
| 71 | +diff --git "a/ext/phar/config.w32" "b/ext/phar/config.w32" |
| 72 | +index c68ba08f2c..241f3eeddb 100644 |
| 73 | +--- "a/ext/phar/config.w32" |
| 74 | ++++ "b/ext/phar/config.w32" |
| 75 | +@@ -13,10 +13,10 @@ if (PHP_PHAR != "no") { |
| 76 | + ADD_FLAG("CFLAGS_PHAR", "/D COMPILE_DL_PHAR "); |
| 77 | + } |
| 78 | + if (PHP_PHAR_NATIVE_SSL != "no") { |
| 79 | +- if (CHECK_LIB("libeay32st.lib", "phar")) { |
| 80 | ++ if (CHECK_LIB("libcrypto.lib", "phar")) { |
| 81 | + /* We don't really need GDI for this, but there's no |
| 82 | + way to avoid linking it in the static openssl build */ |
| 83 | +- ADD_FLAG("LIBS_PHAR", "libeay32st.lib gdi32.lib"); |
| 84 | ++ ADD_FLAG("LIBS_PHAR", "libcrypto.lib gdi32.lib"); |
| 85 | + if (PHP_DEBUG == "no") { |
| 86 | + /* Silence irrelevant-to-us warning in release builds */ |
| 87 | + ADD_FLAG("LDFLAGS_PHAR", "/IGNORE:4089 "); |
| 88 | +diff --git "a/ext/gmp/gmp.c" "b/ext/gmp/gmp.c" |
| 89 | +index 29974c6386..28d304e072 100644 |
| 90 | +--- "a/ext/gmp/gmp.c" |
| 91 | ++++ "b/ext/gmp/gmp.c" |
| 92 | +@@ -36,10 +36,10 @@ |
| 93 | + #define GMP_ROUND_PLUSINF 1 |
| 94 | + #define GMP_ROUND_MINUSINF 2 |
| 95 | + |
| 96 | +-#ifdef mpir_version |
| 97 | +-#define GMP_MPIR_VERSION_STRING ((char *) mpir_version) |
| 98 | ++#ifdef _MSC_MPIR_VERSION |
| 99 | ++#define GMP_MPIR_VERSION_STRING ((char *) _MSC_MPIR_VERSION) |
| 100 | + #endif |
| 101 | +-#define GMP_VERSION_STRING ((char *) gmp_version) |
| 102 | ++#define GMP_VERSION_STRING ((char *) GMP_VERSION) |
| 103 | + |
| 104 | + #define GMP_MSW_FIRST (1 << 0) |
| 105 | + #define GMP_LSW_FIRST (1 << 1) |
| 106 | +@@ -568,10 +568,10 @@ ZEND_MODULE_INFO_D(gmp) |
| 107 | + { |
| 108 | + php_info_print_table_start(); |
| 109 | + php_info_print_table_row(2, "gmp support", "enabled"); |
| 110 | +-#ifdef mpir_version |
| 111 | +- php_info_print_table_row(2, "MPIR version", mpir_version); |
| 112 | ++#ifdef _MSC_MPIR_VERSION |
| 113 | ++ php_info_print_table_row(2, "MPIR version", _MSC_MPIR_VERSION); |
| 114 | + #else |
| 115 | +- php_info_print_table_row(2, "GMP version", gmp_version); |
| 116 | ++ php_info_print_table_row(2, "GMP version", GMP_VERSION); |
| 117 | + #endif |
| 118 | + php_info_print_table_end(); |
| 119 | + } |
| 120 | +diff --git "a/ext/libxml/config.w32" "b/ext/libxml/config.w32" |
| 121 | +index b11c57bc44..7f15920f29 100644 |
| 122 | +--- "a/ext/libxml/config.w32" |
| 123 | ++++ "b/ext/libxml/config.w32" |
| 124 | +@@ -3,8 +3,10 @@ |
| 125 | + ARG_WITH("libxml", "LibXML support", "yes"); |
| 126 | + |
| 127 | + if (PHP_LIBXML == "yes") { |
| 128 | +- if (CHECK_LIB("libxml2_a_dll.lib;libxml2_a.lib", "libxml") && |
| 129 | +- CHECK_LIB("libiconv_a.lib;iconv_a.lib;libiconv.lib;iconv.lib", "libxml") && |
| 130 | ++ if (CHECK_LIB("libxml2_a_dll.lib", "libxml") && |
| 131 | ++ CHECK_LIB("libiconv.lib", "libxml") && |
| 132 | ++ CHECK_LIB("liblzma.lib", "libxml") && |
| 133 | ++ CHECK_LIB("icuuc.lib", "libxml") && |
| 134 | + CHECK_HEADER_ADD_INCLUDE("libxml/parser.h", "CFLAGS_LIBXML", PHP_PHP_BUILD + "\\include\\libxml2") && |
| 135 | + CHECK_HEADER_ADD_INCLUDE("libxml/tree.h", "CFLAGS_LIBXML", PHP_PHP_BUILD + "\\include\\libxml2") && |
| 136 | + ADD_EXTENSION_DEP('libxml', 'iconv')) { |
| 137 | +diff --git "a/ext/gd/config.w32" "b/ext/gd/config.w32" |
| 138 | +index 09b09df95d..1424cf6671 100644 |
| 139 | +--- "a/ext/gd/config.w32" |
| 140 | ++++ "b/ext/gd/config.w32" |
| 141 | +@@ -1,81 +1,46 @@ |
| 142 | + // vim:ft=javascript |
| 143 | + |
| 144 | +-ARG_WITH("gd", "Bundled GD support", "yes,shared"); |
| 145 | +-ARG_WITH("libwebp", "webp support", "yes"); |
| 146 | +-ARG_WITH("libavif", "avif support", "yes"); |
| 147 | ++ARG_WITH("gd", "GD support", "yes,shared"); |
| 148 | + |
| 149 | + if (PHP_GD != "no") { |
| 150 | + if ( |
| 151 | +- CHECK_LIB("libjpeg_a.lib;libjpeg.lib", "gd", PHP_GD) && |
| 152 | +- CHECK_LIB("freetype_a.lib;freetype.lib", "gd", PHP_GD) && |
| 153 | +- CHECK_HEADER_ADD_INCLUDE("ft2build.h", "CFLAGS_GD", PHP_GD + ";" + PHP_PHP_BUILD + "\\include\\freetype2;" + PHP_PHP_BUILD + "\\include\\freetype") && |
| 154 | +- CHECK_LIB("libpng_a.lib;libpng.lib", "gd", PHP_GD) && |
| 155 | +- CHECK_HEADER_ADD_INCLUDE("gd.h", "CFLAGS_GD", PHP_GD + ";ext\\gd\\libgd") && |
| 156 | +- (CHECK_HEADER_ADD_INCLUDE("png.h", "CFLAGS_GD", PHP_GD + ";" + PHP_PHP_BUILD + "\\include\\libpng16") || |
| 157 | +- CHECK_HEADER_ADD_INCLUDE("png.h", "CFLAGS_GD", PHP_GD + ";" + PHP_PHP_BUILD + "\\include\\libpng15") || |
| 158 | +- CHECK_HEADER_ADD_INCLUDE("png.h", "CFLAGS_GD", PHP_GD + ";" + PHP_PHP_BUILD + "\\include\\libpng12")) && |
| 159 | +- (CHECK_LIB("libiconv_a.lib;libiconv.lib", "gd", PHP_GD) || CHECK_LIB("iconv_a.lib;iconv.lib", "gd", PHP_GD)) && |
| 160 | +- CHECK_HEADER_ADD_INCLUDE("iconv.h", "CFLAGS_GD", PHP_GD) && |
| 161 | +- (((PHP_ZLIB=="no") && (CHECK_LIB("zlib_a.lib;zlib.lib", "gd", PHP_GD) )) || |
| 162 | +- (PHP_ZLIB_SHARED && CHECK_LIB("zlib.lib", "gd", PHP_GD)) || (PHP_ZLIB == "yes" && (!PHP_ZLIB_SHARED))) && |
| 163 | +- CHECK_LIB("libXpm_a.lib", "gd", PHP_GD) && |
| 164 | +- CHECK_HEADER_ADD_INCLUDE("xpm.h", "CFLAGS_GD", PHP_GD + ";" + PHP_PHP_BUILD + "\\include\\X11") |
| 165 | +- ) { |
| 166 | +- |
| 167 | +- if (PHP_LIBWEBP != "no") { |
| 168 | +- if ((CHECK_LIB("libwebp_a.lib", "gd", PHP_GD) || CHECK_LIB("libwebp.lib", "gd", PHP_GD)) && |
| 169 | +- CHECK_HEADER_ADD_INCLUDE("decode.h", "CFLAGS_GD", PHP_GD + ";" + PHP_PHP_BUILD + "\\include\\webp") && |
| 170 | +- CHECK_HEADER_ADD_INCLUDE("encode.h", "CFLAGS_GD", PHP_GD + ";" + PHP_PHP_BUILD + "\\include\\webp")) { |
| 171 | +- AC_DEFINE("HAVE_LIBWEBP", 1, "WebP support"); |
| 172 | +- AC_DEFINE("HAVE_GD_WEBP", 1, "WebP support"); |
| 173 | +- } else { |
| 174 | +- WARNING("libwebp not enabled; libraries and headers not found"); |
| 175 | +- } |
| 176 | +- } |
| 177 | +- if (PHP_LIBAVIF != "no") { |
| 178 | +- if (CHECK_LIB("avif_a.lib", "gd", PHP_GD) && |
| 179 | +- CHECK_LIB("aom_a.lib", "gd", PHP_GD) && |
| 180 | +- CHECK_HEADER_ADD_INCLUDE("avif.h", "CFLAGS_GD", PHP_GD + ";" + PHP_PHP_BUILD + "\\include\\avif")) { |
| 181 | +- ADD_FLAG("CFLAGS_GD", "/D HAVE_LIBAVIF /D HAVE_GD_AVIF"); |
| 182 | +- } else if (CHECK_LIB("avif.lib", "gd", PHP_GD) && |
| 183 | +- CHECK_HEADER_ADD_INCLUDE("avif.h", "CFLAGS_GD", PHP_GD + ";" + PHP_PHP_BUILD + "\\include\\avif")) { |
| 184 | +- ADD_FLAG("CFLAGS_GD", "/D HAVE_LIBAVIF /D HAVE_GD_AVIF"); |
| 185 | +- } else { |
| 186 | +- WARNING("libavif not enabled; libraries and headers not found"); |
| 187 | +- } |
| 188 | +- } |
| 189 | +- CHECK_LIB("User32.lib", "gd", PHP_GD); |
| 190 | +- CHECK_LIB("Gdi32.lib", "gd", PHP_GD); |
| 191 | ++ CHECK_HEADER_ADD_INCLUDE("gd.h", "CFLAGS_GD", PHP_GD + ";" + PHP_PHP_BUILD + "\\include") && |
| 192 | ++ CHECK_HEADER_ADD_INCLUDE("gdfontg.h", "CFLAGS_GD", PHP_GD + ";" + PHP_PHP_BUILD + "\\include") && |
| 193 | ++ CHECK_HEADER_ADD_INCLUDE("gdfontl.h", "CFLAGS_GD", PHP_GD + ";" + PHP_PHP_BUILD + "\\include") && |
| 194 | ++ CHECK_HEADER_ADD_INCLUDE("gdfontmb.h", "CFLAGS_GD", PHP_GD + ";" + PHP_PHP_BUILD + "\\include") && |
| 195 | ++ CHECK_HEADER_ADD_INCLUDE("gdfonts.h", "CFLAGS_GD", PHP_GD + ";" + PHP_PHP_BUILD + "\\include") && |
| 196 | ++ CHECK_HEADER_ADD_INCLUDE("gdfontt.h", "CFLAGS_GD", PHP_GD + ";" + PHP_PHP_BUILD + "\\include") && |
| 197 | ++ CHECK_HEADER_ADD_INCLUDE("gd_errors.h", "CFLAGS_GD", PHP_GD + ";" + PHP_PHP_BUILD + "\\include") && |
| 198 | + |
| 199 | ++ CHECK_LIB("user32.lib", "gd", PHP_GD) && |
| 200 | ++ CHECK_LIB("Gdi32.Lib", "gd", PHP_GD) && |
| 201 | ++ CHECK_LIB("libgd.lib", "gd", PHP_GD) |
| 202 | ++ ) { |
| 203 | + EXTENSION("gd", "gd.c", null, "-Iext/gd/libgd"); |
| 204 | +- ADD_SOURCES("ext/gd/libgd", "gd2copypal.c gd.c \ |
| 205 | +- gdcache.c gdfontg.c gdfontl.c gdfontmb.c gdfonts.c gdfontt.c \ |
| 206 | +- gdft.c gd_gd2.c gd_gd.c gd_gif_in.c gd_gif_out.c gdhelpers.c gd_io.c gd_io_dp.c \ |
| 207 | +- gd_io_file.c gd_io_ss.c gd_jpeg.c gdkanji.c gd_png.c gd_ss.c \ |
| 208 | +- gdtables.c gd_topal.c gd_wbmp.c gdxpm.c wbmp.c gd_xbm.c gd_security.c gd_transform.c \ |
| 209 | +- gd_filter.c gd_pixelate.c gd_rotate.c gd_color_match.c gd_webp.c gd_avif.c \ |
| 210 | +- gd_crop.c gd_interpolation.c gd_matrix.c gd_bmp.c gd_tga.c", "gd"); |
| 211 | +- AC_DEFINE('HAVE_LIBGD', 1, 'GD support'); |
| 212 | +- AC_DEFINE('HAVE_GD_BUNDLED', 1, "Bundled GD"); |
| 213 | +- AC_DEFINE('HAVE_GD_PNG', 1, "PNG support"); |
| 214 | +- AC_DEFINE('HAVE_GD_BMP', 1, "BMP support"); |
| 215 | +- AC_DEFINE('HAVE_GD_TGA', 1, "TGA support"); |
| 216 | +- AC_DEFINE('HAVE_LIBPNG', 1, "PNG support"); |
| 217 | +- AC_DEFINE('HAVE_LIBJPEG', 1, "JPEG support"); |
| 218 | +- AC_DEFINE('HAVE_GD_JPG', 1, "JPEG support"); |
| 219 | +- AC_DEFINE('HAVE_XPM', 1, "XPM support"); |
| 220 | +- AC_DEFINE('HAVE_GD_XPM', 1, "XPM support"); |
| 221 | +- AC_DEFINE('HAVE_LIBFREETYPE', 1, "Freetype support"); |
| 222 | +- AC_DEFINE('HAVE_GD_FREETYPE', 1, "Freetype support"); |
| 223 | +- ADD_FLAG("CFLAGS_GD", " \ |
| 224 | +-/D PHP_GD_EXPORTS=1 \ |
| 225 | +-/D HAVE_GD_GET_INTERPOLATION \ |
| 226 | +- "); |
| 227 | ++ |
| 228 | ++ AC_DEFINE('HAVE_LIBGD', 1, "GD support"); |
| 229 | ++ AC_DEFINE('PHP_GD_EXPORTS', 1, "dllexport"); |
| 230 | ++ AC_DEFINE('HAVE_GD_PNG', 1, "PNG support"); |
| 231 | ++ AC_DEFINE('HAVE_GD_AVIF', 1, "AVIF support"); |
| 232 | ++ AC_DEFINE('HAVE_GD_WEBP', 1, "WEBP support"); |
| 233 | ++ AC_DEFINE('HAVE_GD_JPG', 1, "JPG support"); |
| 234 | ++ AC_DEFINE('HAVE_GD_XPM', 1, "XPM support"); |
| 235 | ++ AC_DEFINE('HAVE_GD_BMP', 1, "BMP support"); |
| 236 | ++ AC_DEFINE('HAVE_GD_TGA', 1, "TGA support"); |
| 237 | ++ AC_DEFINE('HAVE_GD_FREETYPE', 1, "FREETYPE support"); |
| 238 | ++ AC_DEFINE('HAVE_GD_LIBVERSION', 1, "VERSION support"); |
| 239 | ++ AC_DEFINE('HAVE_GD_GET_INTERPOLATION', 1, "INTERPOLATION support"); |
| 240 | ++ |
| 241 | ++ AC_DEFINE('HAVE_GD_HEIF', 1, "HEIF support"); |
| 242 | ++ AC_DEFINE('HAVE_GD_ZLIB', 1, "ZLIB support"); |
| 243 | ++ AC_DEFINE('HAVE_GD_TIFF', 1, "TIFF support"); |
| 244 | ++ AC_DEFINE("HAVE_GD_ICONV", 1, "ICONV support"); |
| 245 | ++ |
| 246 | + if (ICC_TOOLSET) { |
| 247 | + ADD_FLAG("LDFLAGS_GD", "/nodefaultlib:libcmt"); |
| 248 | + } |
| 249 | + |
| 250 | +- PHP_INSTALL_HEADERS("", "ext/gd ext/gd/libgd" ); |
| 251 | ++ PHP_INSTALL_HEADERS("", "ext/gd" ); |
| 252 | + } else { |
| 253 | + WARNING("gd not enabled; libraries and headers not found"); |
| 254 | + } |
| 255 | +diff --git "a/ext/gd/gd.c" "b/ext/gd/gd.c" |
| 256 | +index 1d8b3a0a1d..a84349217a 100644 |
| 257 | +--- "a/ext/gd/gd.c" |
| 258 | ++++ "b/ext/gd/gd.c" |
| 259 | +@@ -101,7 +101,19 @@ static void php_imagettftext_common(INTERNAL_FUNCTION_PARAMETERS, int); |
| 260 | + |
| 261 | + /* as it is not really public, duplicate declaration here to avoid |
| 262 | + pointless warnings */ |
| 263 | +-int overflow2(int a, int b); |
| 264 | ++int overflow2(int a, int b) |
| 265 | ++{ |
| 266 | ++ |
| 267 | ++ if(a <= 0 || b <= 0) { |
| 268 | ++ php_error_docref(NULL, E_WARNING, "One parameter to a memory allocation multiplication is negative or zero, failing operation gracefully\n"); |
| 269 | ++ return 1; |
| 270 | ++ } |
| 271 | ++ if(a > INT_MAX / b) { |
| 272 | ++ php_error_docref(NULL, E_WARNING, "Product of memory allocation multiplication would exceed INT_MAX, failing operation gracefully\n"); |
| 273 | ++ return 1; |
| 274 | ++ } |
| 275 | ++ return 0; |
| 276 | ++} |
| 277 | + |
| 278 | + static void php_image_filter_negate(INTERNAL_FUNCTION_PARAMETERS); |
| 279 | + static void php_image_filter_grayscale(INTERNAL_FUNCTION_PARAMETERS); |
| 280 | +@@ -458,6 +470,18 @@ PHP_MINFO_FUNCTION(gd) |
| 281 | + #endif |
| 282 | + #ifdef HAVE_GD_TGA |
| 283 | + php_info_print_table_row(2, "TGA Read Support", "enabled"); |
| 284 | ++#endif |
| 285 | ++#ifdef HAVE_GD_ZLIB |
| 286 | ++ php_info_print_table_row(2, "ZLIB Support", "enabled - not implemented"); |
| 287 | ++#endif |
| 288 | ++#ifdef HAVE_GD_TIFF |
| 289 | ++ php_info_print_table_row(2, "TIFF Support", "enabled - not implemented"); |
| 290 | ++#endif |
| 291 | ++#ifdef HAVE_GD_HEIF |
| 292 | ++ php_info_print_table_row(2, "HEIF Support", "enabled - not implemented"); |
| 293 | ++#endif |
| 294 | ++#ifdef HAVE_GD_ICONV |
| 295 | ++ php_info_print_table_row(2, "ICONV Support", "enabled - not implemented"); |
| 296 | + #endif |
| 297 | + php_info_print_table_end(); |
| 298 | + DISPLAY_INI_ENTRIES(); |
0 commit comments