Hello,

This issue is resolved, if a change is made in RUBYDIR\lib\ruby\3.2.0\win32\registry.rb to set termize=0 for type REG_SZ, REG_EXPAND_SZ

    def write(name, type, data)

      termsize = 0
      case type
      when REG_SZ, REG_EXPAND_SZ
        data = data.encode(WCHAR)
        # Adding WCHAR_SIZE to data size causes garbage concatenated to data in the Windows Registry:
        #termsize = WCHAR_SIZE
...
      API.SetValue(@hkey, name, type, data, data.bytesize + termsize)

The string data in the Windows Registry does not have junk added after making this code change.

Is this fix correct?

Can the owner of registry.rb please respond?

Thanks.

On Sat, Dec 23, 2023 at 5:31 PM Jay Mav <mjay80147@gmail.com> wrote:
Hello,
Compiled Ruby 3.2.2 on Windows with MSVC 2019 - Microsoft (R) C/C++ Optimizing Compiler Version 19.29.30147 for x64.

Code:
require 'win32/registry'
win_oracle_key = "SOFTWARE\\ORACLE"
reg=Win32::Registry::HKEY_LOCAL_MACHINE.open(win_oracle_key, Win32::Registry::KEY_ALL_ACCESS)
inst_loc_key = "inst_loc"
inv_dir="C:\\Program Files\\Tester\\Inventory"
reg[inst_loc_key] = inv_dir

....

Registry contains: C:\Program Files\Tester\Inventory洀
(Not sure what that character represents.)

Can the Ruby Dev Team please let me know how to resolve this issue so that this character does not get added to the string?

Thanks in advance.