43 lines
1.4 KiB
Diff
43 lines
1.4 KiB
Diff
Backported from 5.6.30 by Remi.
|
|
Binary parts dropped
|
|
|
|
|
|
From ca46d0acbce55019b970fcd4c1e8a10edfdded93 Mon Sep 17 00:00:00 2001
|
|
From: Stanislav Malyshev <stas@php.net>
|
|
Date: Fri, 30 Dec 2016 15:34:46 -0800
|
|
Subject: [PATCH] Fix int overflows in phar (bug #73764)
|
|
|
|
---
|
|
ext/phar/phar.c | 4 ++--
|
|
ext/phar/tests/bug73764.phar | Bin 0 -> 138 bytes
|
|
ext/phar/tests/bug73764.phpt | 16 ++++++++++++++++
|
|
3 files changed, 18 insertions(+), 2 deletions(-)
|
|
create mode 100644 ext/phar/tests/bug73764.phar
|
|
create mode 100644 ext/phar/tests/bug73764.phpt
|
|
|
|
diff --git a/ext/phar/phar.c b/ext/phar/phar.c
|
|
index 14b80e1..532b4c3 100644
|
|
--- a/ext/phar/phar.c
|
|
+++ b/ext/phar/phar.c
|
|
@@ -1056,7 +1056,7 @@ static int phar_parse_pharfile(php_stream *fp, char *fname, int fname_len, char
|
|
entry.is_persistent = mydata->is_persistent;
|
|
|
|
for (manifest_index = 0; manifest_index < manifest_count; ++manifest_index) {
|
|
- if (buffer + 4 > endbuffer) {
|
|
+ if (buffer + 24 > endbuffer) {
|
|
MAPPHAR_FAIL("internal corruption of phar \"%s\" (truncated manifest entry)")
|
|
}
|
|
|
|
@@ -1070,7 +1070,7 @@ static int phar_parse_pharfile(php_stream *fp, char *fname, int fname_len, char
|
|
entry.manifest_pos = manifest_index;
|
|
}
|
|
|
|
- if (entry.filename_len + 20 > endbuffer - buffer) {
|
|
+ if (entry.filename_len > endbuffer - buffer - 20) {
|
|
MAPPHAR_FAIL("internal corruption of phar \"%s\" (truncated manifest entry)");
|
|
}
|
|
|
|
--
|
|
2.1.4
|
|
|