Skip to content

Commit 1fa8ecd

Browse files
author
Jerome Loyet
committed
Merge branch 'PHP-5.4' of git.php.net:php-src into PHP-5.4
* 'PHP-5.4' of git.php.net:php-src: (27 commits) Fixed Bug #62202 (ReflectionParameter::getDefaultValue() memory leaks with constant) sort NEWS fix bug #55042 - erealloc without updating pointer Fix bug #62186 readline fails to compile fix unchecked emalloc (cherry picked from commit 158d8a6) fix test fix test Typofix in comment in proc_open.c fix CVE-2012-2143 updated the libmagic patch after Felipes regex fix Fix bug #62150 Test Bug - ext/fileinfo/tests/finfo_open_error.phpt Bug #62177 deactivate the linux test version on win Fix bug #62177 Test Bug - finfo_file_regex.phpt Fixed bug #62176 Test Bug - sapi/cli/tests/bug61546.phpt fix unchecked emalloc add CVE add bug 62146 add bug #62082 sync with HEAD sync with HEAD ...
2 parents 238caeb + b548d9a commit 1fa8ecd

File tree

16 files changed

+248
-152
lines changed

16 files changed

+248
-152
lines changed

Zend/tests/bug62097.phpt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
--TEST--
22
Bug #62097: fix for bug #54547 is wrong for 32-bit machines
33
--SKIPIF--
4-
<php
4+
<?php
55
if (PHP_INT_MAX !== 2147483647)
66
die('skip for system with 32-bit wide longs only');
77
--FILE--

ext/fileinfo/libmagic.patch

Lines changed: 50 additions & 74 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 2012-04-22 19:30:43.182305355 +0800
3-
+++ libmagic/apprentice.c 2012-04-22 19:28:57.346309536 +0800
2+
--- libmagic.orig/apprentice.c 2012-05-29 14:40:41.710960045 +0200
3+
+++ libmagic/apprentice.c 2012-04-22 18:57:16.215980866 +0200
44
@@ -29,6 +29,8 @@
55
* apprentice - make one pass through /etc/magic, learning its secrets.
66
*/
@@ -729,8 +729,8 @@ diff -u libmagic.orig/apprentice.c libmagic/apprentice.c
729729
m->str_flags = swap4(m->str_flags);
730730
}
731731
diff -u libmagic.orig/ascmagic.c libmagic/ascmagic.c
732-
--- libmagic.orig/ascmagic.c 2012-04-22 19:30:43.182305355 +0800
733-
+++ libmagic/ascmagic.c 2012-04-22 19:28:57.330309533 +0800
732+
--- libmagic.orig/ascmagic.c 2012-05-29 14:40:41.710960045 +0200
733+
+++ libmagic/ascmagic.c 2012-04-22 18:57:16.215980866 +0200
734734
@@ -139,10 +139,8 @@
735735
/* malloc size is a conservative overestimate; could be
736736
improved, or at least realloced after conversion. */
@@ -755,8 +755,8 @@ diff -u libmagic.orig/ascmagic.c libmagic/ascmagic.c
755755
return rv;
756756
}
757757
diff -u libmagic.orig/cdf.c libmagic/cdf.c
758-
--- libmagic.orig/cdf.c 2012-04-22 19:30:43.182305355 +0800
759-
+++ libmagic/cdf.c 2012-04-22 19:28:57.370309531 +0800
758+
--- libmagic.orig/cdf.c 2012-05-29 14:40:41.710960045 +0200
759+
+++ libmagic/cdf.c 2012-04-22 18:57:16.219978162 +0200
760760
@@ -43,7 +43,17 @@
761761
#include <err.h>
762762
#endif
@@ -819,8 +819,8 @@ diff -u libmagic.orig/cdf.c libmagic/cdf.c
819819
(void)fprintf(stderr, "timestamp %s\n", buf);
820820
} else {
821821
diff -u libmagic.orig/cdf.h libmagic/cdf.h
822-
--- libmagic.orig/cdf.h 2012-04-22 19:30:43.182305355 +0800
823-
+++ libmagic/cdf.h 2012-04-22 19:28:57.370309531 +0800
822+
--- libmagic.orig/cdf.h 2012-05-29 14:40:41.710960045 +0200
823+
+++ libmagic/cdf.h 2012-04-22 18:57:16.219978162 +0200
824824
@@ -35,7 +35,7 @@
825825
#ifndef _H_CDF_
826826
#define _H_CDF_
@@ -857,8 +857,8 @@ diff -u libmagic.orig/cdf.h libmagic/cdf.h
857857
void cdf_swap_header(cdf_header_t *);
858858
void cdf_unpack_header(cdf_header_t *, char *);
859859
diff -u libmagic.orig/cdf_time.c libmagic/cdf_time.c
860-
--- libmagic.orig/cdf_time.c 2012-04-22 19:30:43.182305355 +0800
861-
+++ libmagic/cdf_time.c 2012-04-22 19:28:57.326309537 +0800
860+
--- libmagic.orig/cdf_time.c 2012-05-29 14:40:41.710960045 +0200
861+
+++ libmagic/cdf_time.c 2012-04-22 18:57:16.219978162 +0200
862862
@@ -96,7 +96,7 @@
863863
}
864864

@@ -916,8 +916,8 @@ diff -u libmagic.orig/cdf_time.c libmagic/cdf_time.c
916916
static const char *ref = "Sat Apr 23 01:30:00 1977";
917917
char *p, *q;
918918
diff -u libmagic.orig/compress.c libmagic/compress.c
919-
--- libmagic.orig/compress.c 2012-04-22 19:30:43.182305355 +0800
920-
+++ libmagic/compress.c 2012-04-22 19:28:57.314309548 +0800
919+
--- libmagic.orig/compress.c 2012-05-29 14:40:41.710960045 +0200
920+
+++ libmagic/compress.c 2012-04-22 18:57:16.219978162 +0200
921921
@@ -32,6 +32,7 @@
922922
* uncompress(method, old, n, newch) - uncompress old into new,
923923
* using method, return sizeof new
@@ -1079,8 +1079,8 @@ diff -u libmagic.orig/compress.c libmagic/compress.c
10791079
-#endif
10801080
+#endif /* if PHP_FILEINFO_UNCOMPRESS */
10811081
diff -u libmagic.orig/file.h libmagic/file.h
1082-
--- libmagic.orig/file.h 2012-04-22 19:30:43.186305188 +0800
1083-
+++ libmagic/file.h 2012-04-22 19:49:58.922256776 +0800
1082+
--- libmagic.orig/file.h 2012-05-29 14:40:41.710960045 +0200
1083+
+++ libmagic/file.h 2012-04-22 18:57:16.219978162 +0200
10841084
@@ -33,11 +33,9 @@
10851085
#ifndef __file_h__
10861086
#define __file_h__
@@ -1252,8 +1252,8 @@ diff -u libmagic.orig/file.h libmagic/file.h
12521252
+
12531253
#endif /* __file_h__ */
12541254
diff -u libmagic.orig/fsmagic.c libmagic/fsmagic.c
1255-
--- libmagic.orig/fsmagic.c 2012-04-22 19:30:43.186305188 +0800
1256-
+++ libmagic/fsmagic.c 2012-04-22 19:28:57.298309521 +0800
1255+
--- libmagic.orig/fsmagic.c 2012-05-29 14:40:41.710960045 +0200
1256+
+++ libmagic/fsmagic.c 2012-04-22 18:57:16.219978162 +0200
12571257
@@ -59,27 +59,21 @@
12581258
# define minor(dev) ((dev) & 0xff)
12591259
#endif
@@ -1577,8 +1577,8 @@ diff -u libmagic.orig/fsmagic.c libmagic/fsmagic.c
15771577

