Skip to content

Commit b2f692a

Browse files
committed
Merge branch 'PHP-8.1'
2 parents f2d6e17 + ca6d511 commit b2f692a

File tree

3 files changed

+100
-53
lines changed

3 files changed

+100
-53
lines changed

ext/fileinfo/libmagic.patch

Lines changed: 86 additions & 47 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-23 00:51:11.000000000 +0000
3-
+++ libmagic/apprentice.c 2022-04-25 16:00:13.974219365 +0100
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
44
@@ -29,6 +29,8 @@
55
* apprentice - make one pass through /etc/magic, learning its secrets.
66
*/
@@ -373,6 +373,15 @@ diff -u libmagic.orig/apprentice.c libmagic/apprentice.c
373373
if (len == 0) /* null line, garbage, etc */
374374
continue;
375375
if (line[len - 1] == '\n') {
376+
@@ -1232,7 +1187,7 @@
377+
continue;
378+
}
379+
if ((*bang[i].fun)(ms, &me,
380+
- line + bang[i].len + 2,
381+
+ line + bang[i].len + 2,
382+
len - bang[i].len - 2) != 0) {
383+
(*errs)++;
384+
continue;
376385
@@ -1256,8 +1211,8 @@
377386
}
378387
if (me.mp)
@@ -411,7 +420,7 @@ diff -u libmagic.orig/apprentice.c libmagic/apprentice.c
411420
- char **filearr = NULL, *mfn;
412421
- struct stat st;
413422
+ char **filearr = NULL;
414-
+ zend_stat_t st;
423+
+ zend_stat_t st = {0};
415424
struct magic_map *map;
416425
struct magic_entry_set mset[MAGIC_SETS];
417426
- DIR *dir;
@@ -501,6 +510,15 @@ diff -u libmagic.orig/apprentice.c libmagic/apprentice.c
501510
}
502511
} else
503512
load_1(ms, action, fn, &errs, mset);
513+
@@ -1465,7 +1419,7 @@
514+
/* coalesce per file arrays into a single one, if needed */
515+
if (mset[j].count == 0)
516+
continue;
517+
-
518+
+
519+
if (coalesce_entries(ms, mset[j].me, mset[j].count,
520+
&map->magic[j], &map->nmagic[j]) == -1) {
521+
errs++;
504522
@@ -1474,7 +1428,6 @@
505523
}
506524

@@ -926,8 +944,8 @@ diff -u libmagic.orig/apprentice.c libmagic/apprentice.c
926944
m->str_flags = swap4(m->str_flags);
927945
}
928946
diff -u libmagic.orig/ascmagic.c libmagic/ascmagic.c
929-
--- libmagic.orig/ascmagic.c 2021-02-23 00:49:06.000000000 +0000
930-
+++ libmagic/ascmagic.c 2022-04-25 16:00:13.974219365 +0100
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
931949
@@ -96,7 +96,7 @@
932950
rv = file_ascmagic_with_encoding(ms, &bb,
933951
ubuf, ulen, code, type, text);
@@ -957,8 +975,8 @@ diff -u libmagic.orig/ascmagic.c libmagic/ascmagic.c
957975
return rv;
958976
}
959977
diff -u libmagic.orig/buffer.c libmagic/buffer.c
960-
--- libmagic.orig/buffer.c 2021-02-23 00:49:26.000000000 +0000
961-
+++ libmagic/buffer.c 2022-04-15 20:27:23.837624723 +0100
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
962980
@@ -31,19 +31,23 @@
963981
#endif /* lint */
964982

@@ -1013,8 +1031,8 @@ diff -u libmagic.orig/buffer.c libmagic/buffer.c
10131031
goto out;
10141032
}
10151033
diff -u libmagic.orig/cdf.c libmagic/cdf.c
1016-
--- libmagic.orig/cdf.c 2021-02-23 00:49:06.000000000 +0000
1017-
+++ libmagic/cdf.c 2022-04-15 20:27:23.837624723 +0100
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
10181036
@@ -43,7 +43,17 @@
10191037
#include <err.h>
10201038
#endif
@@ -1248,8 +1266,8 @@ diff -u libmagic.orig/cdf.c libmagic/cdf.c
12481266

