diff options
author | David Weisgerber <weisgerber@ms-gmbh.de> | 2016-02-29 15:48:47 +0100 |
---|---|---|
committer | David Weisgerber <weisgerber@ms-gmbh.de> | 2016-03-02 14:33:44 +0000 |
commit | acba844c6ba0d72c6f37d8cbee8b343c23b05de1 (patch) | |
tree | 725e718f2d587707e7481500dd6f79b0f6524ef6 /src/corelib/io | |
parent | 82b8158022064851ef9151d441241aa4019605c2 (diff) |
Fixed reading REG_SZ without terminating \0 delivers garbage
When reading from the registry, sometimes the string is not null
terminated. In order to fix this, the preallocated QByteArray size
is increased, so that there are guaranteed enough terminating \0
[Windows] Not null terminated strings are now read properly from the
registry
Change-Id: I95fdf42cbbb7074fcf010dd14d0241f02d3c412b
Task-number: QTBUG-51382
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@theqtcompany.com>
Diffstat (limited to 'src/corelib/io')
-rw-r--r-- | src/corelib/io/qsettings_win.cpp | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/src/corelib/io/qsettings_win.cpp b/src/corelib/io/qsettings_win.cpp index 1546219c3b..da0c4c3c14 100644 --- a/src/corelib/io/qsettings_win.cpp +++ b/src/corelib/io/qsettings_win.cpp @@ -484,6 +484,12 @@ bool QWinSettingsPrivate::readKey(HKEY parentHandle, const QString &rSubKey, QVa return false; } + // workaround for rare cases where trailing '\0' are missing in registry + if (dataType == REG_SZ || dataType == REG_EXPAND_SZ) + dataSize += 2; + else if (dataType == REG_MULTI_SZ) + dataSize += 4; + // get the value QByteArray data(dataSize, 0); res = RegQueryValueEx(handle, reinterpret_cast<const wchar_t *>(rSubkeyName.utf16()), 0, 0, |