15781578
/*
15791579
diff -u libmagic.orig/funcs.c libmagic/funcs.c
1580-
--- libmagic.orig/funcs.c 2012-04-22 19:30:43.186305188 +0800
1581-
+++ libmagic/funcs.c 2012-04-22 19:28:57.370309531 +0800
1580+
--- libmagic.orig/funcs.c 2012-05-29 14:40:41.710960045 +0200
1581+
+++ libmagic/funcs.c 2012-04-22 18:57:16.219978162 +0200
15821582
@@ -41,52 +41,42 @@
15831583
#if defined(HAVE_WCTYPE_H)
15841584
#include <wctype.h>
@@ -1872,11 +1872,9 @@ diff -u libmagic.orig/funcs.c libmagic/funcs.c
18721872
+ return rep_cnt;
18731873
}
18741874
+
1875-
Only in libmagic.orig: funcs.c.orig
1876-
Only in libmagic.orig: funcs.c.rej
18771875
diff -u libmagic.orig/magic.c libmagic/magic.c
1878-
--- libmagic.orig/magic.c 2012-04-22 19:30:43.186305188 +0800
1879-
+++ libmagic/magic.c 2012-04-22 19:28:57.370309531 +0800
1876+
--- libmagic.orig/magic.c 2012-05-29 14:40:41.710960045 +0200
1877+
+++ libmagic/magic.c 2012-04-22 18:57:16.219978162 +0200
18801878
@@ -25,11 +25,6 @@
18811879
* SUCH DAMAGE.
18821880
*/
@@ -2253,8 +2251,8 @@ diff -u libmagic.orig/magic.c libmagic/magic.c
22532251
public const char *
22542252
magic_error(struct magic_set *ms)
22552253
diff -u libmagic.orig/magic.h libmagic/magic.h
2256-
--- libmagic.orig/magic.h 2012-04-22 19:30:43.190305058 +0800
2257-
+++ libmagic/magic.h 2012-04-22 19:28:57.326309537 +0800
2254+
--- libmagic.orig/magic.h 2012-05-29 14:40:41.710960045 +0200
2255+
+++ libmagic/magic.h 2012-04-22 18:57:16.219978162 +0200
22582256
@@ -85,6 +85,7 @@
22592257

22602258
const char *magic_getpath(const char *, int);
@@ -2272,8 +2270,8 @@ diff -u libmagic.orig/magic.h libmagic/magic.h
22722270
int magic_errno(magic_t);
22732271

22742272
diff -u libmagic.orig/print.c libmagic/print.c
2275-
--- libmagic.orig/print.c 2012-04-22 19:30:43.190305058 +0800
2276-
+++ libmagic/print.c 2012-04-22 19:28:57.326309537 +0800
2273+
--- libmagic.orig/print.c 2012-05-29 14:40:41.710960045 +0200
2274+
+++ libmagic/print.c 2012-05-29 14:34:03.770376387 +0200
22772275
@@ -29,6 +29,9 @@
22782276
* print.c - debugging printout routines
22792277
*/
@@ -2467,8 +2465,8 @@ diff -u libmagic.orig/print.c libmagic/print.c
24672465

24682466
protected const char *
24692467
diff -u libmagic.orig/readcdf.c libmagic/readcdf.c
2470-
--- libmagic.orig/readcdf.c 2012-04-22 19:30:43.190305058 +0800
2471-
+++ libmagic/readcdf.c 2012-04-22 19:28:57.326309537 +0800
2468+
--- libmagic.orig/readcdf.c 2012-05-29 14:40:41.710960045 +0200
2469+
+++ libmagic/readcdf.c 2012-04-22 18:57:16.219978162 +0200
24722470
@@ -30,7 +30,11 @@
24732471
#endif
24742472

@@ -2515,8 +2513,8 @@ diff -u libmagic.orig/readcdf.c libmagic/readcdf.c
25152513
if ((ec = strchr(c, '\n')) != NULL)
25162514
*ec = '\0';
25172515
diff -u libmagic.orig/readelf.c libmagic/readelf.c
2518-
--- libmagic.orig/readelf.c 2012-04-22 19:30:43.190305058 +0800
2519-
+++ libmagic/readelf.c 2012-04-22 19:28:57.378309534 +0800
2516+
--- libmagic.orig/readelf.c 2012-05-29 14:40:41.710960045 +0200
2517+
+++ libmagic/readelf.c 2012-04-22 18:57:16.219978162 +0200
25202518
@@ -49,7 +49,7 @@
25212519
off_t, int *, int);
25222520
private int doshn(struct magic_set *, int, int, int, off_t, int, size_t,
@@ -2672,8 +2670,8 @@ diff -u libmagic.orig/readelf.c libmagic/readelf.c
26722670

26732671
if (fstat(fd, &st) == -1) {
26742672
diff -u libmagic.orig/softmagic.c libmagic/softmagic.c
2675-
--- libmagic.orig/softmagic.c 2012-04-22 19:30:43.194304945 +0800
2676-
+++ libmagic/softmagic.c 2012-04-22 19:28:57.286309597 +0800
2673+
--- libmagic.orig/softmagic.c 2012-05-29 14:40:41.710960045 +0200
2674+
+++ libmagic/softmagic.c 2012-05-29 14:34:31.900417647 +0200
26772675
@@ -41,6 +41,11 @@
26782676
#include <stdlib.h>
26792677
#include <time.h>
@@ -2860,7 +2858,7 @@ diff -u libmagic.orig/softmagic.c libmagic/softmagic.c
28602858
}
28612859
}
28622860