12491267
#endif
12501268
diff -u libmagic.orig/cdf.h libmagic/cdf.h
1251-
--- libmagic.orig/cdf.h 2021-02-23 00:49:06.000000000 +0000
1252-
+++ libmagic/cdf.h 2022-04-15 20:27:23.837624723 +0100
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
12531271
@@ -35,10 +35,10 @@
12541272
#ifndef _H_CDF_
12551273
#define _H_CDF_
@@ -1265,8 +1283,8 @@ diff -u libmagic.orig/cdf.h libmagic/cdf.h
12651283
#ifdef __DJGPP__
12661284
#define timespec timeval
12671285
diff -u libmagic.orig/cdf_time.c libmagic/cdf_time.c
1268-
--- libmagic.orig/cdf_time.c 2021-02-23 00:49:06.000000000 +0000
1269-
+++ libmagic/cdf_time.c 2022-04-15 20:27:23.837624723 +0100
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
12701288
@@ -23,6 +23,7 @@
12711289
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
12721290
* POSSIBILITY OF SUCH DAMAGE.
@@ -1294,8 +1312,8 @@ diff -u libmagic.orig/cdf_time.c libmagic/cdf_time.c
12941312
return buf;
12951313
(void)snprintf(buf, 26, "*Bad* %#16.16" INT64_T_FORMAT "x\n",
12961314
diff -u libmagic.orig/compress.c libmagic/compress.c
1297-
--- libmagic.orig/compress.c 2021-02-23 00:49:07.000000000 +0000
1298-
+++ libmagic/compress.c 2022-04-25 16:00:13.978219426 +0100
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
12991317
@@ -51,7 +51,7 @@
13001318
#ifndef HAVE_SIG_T
13011319
typedef void (*sig_t)(int);
@@ -1431,8 +1449,8 @@ diff -u libmagic.orig/compress.c libmagic/compress.c
14311449
#endif
14321450
+#endif
14331451
diff -u libmagic.orig/der.c libmagic/der.c
1434-
--- libmagic.orig/der.c 2021-02-23 00:49:06.000000000 +0000
1435-
+++ libmagic/der.c 2022-04-25 16:00:13.978219426 +0100
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
14361454
@@ -54,7 +54,9 @@
14371455
#include "magic.h"
14381456
#include "der.h"
@@ -1444,8 +1462,8 @@ diff -u libmagic.orig/der.c libmagic/der.c
14441462
#include <err.h>
14451463
#endif
14461464
diff -u libmagic.orig/elfclass.h libmagic/elfclass.h
1447-
--- libmagic.orig/elfclass.h 2021-02-23 00:49:06.000000000 +0000
1448-
+++ libmagic/elfclass.h 2022-04-15 20:27:23.837624723 +0100
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
14491467
@@ -41,7 +41,7 @@
14501468
return toomany(ms, "program headers", phnum);
14511469
flags |= FLAGS_IS_CORE;
@@ -1474,8 +1492,8 @@ diff -u libmagic.orig/elfclass.h libmagic/elfclass.h
14741492
fsize, elf_getu16(swap, elfhdr.e_machine),
14751493
CAST(int, elf_getu16(swap, elfhdr.e_shstrndx)),
14761494
diff -u libmagic.orig/encoding.c libmagic/encoding.c
1477-
--- libmagic.orig/encoding.c 2021-02-23 00:49:06.000000000 +0000
1478-
+++ libmagic/encoding.c 2022-04-25 16:00:13.978219426 +0100
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
14791497
@@ -98,14 +98,14 @@
14801498
nbytes = ms->encoding_max;
14811499

@@ -1515,8 +1533,8 @@ diff -u libmagic.orig/encoding.c libmagic/encoding.c
15151533
if (u < 3) \
15161534
return 0; \
15171535
diff -u libmagic.orig/file.h libmagic/file.h
1518-
--- libmagic.orig/file.h 2021-02-23 00:49:06.000000000 +0000
1519-
+++ libmagic/file.h 2022-04-25 16:00:13.978219426 +0100
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
15201538
@@ -33,17 +33,14 @@
15211539
#ifndef __file_h__
15221540
#define __file_h__
@@ -1776,8 +1794,8 @@ diff -u libmagic.orig/file.h libmagic/file.h
17761794
+
17771795
#endif /* __file_h__ */
17781796
diff -u libmagic.orig/fsmagic.c libmagic/fsmagic.c
1779-
--- libmagic.orig/fsmagic.c 2021-02-23 00:49:06.000000000 +0000
1780-
+++ libmagic/fsmagic.c 2022-04-15 20:27:23.837624723 +0100
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
17811799
@@ -66,26 +66,10 @@
17821800
# define minor(dev) ((dev) & 0xff)
17831801
#endif
@@ -2069,8 +2087,8 @@ diff -u libmagic.orig/fsmagic.c libmagic/fsmagic.c
20692087
#ifndef __COHERENT__
20702088
case S_IFSOCK:
20712089
diff -u libmagic.orig/funcs.c libmagic/funcs.c
2072-
--- libmagic.orig/funcs.c 2021-02-23 00:49:06.000000000 +0000
2073-
+++ libmagic/funcs.c 2022-04-25 16:00:13.978219426 +0100
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
20742092
@@ -51,6 +51,13 @@
20752093
#define SIZE_MAX ((size_t)~0)
20762094
#endif
@@ -2389,8 +2407,8 @@ diff -u libmagic.orig/funcs.c libmagic/funcs.c
23892407
protected char *
23902408
file_strtrim(char *str)
23912409
diff -u libmagic.orig/magic.c libmagic/magic.c
2392-
--- libmagic.orig/magic.c 2021-02-23 00:49:06.000000000 +0000
2393-
+++ libmagic/magic.c 2022-04-25 16:00:13.978219426 +0100
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
23942412
@@ -25,11 +25,6 @@
23952413
* SUCH DAMAGE.
23962414
*/
@@ -2717,7 +2735,7 @@ diff -u libmagic.orig/magic.c libmagic/magic.c
27172735
int rv = -1;
27182736
unsigned char *buf;
27192737
- struct stat sb;
2720-
+ zend_stat_t sb;
2738+
+ zend_stat_t sb = {0};
27212739
ssize_t nbytes = 0; /* number of bytes read from a datafile */
27222740
- int ispipe = 0;
27232741
- int okstat = 0;
@@ -2868,8 +2886,8 @@ diff -u libmagic.orig/magic.c libmagic/magic.c
28682886
}
28692887
return file_getbuffer(ms);
28702888
diff -u libmagic.orig/magic.h libmagic/magic.h
2871-
--- libmagic.orig/magic.h 2022-04-25 16:01:07.619036406 +0100
2872-
+++ libmagic/magic.h 2022-04-25 16:00:13.978219426 +0100
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
28732891
@@ -126,6 +126,7 @@
28742892

