aboutsummaryrefslogtreecommitdiff
path: root/tools/plink/winstore.c
diff options
context:
space:
mode:
authormarha <marha@users.sourceforge.net>2014-10-01 20:12:35 +0200
committermarha <marha@users.sourceforge.net>2014-10-01 20:12:35 +0200
commit19b4b68b35a047a83bd291ee8debac1adb0e946c (patch)
treed4d4520622ecf73fa0d076dc0bf517a1189b7d9f /tools/plink/winstore.c
parent4e080e0165d18887e2a0fccd7f30cf20fd04b178 (diff)
parent438af0c7d4bf60b408b259c88205ff2193195466 (diff)
downloadvcxsrv-19b4b68b35a047a83bd291ee8debac1adb0e946c.tar.gz
vcxsrv-19b4b68b35a047a83bd291ee8debac1adb0e946c.tar.bz2
vcxsrv-19b4b68b35a047a83bd291ee8debac1adb0e946c.zip
Merge remote-tracking branch 'origin/released'
Conflicts: mesalib/src/mesa/main/macros.h xorg-server/dix/registry.c xorg-server/hw/kdrive/ephyr/ephyrinit.c xorg-server/hw/xwin/Makefile.am xorg-server/hw/xwin/glx/.gitignore xorg-server/hw/xwin/glx/gen_gl_wrappers.py xorg-server/hw/xwin/glx/indirect.c xorg-server/hw/xwin/glx/winpriv.c xorg-server/hw/xwin/winclipboardthread.c xorg-server/hw/xwin/windisplay.c xorg-server/hw/xwin/winmultiwindowwm.c xorg-server/hw/xwin/winprefs.c
Diffstat (limited to 'tools/plink/winstore.c')
-rw-r--r--tools/plink/winstore.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/tools/plink/winstore.c b/tools/plink/winstore.c
index ce5dae61d..b1058832e 100644
--- a/tools/plink/winstore.c
+++ b/tools/plink/winstore.c
@@ -6,6 +6,7 @@
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
+#include <assert.h>
#include "putty.h"
#include "storage.h"
@@ -152,7 +153,7 @@ void *open_settings_r(const char *sessionname)
char *read_setting_s(void *handle, const char *key)
{
- DWORD type, size;
+ DWORD type, allocsize, size;
char *ret;
if (!handle)
@@ -164,13 +165,17 @@ char *read_setting_s(void *handle, const char *key)
type != REG_SZ)
return NULL;
- ret = snewn(size+1, char);
+ allocsize = size+1; /* allow for an extra NUL if needed */
+ ret = snewn(allocsize, char);
if (RegQueryValueEx((HKEY) handle, key, 0,
&type, ret, &size) != ERROR_SUCCESS ||
type != REG_SZ) {
sfree(ret);
return NULL;
}
+ assert(size < allocsize);
+ ret[size] = '\0'; /* add an extra NUL in case RegQueryValueEx
+ * didn't supply one */
return ret;
}