summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJustin Clift <justin@postgresql.org>2016-07-15 14:18:37 +0100
committerBrad King <brad.king@kitware.com>2016-07-21 10:05:46 -0400
commit11768733d321df55b0efcb70b278c71b8e216cf7 (patch)
treef56cb0e1e1055e7d462a3508d284055b173ffa03
parente31084e65745f9dd422c6aff0a2ed4ada6918805 (diff)
downloadcmake-11768733d321df55b0efcb70b278c71b8e216cf7.tar.gz
NSIS: Quote uninstaller path when executing it in a shell
Protect our `$0` reference in the shell as `"$0"`. Otherwise it works with a space in the path only due to an insecure Windows feature. Prior to this fix, any installer using the option added by commit v2.8.9~234^2 (Added CPACK_NSIS_ENABLE_UNINSTALL_BEFORE_INSTALL, 2011-06-11) exposes a local privilege escalation vulnerability. Reported-by: Amir Szekely <kichik@gmail.com> Reported-by: Ug_0 Security
-rw-r--r--Help/release/3.6.rst6
-rw-r--r--Modules/NSIS.template.in2
2 files changed, 7 insertions, 1 deletions
diff --git a/Help/release/3.6.rst b/Help/release/3.6.rst
index 771c9dd4cb..144537de0e 100644
--- a/Help/release/3.6.rst
+++ b/Help/release/3.6.rst
@@ -308,3 +308,9 @@ Other Changes
preferred future use is upper cased component names in variables.
New variables that will be added to CPackRPM in later versions
will only support upper cased component variable format.
+
+* The CPack NSIS generator's configuration file template was fixed to
+ quote the path to the uninstaller tool used by the
+ :variable:`CPACK_NSIS_ENABLE_UNINSTALL_BEFORE_INSTALL` option.
+ This avoids depending on an insecure Windows feature to run an
+ uninstaller tool with a space in the path.
diff --git a/Modules/NSIS.template.in b/Modules/NSIS.template.in
index 1ef3d28c76..92a31422fb 100644
--- a/Modules/NSIS.template.in
+++ b/Modules/NSIS.template.in
@@ -920,7 +920,7 @@ uninst:
ClearErrors
StrLen $2 "\Uninstall.exe"
StrCpy $3 $0 -$2 # remove "\Uninstall.exe" from UninstallString to get path
- ExecWait '$0 _?=$3' ;Do not copy the uninstaller to a temp file
+ ExecWait '"$0" _?=$3' ;Do not copy the uninstaller to a temp file
IfErrors uninst_failed inst
uninst_failed: