summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristoph M. Becker <cmbecker69@gmx.de>2020-04-24 14:51:44 +0200
committerChristoph M. Becker <cmbecker69@gmx.de>2020-04-24 18:14:53 +0200
commit3151676f520555bfadb39ea76779e93552d13fc1 (patch)
treedb50b7dd47917fe50a5aa46e307943407de2dfb5
parent36764185688675b52fc96c14359f466538cda129 (diff)
downloadphp-git-3151676f520555bfadb39ea76779e93552d13fc1.tar.gz
Fix #79514: Memory leaks while including unexistent file
We have to destroy (un-opened) ZEND_HANDLE_FILENAMEs.
-rw-r--r--NEWS2
-rw-r--r--Zend/tests/bug79514.phpt13
-rw-r--r--Zend/zend_stream.c2
3 files changed, 17 insertions, 0 deletions
diff --git a/NEWS b/NEWS
index 88185d170f..bc5fc665e2 100644
--- a/NEWS
+++ b/NEWS
@@ -6,6 +6,8 @@ PHP NEWS
- Core:
. Fixed bug #78434 (Generator yields no items after valid() call). (Nikita)
. Fixed bug #79477 (casting object into array creates references). (Nikita)
+ . Fixed bug #79514 (Memory leaks while including unexistent file). (cmb,
+ Nikita)
- DOM:
. Fixed bug #78221 (DOMNode::normalize() doesn't remove empty text nodes).
diff --git a/Zend/tests/bug79514.phpt b/Zend/tests/bug79514.phpt
new file mode 100644
index 0000000000..5182489964
--- /dev/null
+++ b/Zend/tests/bug79514.phpt
@@ -0,0 +1,13 @@
+--TEST--
+Bug #79514 (Memory leaks while including unexistent file)
+--FILE--
+<?php
+$mem1 = memory_get_usage(true);
+for ($i = 0; $i < 100000; $i++) {
+ @include __DIR__ . '/bug79514.doesnotexist';
+}
+$mem2 = memory_get_usage(true);
+var_dump($mem2 - $mem1 < 100000);
+?>
+--EXPECT--
+bool(true)
diff --git a/Zend/zend_stream.c b/Zend/zend_stream.c
index 3890248a26..38b145736b 100644
--- a/Zend/zend_stream.c
+++ b/Zend/zend_stream.c
@@ -238,6 +238,8 @@ ZEND_API int zend_compare_file_handles(zend_file_handle *fh1, zend_file_handle *
return 0;
}
switch (fh1->type) {
+ case ZEND_HANDLE_FILENAME:
+ return strcmp(fh1->filename, fh2->filename) == 0;
case ZEND_HANDLE_FP:
return fh1->handle.fp == fh2->handle.fp;
case ZEND_HANDLE_STREAM: