Skip to content

Commit 61e0968

Browse files
committed
Fix phpGH-13344: finfo::buffer(): Failed identify data 0:(null)
Credits to ranvis for finding the upstream commit that fixes the issue. This backports file/file@029b824
1 parent 452e008 commit 61e0968

File tree

3 files changed

+64
-41
lines changed

3 files changed

+64
-41
lines changed

ext/fileinfo/libmagic.patch

Lines changed: 49 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
diff -u libmagic.orig/apprentice.c libmagic/apprentice.c
2-
--- libmagic.orig/apprentice.c 2021-02-22 17:51:11.000000000 -0700
3-
+++ libmagic/apprentice.c 2022-06-06 00:36:46.758464267 -0600
2+
--- libmagic.orig/apprentice.c 2021-02-23 01:51:11.000000000 +0100
3+
+++ libmagic/apprentice.c 2023-12-09 11:51:31.700896278 +0100
44
@@ -29,6 +29,8 @@
55
* apprentice - make one pass through /etc/magic, learning its secrets.
66
*/
@@ -944,8 +944,8 @@ diff -u libmagic.orig/apprentice.c libmagic/apprentice.c
944944
m->str_flags = swap4(m->str_flags);
945945
}
946946
diff -u libmagic.orig/ascmagic.c libmagic/ascmagic.c
947-
--- libmagic.orig/ascmagic.c 2021-02-22 17:49:06.000000000 -0700
948-
+++ libmagic/ascmagic.c 2021-10-24 17:03:48.529884451 -0600
947+
--- libmagic.orig/ascmagic.c 2021-02-23 01:49:06.000000000 +0100
948+
+++ libmagic/ascmagic.c 2024-02-11 00:59:23.954358532 +0100
949949
@@ -96,7 +96,7 @@
950950
rv = file_ascmagic_with_encoding(ms, &bb,
951951
ubuf, ulen, code, type, text);
@@ -955,7 +955,7 @@ diff -u libmagic.orig/ascmagic.c libmagic/ascmagic.c
955955

956956
return rv;
957957
}
958-
@@ -143,7 +143,7 @@
958+
@@ -143,13 +143,15 @@
959959
/* malloc size is a conservative overestimate; could be
960960
improved, or at least realloced after conversion. */
961961
mlen = ulen * 6;
@@ -964,7 +964,16 @@ diff -u libmagic.orig/ascmagic.c libmagic/ascmagic.c
964964
file_oomem(ms, mlen);
965965
goto done;
966966
}
967-
@@ -330,7 +330,8 @@
967+
if ((utf8_end = encode_utf8(utf8_buf, mlen, ubuf, ulen))
968+
- == NULL)
969+
+ == NULL) {
970+
+ rv = 0;
971+
goto done;
972+
+ }
973+
buffer_init(&bb, b->fd, &b->st, utf8_buf,
974+
CAST(size_t, utf8_end - utf8_buf));
975+
976+
@@ -330,7 +332,8 @@
968977
}
969978
rv = 1;
970979
done:
@@ -975,8 +984,8 @@ diff -u libmagic.orig/ascmagic.c libmagic/ascmagic.c
975984
return rv;
976985
}
977986
diff -u libmagic.orig/buffer.c libmagic/buffer.c
978-
--- libmagic.orig/buffer.c 2021-02-22 17:49:26.000000000 -0700
979-
+++ libmagic/buffer.c 2021-10-24 17:03:45.681791493 -0600
987+
--- libmagic.orig/buffer.c 2021-02-23 01:49:26.000000000 +0100
988+
+++ libmagic/buffer.c 2023-12-09 11:51:31.700896278 +0100
980989
@@ -31,19 +31,23 @@
981990
#endif /* lint */
982991

@@ -1031,8 +1040,8 @@ diff -u libmagic.orig/buffer.c libmagic/buffer.c
10311040
goto out;
10321041
}
10331042
diff -u libmagic.orig/cdf.c libmagic/cdf.c
1034-
--- libmagic.orig/cdf.c 2021-02-22 17:49:06.000000000 -0700
1035-
+++ libmagic/cdf.c 2021-10-24 17:03:45.681791493 -0600
1043+
--- libmagic.orig/cdf.c 2021-02-23 01:49:06.000000000 +0100
1044+
+++ libmagic/cdf.c 2023-12-09 11:51:31.704229532 +0100
10361045
@@ -43,7 +43,17 @@
10371046
#include <err.h>
10381047
#endif
@@ -1266,8 +1275,8 @@ diff -u libmagic.orig/cdf.c libmagic/cdf.c
12661275

