summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristopher Copits <ChrisCDev@live.com>2013-01-01 16:29:32 -0500
committerMichael Stahl <mstahl@redhat.com>2013-01-07 16:57:57 +0100
commitccd30d3bb395fd367d8b687fc2b3b13641c8d846 (patch)
tree6dcd5c93f675a1a80c22578380958fce528f1f9e
parent80984766863c12009415e28b7d7e8a9fe9255546 (diff)
fdo#53521 Crash when running BASIC's "shell()" with a non-existent program
The problem is that the process handle is freed regardless of whether osl_executeProcess was successful or not. Therefore, a segmentation fault would result, as a random memory address would be freed. This patch checks whether osl_executeProcess was successful. If it was, then it frees the handle; if it wasn't successful, the memory is not freed. Change-Id: Ic3af07be06e7af7730a3bcb1680c659a88b66af3 Reviewed-on: https://gerrit.libreoffice.org/1530 Reviewed-by: Michael Stahl <mstahl@redhat.com> Tested-by: Michael Stahl <mstahl@redhat.com> (cherry picked from commit dbfc8777bf73872d1b96f956b9e778d9099d52b3) (cherry picked from commit 96b985145b3efbaf4552adbeccf24bfac2fa71b0) Signed-off-by: Michael Stahl <mstahl@redhat.com>
-rw-r--r--basic/source/runtime/methods.cxx6
1 files changed, 5 insertions, 1 deletions
diff --git a/basic/source/runtime/methods.cxx b/basic/source/runtime/methods.cxx
index d54c5063fe8f..fbf688363892 100644
--- a/basic/source/runtime/methods.cxx
+++ b/basic/source/runtime/methods.cxx
@@ -3294,7 +3294,11 @@ RTLFUNC(Shell)
NULL, 0,
&pApp ) == osl_Process_E_None;
- osl_freeProcessHandle( pApp );
+ // 53521 only free process handle on success
+ if (bSucc)
+ {
+ osl_freeProcessHandle( pApp );
+ }
for(int j = 0; i < nParamCount; i++)
{