2863-
@@ -1669,6 +1642,65 @@
2861+
@@ -1669,6 +1642,42 @@
28642862
return file_strncmp(a, b, len, flags);
28652863
}
28662864

@@ -2876,29 +2874,6 @@ diff -u libmagic.orig/softmagic.c libmagic/softmagic.c
28762874
+
28772875
+ for (i=0; i<Z_STRLEN_P(pattern); i++, j++) {
28782876
+ switch (Z_STRVAL_P(pattern)[i]) {
2879-
+ case '?':
2880-
+ t[j] = '.';
2881-
+ break;
2882-
+ case '*':
2883-
+ t[j++] = '.';
2884-
+ t[j] = '*';
2885-
+ break;
2886-
+ case '.':
2887-
+ t[j++] = '\\';
2888-
+ t[j] = '.';
2889-
+ break;
2890-
+ case '\\':
2891-
+ t[j++] = '\\';
2892-
+ t[j] = '\\';
2893-
+ break;
2894-
+ case '(':
2895-
+ t[j++] = '\\';
2896-
+ t[j] = '(';
2897-
+ break;
2898-
+ case ')':
2899-
+ t[j++] = '\\';
2900-
+ t[j] = ')';
2901-
+ break;
29022877
+ case '~':
29032878
+ t[j++] = '\\';
29042879
+ t[j] = '~';
@@ -2926,7 +2901,7 @@ diff -u libmagic.orig/softmagic.c libmagic/softmagic.c
29262901
private int
29272902
magiccheck(struct magic_set *ms, struct magic *m)
29282903
{
2929-
@@ -1825,67 +1857,163 @@
2904+
@@ -1825,67 +1834,163 @@
29302905
break;
29312906
}
29322907
case FILE_REGEX: {
@@ -2937,23 +2912,7 @@ diff -u libmagic.orig/softmagic.c libmagic/softmagic.c
29372912
- if (ms->search.s == NULL)
29382913
- return 0;
29392914
-
2940-
+ zval *pattern;
2941-
+ int options = 0;
2942-
+ pcre_cache_entry *pce;
2943-
+ TSRMLS_FETCH();
2944-
+
2945-
+ MAKE_STD_ZVAL(pattern);
2946-
+ ZVAL_STRINGL(pattern, (char *)m->value.s, m->vallen, 0);
2947-
+
2948-
+ options |= PCRE_MULTILINE;
2949-
+
2950-
+ if (m->str_flags & STRING_IGNORE_CASE) {
2951-
+ options |= PCRE_CASELESS;
2952-
+ }
2953-
+
2954-
+ convert_libmagic_pattern(pattern, options);
2955-
+
2956-
l = 0;
2915+
- l = 0;
29572916
- rc = regcomp(&rx, m->value.s,
29582917
- REG_EXTENDED|REG_NEWLINE|
29592918
- ((m->str_flags & STRING_IGNORE_CASE) ? REG_ICASE : 0));
@@ -2970,6 +2929,23 @@ diff -u libmagic.orig/softmagic.c libmagic/softmagic.c
29702929
- size_t l = ms->search.s_len - 1;
29712930
- char c = ms->search.s[l];
29722931
- ((char *)(intptr_t)ms->search.s)[l] = '\0';
2932+
+ zval *pattern;
2933+
+ int options = 0;
2934+
+ pcre_cache_entry *pce;
2935+
+ TSRMLS_FETCH();
2936+
+
2937+
+ MAKE_STD_ZVAL(pattern);
2938+
+ ZVAL_STRINGL(pattern, (char *)m->value.s, m->vallen, 0);
2939+
+
2940+
+ options |= PCRE_MULTILINE;
2941+
+
2942+
+ if (m->str_flags & STRING_IGNORE_CASE) {
2943+
+ options |= PCRE_CASELESS;
2944+
+ }
2945+
+
2946+
+ convert_libmagic_pattern(pattern, options);
2947+
+
2948+
+ l = v = 0;
29732949
+#if (PHP_MAJOR_VERSION < 6)
29742950
+ if ((pce = pcre_get_compiled_regex_cache(Z_STRVAL_P(pattern), Z_STRLEN_P(pattern) TSRMLS_CC)) == NULL) {
29752951
#else
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
--TEST--
2+
Test finfo_file() function : regex rules
3+
--SKIPIF--
4+
<?php require_once(dirname(__FILE__) . '/skipif.inc');
5+
if (substr(PHP_OS, 0, 3) != 'WIN') {
6+
die('skip.. only for Windows');
7+
}
8+
?>
9+
--FILE--
10+
<?php
11+
/**
12+
* Works with the unix file command:
13+
* $ file -m magic resources/test.awk
14+
* resources/test.awk: awk script, ASCII text
15+
*/
16+
$magicFile = dirname(__FILE__) . DIRECTORY_SEPARATOR . 'magic';
17+
$finfo = finfo_open( FILEINFO_MIME, $magicFile );
18+
19+
echo "*** Testing finfo_file() : regex rules ***\n";
20+
21+
// Calling finfo_file() with all possible arguments
22+
$file = __DIR__ . '/resources/test.awk';
23+
var_dump( finfo_file( $finfo, $file ) );
24+
var_dump( finfo_file( $finfo, $file, FILEINFO_CONTINUE ) );
25+
26+
// Windows uses libfileinfo 1.0.5-dev
27+
// this may be causing the slightly different output from the first
28+
// finfo_file() call
29+
30+
?>
31+
===DONE===
32+
--EXPECTF--
33+
*** Testing finfo_file() : regex rules ***
34+
string(10) "text/plain"
35+
string(22) "awk script, ASCII text"
36+
===DONE===

ext/fileinfo/tests/finfo_file_regex.phpt

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,11 @@
11
--TEST--
22
Test finfo_file() function : regex rules
33
--SKIPIF--
4-
<?php require_once(dirname(__FILE__) . '/skipif.inc'); ?>
4+
<?php require_once(dirname(__FILE__) . '/skipif.inc');
5+
if (substr(PHP_OS, 0, 3) == 'WIN') {
6+
die('skip.. only for Non Windows Systems');
7+
}
8+
?>
59
--FILE--
610
<?php
711
/**
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
--TEST--
2+
Test finfo_open() function : error functionality
3+
--SKIPIF--
4+
<?php require_once(dirname(__FILE__) . '/skipif.inc');
5+
if(substr(PHP_OS, 0, 3) != 'WIN' )
6+
die("skip Not Valid for Linux");
7+
?>
8+
--FILE--
9+
<?php
10+
/* Prototype : resource finfo_open([int options [, string arg]])
11+
* Description: Create a new fileinfo resource.
12+
* Source code: ext/fileinfo/fileinfo.c
13+
* Alias to functions:
14+
*/
15+
16+
$magicFile = dirname(__FILE__) . DIRECTORY_SEPARATOR . 'magic';
17+
18+
echo "*** Testing finfo_open() : error functionality ***\n";
19+
20+
var_dump( finfo_open( FILEINFO_MIME, 'foobarfile' ) );
21+
var_dump( finfo_open( array(), $magicFile ) );
22+
var_dump( finfo_open( FILEINFO_MIME, $magicFile, 'extraArg' ) );
23+
var_dump( finfo_open( PHP_INT_MAX - 1, $magicFile ) );
24+
var_dump( finfo_open( 'foobar' ) );
25+
26+
var_dump( new finfo('foobar') );
27+
28+
?>
29+
===DONE===
30+
--EXPECTF--
31+
*** Testing finfo_open() : error functionality ***
32+
bool(false)
33+
34+
Warning: finfo_open() expects parameter 1 to be long, array given in %s on line %d
35+
bool(false)
36+
37+
Warning: finfo_open() expects at most 2 parameters, 3 given in %s on line %d
38+
bool(false)
39+
resource(%d) of type (file_info)
40+
41+
Warning: finfo_open() expects parameter 1 to be long, %unicode_string_optional% given in %s on line %d
42+
bool(false)
43+
44+
Warning: finfo::finfo() expects parameter 1 to be long, %unicode_string_optional% given in %s on line %d
45+
NULL
46+
===DONE===

ext/fileinfo/tests/finfo_open_error.phpt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
11
--TEST--
22
Test finfo_open() function : error functionality
33
--SKIPIF--
4-
<?php require_once(dirname(__FILE__) . '/skipif.inc'); ?>
4+
<?php require_once(dirname(__FILE__) . '/skipif.inc');
5+
if(substr(PHP_OS, 0, 3) == 'WIN' )
6+
die("skip Not Valid for Windows");
7+
?>
58
--FILE--
69
<?php
710
/* Prototype : resource finfo_open([int options [, string arg]])

0 commit comments

Comments
 (0)