diff options
author | Christopher Copits <ChrisCDev@live.com> | 2013-01-01 16:29:32 -0500 |
---|---|---|
committer | Michael Stahl <mstahl@redhat.com> | 2013-01-07 13:58:24 +0000 |
commit | dbfc8777bf73872d1b96f956b9e778d9099d52b3 (patch) | |
tree | 6f18a9cb6cd6df7dbb39bdb258f6060963a03a61 | |
parent | b380744c205089aa0b480e059bec645631010444 (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>
-rw-r--r-- | basic/source/runtime/methods.cxx | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/basic/source/runtime/methods.cxx b/basic/source/runtime/methods.cxx index 45e59a6b4b81..3a6eb970bbaf 100644 --- a/basic/source/runtime/methods.cxx +++ b/basic/source/runtime/methods.cxx @@ -3534,7 +3534,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++) { |