changeset 30631:51770116f835 stable

winqueryreg: Don't include terminating zero in string. * libinterp/corefcn/sysdep.cc (get_regkey_value): Don't include terminating zero in string. See: https://octave.discourse.group/t/2104
author Markus Mützel <markus.muetzel@gmx.de>
date Tue, 11 Jan 2022 20:43:35 +0100
parents 2a234181057b
children f1cec1134dd1 754ad6e9c0a5
files libinterp/corefcn/sysdep.cc
diffstat 1 files changed, 3 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/libinterp/corefcn/sysdep.cc	Tue Jan 11 19:24:47 2022 +0100
+++ b/libinterp/corefcn/sysdep.cc	Tue Jan 11 20:43:35 2022 +0100
@@ -951,9 +951,10 @@
     else if (type == REG_SZ || type == REG_EXPAND_SZ)
       {
         // strings in registry might not be zero terminated
+        wchar_t *dataw = reinterpret_cast<wchar_t *> (data);
+        DWORD lengthw = length / sizeof (wchar_t);
         std::wstring reg_string
-          = std::wstring (reinterpret_cast<wchar_t *> (data),
-                          length / sizeof (wchar_t));
+          = std::wstring (dataw, lengthw - (dataw[lengthw-1]==0));
         value = string_vector (sys::u8_from_wstring (reg_string));
       }