12671276
#endif
12681277
diff -u libmagic.orig/cdf.h libmagic/cdf.h
1269-
--- libmagic.orig/cdf.h 2021-02-22 17:49:06.000000000 -0700
1270-
+++ libmagic/cdf.h 2021-10-24 17:03:40.741632734 -0600
1278+
--- libmagic.orig/cdf.h 2021-02-23 01:49:06.000000000 +0100
1279+
+++ libmagic/cdf.h 2023-12-09 11:51:31.704229532 +0100
12711280
@@ -35,10 +35,10 @@
12721281
#ifndef _H_CDF_
12731282
#define _H_CDF_
@@ -1283,8 +1292,8 @@ diff -u libmagic.orig/cdf.h libmagic/cdf.h
12831292
#ifdef __DJGPP__
12841293
#define timespec timeval
12851294
diff -u libmagic.orig/cdf_time.c libmagic/cdf_time.c
1286-
--- libmagic.orig/cdf_time.c 2021-02-22 17:49:06.000000000 -0700
1287-
+++ libmagic/cdf_time.c 2021-10-24 17:03:40.741632734 -0600
1295+
--- libmagic.orig/cdf_time.c 2021-02-23 01:49:06.000000000 +0100
1296+
+++ libmagic/cdf_time.c 2023-12-09 11:51:31.704229532 +0100
12881297
@@ -23,6 +23,7 @@
12891298
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
12901299
* POSSIBILITY OF SUCH DAMAGE.
@@ -1312,8 +1321,8 @@ diff -u libmagic.orig/cdf_time.c libmagic/cdf_time.c
13121321
return buf;
13131322
(void)snprintf(buf, 26, "*Bad* %#16.16" INT64_T_FORMAT "x\n",
13141323
diff -u libmagic.orig/compress.c libmagic/compress.c
1315-
--- libmagic.orig/compress.c 2021-02-22 17:49:07.000000000 -0700
1316-
+++ libmagic/compress.c 2021-10-24 17:03:48.529884451 -0600
1324+
--- libmagic.orig/compress.c 2021-02-23 01:49:07.000000000 +0100
1325+
+++ libmagic/compress.c 2023-12-09 11:51:31.704229532 +0100
13171326
@@ -51,7 +51,7 @@
13181327
#ifndef HAVE_SIG_T
13191328
typedef void (*sig_t)(int);
@@ -1449,8 +1458,8 @@ diff -u libmagic.orig/compress.c libmagic/compress.c
14491458
#endif
14501459
+#endif
14511460
diff -u libmagic.orig/der.c libmagic/der.c
1452-
--- libmagic.orig/der.c 2021-02-22 17:49:06.000000000 -0700
1453-
+++ libmagic/der.c 2021-10-24 17:03:48.529884451 -0600
1461+
--- libmagic.orig/der.c 2021-02-23 01:49:06.000000000 +0100
1462+
+++ libmagic/der.c 2023-12-09 11:51:31.704229532 +0100
14541463
@@ -54,7 +54,9 @@
14551464
#include "magic.h"
14561465
#include "der.h"
@@ -1462,8 +1471,8 @@ diff -u libmagic.orig/der.c libmagic/der.c
14621471
#include <err.h>
14631472
#endif
14641473
diff -u libmagic.orig/elfclass.h libmagic/elfclass.h
1465-
--- libmagic.orig/elfclass.h 2021-02-22 17:49:06.000000000 -0700
1466-
+++ libmagic/elfclass.h 2021-10-24 17:03:40.741632734 -0600
1474+
--- libmagic.orig/elfclass.h 2021-02-23 01:49:06.000000000 +0100
1475+
+++ libmagic/elfclass.h 2023-12-09 11:51:31.704229532 +0100
14671476
@@ -41,7 +41,7 @@
14681477
return toomany(ms, "program headers", phnum);
14691478
flags |= FLAGS_IS_CORE;
@@ -1492,8 +1501,8 @@ diff -u libmagic.orig/elfclass.h libmagic/elfclass.h
14921501
fsize, elf_getu16(swap, elfhdr.e_machine),
14931502
CAST(int, elf_getu16(swap, elfhdr.e_shstrndx)),
14941503
diff -u libmagic.orig/encoding.c libmagic/encoding.c
1495-
--- libmagic.orig/encoding.c 2021-02-22 17:49:06.000000000 -0700
1496-
+++ libmagic/encoding.c 2021-10-24 17:03:48.529884451 -0600
1504+
--- libmagic.orig/encoding.c 2021-02-23 01:49:06.000000000 +0100
1505+
+++ libmagic/encoding.c 2023-12-09 11:51:31.704229532 +0100
14971506
@@ -98,14 +98,14 @@
14981507
nbytes = ms->encoding_max;
14991508

@@ -1533,8 +1542,8 @@ diff -u libmagic.orig/encoding.c libmagic/encoding.c
15331542
if (u < 3) \
15341543
return 0; \
15351544
diff -u libmagic.orig/file.h libmagic/file.h
1536-
--- libmagic.orig/file.h 2021-02-22 17:49:06.000000000 -0700
1537-
+++ libmagic/file.h 2021-10-24 17:03:48.529884451 -0600
1545+
--- libmagic.orig/file.h 2021-02-23 01:49:06.000000000 +0100
1546+
+++ libmagic/file.h 2023-12-09 11:51:31.704229532 +0100
15381547
@@ -33,17 +33,14 @@
15391548
#ifndef __file_h__
15401549
#define __file_h__
@@ -1794,8 +1803,8 @@ diff -u libmagic.orig/file.h libmagic/file.h
17941803
+
17951804
#endif /* __file_h__ */
17961805
diff -u libmagic.orig/fsmagic.c libmagic/fsmagic.c
1797-
--- libmagic.orig/fsmagic.c 2021-02-22 17:49:06.000000000 -0700
1798-
+++ libmagic/fsmagic.c 2021-10-24 17:03:45.681791493 -0600
1806+
--- libmagic.orig/fsmagic.c 2021-02-23 01:49:06.000000000 +0100
1807+
+++ libmagic/fsmagic.c 2023-12-09 11:51:31.704229532 +0100
17991808
@@ -66,26 +66,10 @@
18001809
# define minor(dev) ((dev) & 0xff)
18011810
#endif
@@ -2087,8 +2096,8 @@ diff -u libmagic.orig/fsmagic.c libmagic/fsmagic.c
20872096
#ifndef __COHERENT__
20882097
case S_IFSOCK:
20892098
diff -u libmagic.orig/funcs.c libmagic/funcs.c
2090-
--- libmagic.orig/funcs.c 2021-02-22 17:49:06.000000000 -0700
2091-
+++ libmagic/funcs.c 2021-10-24 17:03:48.529884451 -0600
2099+
--- libmagic.orig/funcs.c 2021-02-23 01:49:06.000000000 +0100
2100+
+++ libmagic/funcs.c 2023-12-09 11:51:31.704229532 +0100
20922101
@@ -51,6 +51,13 @@
20932102
#define SIZE_MAX ((size_t)~0)
20942103
#endif
@@ -2407,8 +2416,8 @@ diff -u libmagic.orig/funcs.c libmagic/funcs.c
24072416
protected char *
24082417
file_strtrim(char *str)
24092418
diff -u libmagic.orig/magic.c libmagic/magic.c
2410-
--- libmagic.orig/magic.c 2021-02-22 17:49:06.000000000 -0700
2411-
+++ libmagic/magic.c 2022-06-06 00:36:46.758464267 -0600
2419+
--- libmagic.orig/magic.c 2021-02-23 01:49:06.000000000 +0100
2420+
+++ libmagic/magic.c 2023-12-09 11:51:31.704229532 +0100
24122421
@@ -25,11 +25,6 @@
24132422
* SUCH DAMAGE.
24142423
*/
@@ -2886,8 +2895,8 @@ diff -u libmagic.orig/magic.c libmagic/magic.c
28862895
}
28872896
return file_getbuffer(ms);
28882897
diff -u libmagic.orig/magic.h libmagic/magic.h
2889-
--- libmagic.orig/magic.h 2022-07-05 00:56:31.213294537 -0600
2890-
+++ libmagic/magic.h 2021-10-24 17:03:48.529884451 -0600
2898+
--- libmagic.orig/magic.h 2024-02-11 01:00:54.982008274 +0100
2899+
+++ libmagic/magic.h 2023-12-09 11:51:31.704229532 +0100
28912900
@@ -126,6 +126,7 @@
28922901

