Commit 41394223fef for php.net

commit 41394223fef6dd027127cf72f5622d23ee94002d
Author: Michael Orlitzky <michael@orlitzky.com>
Date:   Wed Mar 25 09:48:15 2026 -0400

    fileinfo: Don't compile libmagic/strcasestr.c (GH-21522)

    * ext/fileinfo/libmagic/file.h: delete HAVE_STRCASESTR ifdef

    PHP's copy of libmagic doesn't use the strcasestr() function,
    so there is no reason to prototype it, regardless of whether
    or not the OS (libc) provides it.

    * ext/fileinfo/libmagic.patch: update

    Run ext/fileinfo/generate_patch.sh to re-roll this patch, a recent
    commit removes HAVE_STRCASESTR from PHP's copy of libmagic.

    * ext/fileinfo/config.{m4,w32}: don't compile strcasestr.c

    Unlike the upstream library, PHP's copy of libmagic doesn't use the
    strcasestr() function, so there is no reason to include strcasestr.c
    in the list of source files.

diff --git a/ext/fileinfo/config.m4 b/ext/fileinfo/config.m4
index 346061411e0..2d6139f06df 100644
--- a/ext/fileinfo/config.m4
+++ b/ext/fileinfo/config.m4
@@ -29,11 +29,6 @@ if test "$PHP_FILEINFO" != "no"; then

   AC_CHECK_HEADERS([sys/sysmacros.h])

-  AC_CHECK_FUNCS([strcasestr],,[
-    AC_MSG_NOTICE([using libmagic strcasestr implementation])
-    libmagic_sources="$libmagic_sources libmagic/strcasestr.c"
-  ])
-
   AX_GCC_FUNC_ATTRIBUTE([visibility])

   PHP_NEW_EXTENSION([fileinfo],
diff --git a/ext/fileinfo/config.w32 b/ext/fileinfo/config.w32
index 2a42dc45a1d..34670e7451e 100644
--- a/ext/fileinfo/config.w32
+++ b/ext/fileinfo/config.w32
@@ -8,7 +8,7 @@ if (PHP_FILEINFO != 'no') {
 			encoding.c fsmagic.c funcs.c \
 			is_json.c is_tar.c is_simh.c magic.c print.c \
 			readcdf.c softmagic.c der.c \
-			strcasestr.c buffer.c is_csv.c";
+			buffer.c is_csv.c";

 	EXTENSION('fileinfo', 'fileinfo.c php_libmagic.c', true, "/I" + configure_module_dirname + "/libmagic /I" + configure_module_dirname);
 	ADD_EXTENSION_DEP('fileinfo', 'pcre');
diff --git a/ext/fileinfo/libmagic.patch b/ext/fileinfo/libmagic.patch
index d2db3c044d3..6e3751fa943 100644
--- a/ext/fileinfo/libmagic.patch
+++ b/ext/fileinfo/libmagic.patch
@@ -1727,7 +1727,7 @@ diff -u libmagic.orig/encoding.c libmagic/encoding.c
  }
 diff -u libmagic.orig/file.h libmagic/file.h
 --- libmagic.orig/file.h	2024-11-27 10:37:00.000000000 -0500
-+++ libmagic/file.h	2026-03-24 10:45:21.427536159 -0400
++++ libmagic/file.h	2026-03-25 08:13:23.336328498 -0400
 @@ -27,15 +27,13 @@
   */
  /*
@@ -1883,7 +1883,7 @@ diff -u libmagic.orig/file.h libmagic/file.h
  typedef struct {
  	char *buf;
  	size_t blen;
-@@ -649,19 +629,6 @@
+@@ -649,28 +629,12 @@
  extern file_protected const size_t file_nnames;
  #endif

@@ -1903,7 +1903,16 @@ diff -u libmagic.orig/file.h libmagic/file.h
  #ifndef HAVE_STRLCPY
  size_t strlcpy(char *, const char *, size_t);
  #endif
-@@ -681,31 +648,6 @@
+ #ifndef HAVE_STRLCAT
+ size_t strlcat(char *, const char *, size_t);
+ #endif
+-#ifndef HAVE_STRCASESTR
+-char *strcasestr(const char *, const char *);
+-#endif
+ #ifndef HAVE_GETLINE
+ ssize_t getline(char **, size_t *, FILE *);
+ ssize_t getdelim(char **, size_t *, int, FILE *);
+@@ -681,31 +645,6 @@
  #ifndef HAVE_ASCTIME_R
  char   *asctime_r(const struct tm *, char *);
  #endif
@@ -3066,7 +3075,7 @@ diff -u libmagic.orig/magic.c libmagic/magic.c
  	}
  	return file_getbuffer(ms);
 diff -u libmagic.orig/magic.h libmagic/magic.h
---- libmagic.orig/magic.h	2026-03-24 10:45:56.975553410 -0400
+--- libmagic.orig/magic.h	2026-03-25 08:16:04.280413419 -0400
 +++ libmagic/magic.h	2026-03-20 12:10:19.777614667 -0400
 @@ -47,8 +47,6 @@
  					   * extensions */
diff --git a/ext/fileinfo/libmagic/file.h b/ext/fileinfo/libmagic/file.h
index f8fe5889500..718a60b2e1b 100644
--- a/ext/fileinfo/libmagic/file.h
+++ b/ext/fileinfo/libmagic/file.h
@@ -635,9 +635,6 @@ size_t strlcpy(char *, const char *, size_t);
 #ifndef HAVE_STRLCAT
 size_t strlcat(char *, const char *, size_t);
 #endif
-#ifndef HAVE_STRCASESTR
-char *strcasestr(const char *, const char *);
-#endif
 #ifndef HAVE_GETLINE
 ssize_t getline(char **, size_t *, FILE *);
 ssize_t getdelim(char **, size_t *, int, FILE *);