28752893
const char *magic_getpath(const char *, int);
@@ -2879,8 +2897,8 @@ diff -u libmagic.orig/magic.h libmagic/magic.h
28792897
const char *magic_buffer(magic_t, const void *, size_t);
28802898

28812899
diff -u libmagic.orig/print.c libmagic/print.c
2882-
--- libmagic.orig/print.c 2021-02-23 00:49:07.000000000 +0000
2883-
+++ libmagic/print.c 2022-04-15 20:27:23.837624723 +0100
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
28842902
@@ -28,6 +28,7 @@
28852903
/*
28862904
* print.c - debugging printout routines
@@ -2944,8 +2962,8 @@ diff -u libmagic.orig/print.c libmagic/print.c
29442962
if (pp == NULL)
29452963
goto out;
29462964
diff -u libmagic.orig/readcdf.c libmagic/readcdf.c
2947-
--- libmagic.orig/readcdf.c 2021-02-23 00:49:08.000000000 +0000
2948-
+++ libmagic/readcdf.c 2022-04-15 20:27:23.837624723 +0100
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
29492967
@@ -31,7 +31,11 @@
29502968

29512969
#include <assert.h>
@@ -3068,8 +3086,8 @@ diff -u libmagic.orig/readcdf.c libmagic/readcdf.c
30683086
/* If we handled it already, return */
30693087
if (i != -1)
30703088
diff -u libmagic.orig/softmagic.c libmagic/softmagic.c
3071-
--- libmagic.orig/softmagic.c 2021-02-23 00:49:06.000000000 +0000
3072-
+++ libmagic/softmagic.c 2022-04-25 16:00:30.222464809 +0100
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
30733091
@@ -43,6 +43,10 @@
30743092
#include <time.h>
30753093
#include "der.h"
@@ -3247,7 +3265,29 @@ diff -u libmagic.orig/softmagic.c libmagic/softmagic.c
32473265
return rv;
32483266
}
32493267

3250-
@@ -1845,15 +1847,15 @@
3268+
@@ -1531,11 +1533,7 @@
3269+
size_t len;
3270+
*c = ms->c;
3271+
len = c->len * sizeof(*c->li);
3272+
- ms->c.li = CAST(struct level_info *, malloc(len));
3273+
- if (ms->c.li == NULL) {
3274+
- ms->c = *c;
3275+
- return -1;
3276+
- }
3277+
+ ms->c.li = CAST(struct level_info *, emalloc(len));
3278+
memcpy(ms->c.li, c->li, len);
3279+
return 0;
3280+
}
3281+
@@ -1543,7 +1541,7 @@
3282+
private void
3283+
restore_cont(struct magic_set *ms, struct cont *c)
3284+
{
3285+
- free(ms->c.li);
3286+
+ efree(ms->c.li);
3287+
ms->c = *c;
3288+
}
3289+
3290+
@@ -1845,15 +1843,15 @@
32513291
if ((ms->flags & MAGIC_NODESC) == 0 &&
32523292
file_printf(ms, F(ms, m->desc, "%u"), offset) == -1)
32533293
{
@@ -3266,7 +3306,7 @@ diff -u libmagic.orig/softmagic.c libmagic/softmagic.c
32663306
return rv;
32673307

32683308
case FILE_USE:
3269-
@@ -1958,10 +1960,13 @@
3309+
@@ -1958,10 +1956,13 @@
32703310
}
32713311
else if ((flags & STRING_COMPACT_WHITESPACE) &&
32723312
isspace(*a)) {
@@ -3281,7 +3321,7 @@ diff -u libmagic.orig/softmagic.c libmagic/softmagic.c
32813321
b++;
32823322
}
32833323
else {
3284-
@@ -1997,6 +2002,60 @@
3324+
@@ -1997,6 +1998,60 @@
32853325
return file_strncmp(a, b, len, maxlen, flags);
32863326
}
32873327

@@ -3342,7 +3382,7 @@ diff -u libmagic.orig/softmagic.c libmagic/softmagic.c
33423382
private int
33433383
magiccheck(struct magic_set *ms, struct magic *m)
33443384
{
3345-
@@ -2144,14 +2203,13 @@
3385+
@@ -2144,14 +2199,13 @@
33463386
slen = MIN(m->vallen, sizeof(m->value.s));
33473387
l = 0;
33483388
v = 0;
@@ -3359,15 +3399,15 @@ diff -u libmagic.orig/softmagic.c libmagic/softmagic.c
33593399
if (!found)
33603400
return 0;
33613401
idx = found - ms->search.s;
3362-
@@ -2159,7 +2217,6 @@
3402+
@@ -2159,7 +2213,6 @@
33633403
ms->search.rm_len = ms->search.s_len - idx;
33643404
break;
33653405
}
33663406
-#endif
33673407

33683408
for (idx = 0; m->str_range == 0 || idx < m->str_range; idx++) {
33693409
if (slen + idx > ms->search.s_len)
3370-
@@ -2176,65 +2233,77 @@
3410+
@@ -2176,65 +2229,77 @@
33713411
break;
33723412
}
33733413
case FILE_REGEX: {
@@ -3497,15 +3537,14 @@ diff -u libmagic.orig/softmagic.c libmagic/softmagic.c
34973537
}
34983538
case FILE_USE:
34993539
diff -u libmagic.orig/strcasestr.c libmagic/strcasestr.c
3500-
--- libmagic.orig/strcasestr.c 2021-02-23 00:49:12.000000000 +0000
3501-
+++ libmagic/strcasestr.c 2022-04-15 20:27:23.837624723 +0100
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
35023542
@@ -39,6 +39,8 @@
35033543

35043544
#include "file.h"
35053545

35063546
+#include <inttypes.h>
35073547
+#include <stdint.h>
3508-
+
35093548
#include <assert.h>
35103549
#include <ctype.h>
35113550
#include <string.h>

ext/fileinfo/libmagic/softmagic.c

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1533,19 +1533,15 @@ save_cont(struct magic_set *ms, struct cont *c)
15331533
size_t len;
15341534
*c = ms->c;
15351535
len = c->len * sizeof(*c->li);
1536-
ms->c.li = CAST(struct level_info *, malloc(len));
1537-
if (ms->c.li == NULL) {
1538-
ms->c = *c;
1539-
return -1;
1540-
}
1536+
ms->c.li = CAST(struct level_info *, emalloc(len));
15411537
memcpy(ms->c.li, c->li, len);
15421538
return 0;
15431539
}
15441540

15451541
private void
15461542
restore_cont(struct magic_set *ms, struct cont *c)
15471543
{
1548-
free(ms->c.li);
1544+
efree(ms->c.li);
15491545
ms->c = *c;
15501546
}
15511547

ext/fileinfo/tests/bug81723.phpt

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
--TEST--
2+
Bug #81723 (Memory corruption in finfo_buffer())
3+
--EXTENSIONS--
4+
fileinfo
5+
--FILE--
6+
<?php
7+
$data = hex2bin("00018a7570001097db97979897977d87979797000092001f0051000000000000000000ffff7fff00000000001e0000000000000000000000000c0000000000000000000000000000dc0000000100000000000000004f011900007f0000000000180039000000000000000000000000000000dc0000000100000000000000004f011900007f0000f500000000eeff0000000000000000010000fd00");
8+
9+
$f = finfo_open();
10+
finfo_buffer($f, $data);
11+
?>
12+
--EXPECT--

0 commit comments

Comments
 (0)