From f938112c495b0d26572435c0be73ac0bfe642ecd Mon Sep 17 00:00:00 2001 From: Stanislav Malyshev Date: Sat, 4 Apr 2015 15:01:37 -0700 Subject: [PATCH] Fix bug #68819 (Fileinfo on specific file causes spurious OOM and/or segfault) --- ext/fileinfo/libmagic/softmagic.c | 3 +++ ext/fileinfo/tests/bug68819_001.phpt | 18 ++++++++++++++++++ ext/fileinfo/tests/bug68819_002.phpt | 26 ++++++++++++++++++++++++++ 3 files changed, 47 insertions(+) create mode 100644 ext/fileinfo/tests/bug68819_001.phpt create mode 100644 ext/fileinfo/tests/bug68819_002.phpt diff --git a/ext/fileinfo/libmagic/softmagic.c b/ext/fileinfo/libmagic/softmagic.c index e7b7855..54c1a03 100644 --- a/ext/fileinfo/libmagic/softmagic.c +++ b/ext/fileinfo/libmagic/softmagic.c @@ -1037,6 +1037,9 @@ mcopy(struct magic_set *ms, union VALUETYPE *p, int type, int indir, if (bytecnt > nbytes) { bytecnt = nbytes; } + if (offset > bytecnt) { + offset = bytecnt; + } if (s == NULL) { ms->search.s_len = 0; ms->search.s = NULL; diff --git a/ext/fileinfo/tests/bug68819_001.phpt b/ext/fileinfo/tests/bug68819_001.phpt new file mode 100644 index 0000000..ce39ee6 --- /dev/null +++ b/ext/fileinfo/tests/bug68819_001.phpt @@ -0,0 +1,18 @@ +--TEST-- +Bug #68819 Fileinfo on specific file causes spurious OOM and/or segfault, var 1 +--SKIPIF-- + +--FILE-- +buffer($string); + +var_dump($type); +?> +--EXPECT-- +string(60) "ASCII text, with very long lines, with CRLF line terminators" diff --git a/ext/fileinfo/tests/bug68819_002.phpt b/ext/fileinfo/tests/bug68819_002.phpt new file mode 100644 index 0000000..cec238d --- /dev/null +++ b/ext/fileinfo/tests/bug68819_002.phpt @@ -0,0 +1,26 @@ +--TEST-- +Bug #68819 Fileinfo on specific file causes spurious OOM and/or segfault, var 2 +--SKIPIF-- + +--FILE-- + 8192 +$string .= str_repeat(chr(rand(32, 127)), 8184); + +// Ending in this string +$string .= "say"; + +$finfo = new finfo(); +$type = $finfo->buffer($string); +var_dump($type); + +?> +--EXPECT-- +string(60) "ASCII text, with very long lines, with CRLF line terminators" -- 2.1.4