summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjan.nijtmans <nijtmans@users.sourceforge.net>2012-06-21 11:02:52 (GMT)
committerjan.nijtmans <nijtmans@users.sourceforge.net>2012-06-21 11:02:52 (GMT)
commit47f8473fed8224fbbb75d6cb95406cd13af68070 (patch)
tree15a7a0f70ec0c45c272f6df1fa8c04e12d6205ff
parentcf052af7a9a777686a38795916133d12e938984e (diff)
parentb6f50b1321a5cd34af747eb670aad924fc66d7b7 (diff)
downloadtcl-47f8473fed8224fbbb75d6cb95406cd13af68070.zip
tcl-47f8473fed8224fbbb75d6cb95406cd13af68070.tar.gz
tcl-47f8473fed8224fbbb75d6cb95406cd13af68070.tar.bz2
[Bug 3362446]: possible allocation error when using UNICODE
-rw-r--r--tests/registry.test6
-rw-r--r--win/tclWinReg.c6
2 files changed, 6 insertions, 6 deletions
diff --git a/tests/registry.test b/tests/registry.test
index bd91911..f90f602 100644
--- a/tests/registry.test
+++ b/tests/registry.test
@@ -461,11 +461,11 @@ test registry-6.20 {GetValue: values with Unicode strings with embedded nulls} {
set result
} "foo ba r baz"
test registry-6.21 {GetValue: very long value names and values} {pcOnly} {
- registry set HKEY_CURRENT_USER\\TclFoobar [string repeat k 16383] [string repeat x 16383] multi_sz
- set result [registry get HKEY_CURRENT_USER\\TclFoobar [string repeat k 16383]]
+ registry set HKEY_CURRENT_USER\\TclFoobar [string repeat k 199] [string repeat x 199] multi_sz
+ set result [registry get HKEY_CURRENT_USER\\TclFoobar [string repeat k 199]]
registry delete HKEY_CURRENT_USER\\TclFoobar
set result
-} [string repeat x 16383]
+} [string repeat x 199]
test registry-7.1 {GetValueNames: bad key} {win reg english} {
registry delete HKEY_CURRENT_USER\\TclFoobar
diff --git a/win/tclWinReg.c b/win/tclWinReg.c
index 4c74d1b..343a22f 100644
--- a/win/tclWinReg.c
+++ b/win/tclWinReg.c
@@ -779,8 +779,8 @@ GetValue(
*/
Tcl_DStringInit(&data);
- length = TCL_DSTRING_STATIC_SIZE - 1;
- Tcl_DStringSetLength(&data, (int) length);
+ Tcl_DStringSetLength(&data, TCL_DSTRING_STATIC_SIZE - 1);
+ length = TCL_DSTRING_STATIC_SIZE / (regWinProcs->useWide ? 2 : 1) - 1;
valueName = Tcl_GetStringFromObj(valueNameObj, &nameLen);
nativeValue = Tcl_WinUtfToTChar(valueName, nameLen, &buf);
@@ -795,7 +795,7 @@ GetValue(
*/
length *= 2;
- Tcl_DStringSetLength(&data, (int) length);
+ Tcl_DStringSetLength(&data, (int) length * (regWinProcs->useWide ? 2 : 1));
result = (*regWinProcs->regQueryValueExProc)(key, (char *) nativeValue,
NULL, &type, (BYTE *) Tcl_DStringValue(&data), &length);
}