28932902
const char *magic_getpath(const char *, int);
@@ -2897,8 +2906,8 @@ diff -u libmagic.orig/magic.h libmagic/magic.h
28972906
const char *magic_buffer(magic_t, const void *, size_t);
28982907

28992908
diff -u libmagic.orig/print.c libmagic/print.c
2900-
--- libmagic.orig/print.c 2021-02-22 17:49:07.000000000 -0700
2901-
+++ libmagic/print.c 2021-10-24 17:03:45.681791493 -0600
2909+
--- libmagic.orig/print.c 2021-02-23 01:49:07.000000000 +0100
2910+
+++ libmagic/print.c 2023-12-09 11:51:31.704229532 +0100
29022911
@@ -28,6 +28,7 @@
29032912
/*
29042913
* print.c - debugging printout routines
@@ -2962,8 +2971,8 @@ diff -u libmagic.orig/print.c libmagic/print.c
29622971
if (pp == NULL)
29632972
goto out;
29642973
diff -u libmagic.orig/readcdf.c libmagic/readcdf.c
2965-
--- libmagic.orig/readcdf.c 2021-02-22 17:49:08.000000000 -0700
2966-
+++ libmagic/readcdf.c 2021-10-24 17:03:45.681791493 -0600
2974+
--- libmagic.orig/readcdf.c 2021-02-23 01:49:08.000000000 +0100
2975+
+++ libmagic/readcdf.c 2023-12-09 11:51:31.704229532 +0100
29672976
@@ -31,7 +31,11 @@
29682977

29692978
#include <assert.h>
@@ -3086,8 +3095,8 @@ diff -u libmagic.orig/readcdf.c libmagic/readcdf.c
30863095
/* If we handled it already, return */
30873096
if (i != -1)
30883097
diff -u libmagic.orig/softmagic.c libmagic/softmagic.c
3089-
--- libmagic.orig/softmagic.c 2021-02-22 17:49:06.000000000 -0700
3090-
+++ libmagic/softmagic.c 2022-07-05 00:49:26.658974406 -0600
3098+
--- libmagic.orig/softmagic.c 2021-02-23 01:49:06.000000000 +0100
3099+
+++ libmagic/softmagic.c 2023-12-09 11:51:31.704229532 +0100
30913100
@@ -43,6 +43,10 @@
30923101
#include <time.h>
30933102
#include "der.h"
@@ -3537,8 +3546,8 @@ diff -u libmagic.orig/softmagic.c libmagic/softmagic.c
35373546
}
35383547
case FILE_USE:
35393548
diff -u libmagic.orig/strcasestr.c libmagic/strcasestr.c
3540-
--- libmagic.orig/strcasestr.c 2021-02-22 17:49:12.000000000 -0700
3541-
+++ libmagic/strcasestr.c 2022-06-06 00:36:46.758464267 -0600
3549+
--- libmagic.orig/strcasestr.c 2021-02-23 01:49:12.000000000 +0100
3550+
+++ libmagic/strcasestr.c 2023-12-09 11:51:31.704229532 +0100
35423551
@@ -39,6 +39,8 @@
35433552

35443553
#include "file.h"

ext/fileinfo/libmagic/ascmagic.c

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -148,8 +148,10 @@ file_ascmagic_with_encoding(struct magic_set *ms, const struct buffer *b,
148148
goto done;
149149
}
150150
if ((utf8_end = encode_utf8(utf8_buf, mlen, ubuf, ulen))
151-
== NULL)
151+
== NULL) {
152+
rv = 0;
152153
goto done;
154+
}
153155
buffer_init(&bb, b->fd, &b->st, utf8_buf,
154156
CAST(size_t, utf8_end - utf8_buf));
155157

ext/fileinfo/tests/gh13344.phpt

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
--TEST--
2+
GH-13344 (finfo::buffer(): Failed identify data 0:(null))
3+
--EXTENSIONS--
4+
fileinfo
5+
--FILE--
6+
<?php
7+
$data = pack('H*','fffe000000099999');
8+
$mime_type = (new finfo(FILEINFO_MIME))->buffer($data);
9+
echo $mime_type;
10+
?>
11+
--EXPECT--
12+
application/octet-stream; charset=utf-32le

0 commit comments

Comments
 (0)