summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristoph M. Becker <cmbecker69@gmx.de>2020-02-06 14:59:55 +0100
committerChristoph M. Becker <cmbecker69@gmx.de>2020-02-06 14:59:55 +0100
commit5e2ea00b1539d6003548f7698ece1f737c14fb51 (patch)
tree948492a1d6e10ba7b53fb96465342d7a82c8b386
parent13bfa9f5ac04a65300cf20211e2e3314e827595d (diff)
downloadphp-git-5e2ea00b1539d6003548f7698ece1f737c14fb51.tar.gz
Fix #66322: COMPersistHelper::SaveToFile can save to wrong location
Saving under the given `filename` may also work, but since `::LoadFromFile` uses the `fullpath` we follow suit.
-rw-r--r--NEWS4
-rw-r--r--ext/com_dotnet/com_persist.c2
-rw-r--r--ext/com_dotnet/tests/bug66322.phpt24
3 files changed, 29 insertions, 1 deletions
diff --git a/NEWS b/NEWS
index 08d33690a9..2c810370eb 100644
--- a/NEWS
+++ b/NEWS
@@ -2,6 +2,10 @@ PHP NEWS
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
?? ??? ????, PHP 7.3.16
+- COM:
+ . Fixed bug #66322 (COMPersistHelper::SaveToFile can save to wrong location).
+ (cmb)
+
- PCRE:
. Fixed bug #79188 (Memory corruption in preg_replace/preg_replace_callback
and unicode). (Nikita)
diff --git a/ext/com_dotnet/com_persist.c b/ext/com_dotnet/com_persist.c
index c782e6695c..0fee0efd43 100644
--- a/ext/com_dotnet/com_persist.c
+++ b/ext/com_dotnet/com_persist.c
@@ -398,7 +398,7 @@ CPH_METHOD(SaveToFile)
RETURN_FALSE;
}
- olefilename = php_com_string_to_olestring(filename, strlen(fullpath), helper->codepage);
+ olefilename = php_com_string_to_olestring(fullpath, strlen(fullpath), helper->codepage);
efree(fullpath);
}
res = IPersistFile_Save(helper->ipf, olefilename, remember);
diff --git a/ext/com_dotnet/tests/bug66322.phpt b/ext/com_dotnet/tests/bug66322.phpt
new file mode 100644
index 0000000000..de37e4fa75
--- /dev/null
+++ b/ext/com_dotnet/tests/bug66322.phpt
@@ -0,0 +1,24 @@
+--TEST--
+Bug #66322 (COMPersistHelper::SaveToFile can save to wrong location)
+--SKIPIF--
+<?php
+if (!extension_loaded('com_dotnet')) die('skip com_dotnet extension not available');
+try {
+ new COM('Word.Application');
+} catch (com_exception $ex) {
+ die('skip MS Word not available');
+}
+if (getenv("SKIP_SLOW_TESTS")) die('skip slow test');
+?>
+--FILE--
+<?php
+$w = new COM('Word.Application');
+$doc = $w->Documents->Add();
+$ph = new COMPersistHelper($doc);
+$filename = __DIR__ . '\\..\\' . basename(__DIR__) . '\\66322.docx';
+$ph->SaveToFile($filename);
+var_dump(file_exists($filename));
+$w->Quit();
+?>
+--EXPECT--
+bool(true)