From: Jay Mav via ruby-core Date: 2023-12-24T21:07:12-08:00 Subject: [ruby-core:115886] Re: Windows Ruby 3.2.2: Non-English character added to Windows Registry String Value --===============4050669667722337116== Content-Type: multipart/alternative; boundary="000000000000a2d38f060d4e8a47" --000000000000a2d38f060d4e8a47 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hello, This issue is resolved, if a change is made in RUBYDIR\lib\ruby\3.2.0\win32\registry.rb to set termize=3D0 for type REG_SZ= , REG_EXPAND_SZ def write(name, type, data) termsize =3D 0 case type when REG_SZ, REG_EXPAND_SZ data =3D data.encode(WCHAR) # Adding WCHAR_SIZE to data size causes garbage concatenated to data in the Windows Registry: #termsize =3D 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=E2=80=AFPM Jay Mav 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 =3D "SOFTWARE\\ORACLE" > reg=3DWin32::Registry::HKEY_LOCAL_MACHINE.open(win_oracle_key, > Win32::Registry::KEY_ALL_ACCESS) > inst_loc_key =3D "inst_loc" > inv_dir=3D"C:\\Program Files\\Tester\\Inventory" > reg[inst_loc_key] =3D inv_dir > > .... > > Registry contains: C:\Program Files\Tester\Inventory=E6=B4=80 > (Not sure what that character represents.) > > Can the Ruby Dev Team please let me know how to resolve this issue so tha= t > this character does not get added to the string? > > Thanks in advance. > --000000000000a2d38f060d4e8a47 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hello,

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

=C2=A0 =C2=A0 def write(name, type, data)

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

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

Is this fix corr= ect?

Can the owner of registry.rb please respond?

Thanks.
=

= On Sat, Dec 23, 2023 at 5:31=E2=80=AFPM 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 =3D "SOFTWARE\\ORACLE"= ;
reg=3DWin32::Registry::HKEY_LOCAL_MACHINE.open(win_oracle_key, Win32::= Registry::KEY_ALL_ACCESS)
inst_loc_key =3D "inst_loc"
inv_d= ir=3D"C:\\Program Files\\Tester\\Inventory"
reg[inst_loc_key] = =3D inv_dir

....

Registry contains: C:\Program Files\Tester\I= nventory=E6=B4=80
(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.
--000000000000a2d38f060d4e8a47-- --===============4050669667722337116== Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline ______________________________________________ ruby-core mailing list -- ruby-core@ml.ruby-lang.org To unsubscribe send an email to ruby-core-leave@ml.ruby-lang.org ruby-core info -- https://ml.ruby-lang.org/mailman3/postorius/lists/ruby-core.ml.ruby-lang.org/ --===============4050669667722337116==--