ruby-core@ruby-lang.org archive (unofficial mirror)
 help / color / mirror / Atom feed
* [ruby-core:115925] [Ruby master Bug#20096] Ruby 3.2.2 win32/registry: Junk appended to Windows Registry String Value
@ 2023-12-27  6:01 jay4rubydev (Jay M) via ruby-core
  2023-12-28  5:42 ` [ruby-core:115946] " kjtsanaktsidis (KJ Tsanaktsidis) via ruby-core
                   ` (6 more replies)
  0 siblings, 7 replies; 8+ messages in thread
From: jay4rubydev (Jay M) via ruby-core @ 2023-12-27  6:01 UTC (permalink / raw)
  To: ruby-core; +Cc: jay4rubydev (Jay M)

Issue #20096 has been reported by jay4rubydev (Jay M).

----------------------------------------
Bug #20096: Ruby 3.2.2 win32/registry: Junk appended to Windows Registry String Value
https://bugs.ruby-lang.org/issues/20096

* Author: jay4rubydev (Jay M)
* Status: Open
* Priority: Normal
* ruby -v: ruby 3.2.2 (2023-03-30 revision e51014f9c0) [x64-mswin64_140]
* Backport: 3.0: UNKNOWN, 3.1: UNKNOWN, 3.2: UNKNOWN, 3.3: UNKNOWN
----------------------------------------
Ruby Version:
ruby 3.2.2 (2023-03-30 revision e51014f9c0) [x64-mswin64_140]
Compiler: MSVC 2019 - Microsoft (R) C/C++ Optimizing Compiler Version 19.29.30147 for x64.

Issue: win32/registry adds junk to Windows Registry String Value

Code:
require 'win32/registry'
win_oracle_key = "SOFTWARE\\MicroSoft"
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\\ModuleInfo"
reg[inst_loc_key] = inv_dir

Result:
Registry contains:
C:\Program Files\Tester\ModuleInfo爀

Observation: Looks like memory overread

Expected Result - without the junk:
C:\Program Files\Tester\ModuleInfo

After changing the code in registry.rb:
From:
    def write(name, type, data)

      termsize = 0
      case type
      when REG_SZ, REG_EXPAND_SZ
        data = data.encode(WCHAR)
        termsize = WCHAR_SIZE

To:

    def write(name, type, data)

      termsize = 0
      case type
      when REG_SZ, REG_EXPAND_SZ
        enc_data = data.encode(WCHAR)
		# Add NULL WCHAR for string data and don't set the termsize because 
		# enc_data.bytesize will now include the size of the NULL character.
		enc_data += WCHAR_NUL
        # termsize = WCHAR_SIZE
      ...



-- 
https://bugs.ruby-lang.org/
 ______________________________________________
 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/

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [ruby-core:115946] [Ruby master Bug#20096] Ruby 3.2.2 win32/registry: Junk appended to Windows Registry String Value
  2023-12-27  6:01 [ruby-core:115925] [Ruby master Bug#20096] Ruby 3.2.2 win32/registry: Junk appended to Windows Registry String Value jay4rubydev (Jay M) via ruby-core
@ 2023-12-28  5:42 ` kjtsanaktsidis (KJ Tsanaktsidis) via ruby-core
  2023-12-28  5:57 ` [ruby-core:115948] " jay4rubydev (Jay M) via ruby-core
                   ` (5 subsequent siblings)
  6 siblings, 0 replies; 8+ messages in thread
From: kjtsanaktsidis (KJ Tsanaktsidis) via ruby-core @ 2023-12-28  5:42 UTC (permalink / raw)
  To: ruby-core; +Cc: kjtsanaktsidis (KJ Tsanaktsidis)

Issue #20096 has been updated by kjtsanaktsidis (KJ Tsanaktsidis).


Thank you for your report. Your diagnosis looks right, this probably is a memory overread. Your patch looks reasonable - are you able to open this as a Github pull request?

Also, are you familiar with `REG_MULTI_SZ`? To my quick glance, that looks like it should also not need the `termsize` value (it's already appending `WCHAR_NUL` like your patch is). Do you think that should be removed too?

----------------------------------------
Bug #20096: Ruby 3.2.2 win32/registry: Junk appended to Windows Registry String Value
https://bugs.ruby-lang.org/issues/20096#change-105901

* Author: jay4rubydev (Jay M)
* Status: Open
* Priority: Normal
* ruby -v: ruby 3.2.2 (2023-03-30 revision e51014f9c0) [x64-mswin64_140]
* Backport: 3.0: UNKNOWN, 3.1: UNKNOWN, 3.2: UNKNOWN, 3.3: UNKNOWN
----------------------------------------
Ruby Version:
ruby 3.2.2 (2023-03-30 revision e51014f9c0) [x64-mswin64_140]
Compiler: MSVC 2019 - Microsoft (R) C/C++ Optimizing Compiler Version 19.29.30147 for x64.

Issue: win32/registry adds junk to Windows Registry String Value

Code:
require 'win32/registry'
win_oracle_key = "SOFTWARE\\MicroSoft"
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\\ModuleInfo"
reg[inst_loc_key] = inv_dir

Result:
Registry contains:
C:\Program Files\Tester\ModuleInfo爀

Observation: Looks like memory overread

Expected Result - without the junk:
C:\Program Files\Tester\ModuleInfo

After changing the code in registry.rb:
From:
    def write(name, type, data)

      termsize = 0
      case type
      when REG_SZ, REG_EXPAND_SZ
        data = data.encode(WCHAR)
        termsize = WCHAR_SIZE

To:

    def write(name, type, data)

      termsize = 0
      case type
      when REG_SZ, REG_EXPAND_SZ
        enc_data = data.encode(WCHAR)
		# Add NULL WCHAR for string data and don't set the termsize because 
		# enc_data.bytesize will now include the size of the NULL character.
		enc_data += WCHAR_NUL
        # termsize = WCHAR_SIZE
      ...



-- 
https://bugs.ruby-lang.org/
 ______________________________________________
 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/

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [ruby-core:115948] [Ruby master Bug#20096] Ruby 3.2.2 win32/registry: Junk appended to Windows Registry String Value
  2023-12-27  6:01 [ruby-core:115925] [Ruby master Bug#20096] Ruby 3.2.2 win32/registry: Junk appended to Windows Registry String Value jay4rubydev (Jay M) via ruby-core
  2023-12-28  5:42 ` [ruby-core:115946] " kjtsanaktsidis (KJ Tsanaktsidis) via ruby-core
@ 2023-12-28  5:57 ` jay4rubydev (Jay M) via ruby-core
  2023-12-28  6:10 ` [ruby-core:115950] " kjtsanaktsidis (KJ Tsanaktsidis) via ruby-core
                   ` (4 subsequent siblings)
  6 siblings, 0 replies; 8+ messages in thread
From: jay4rubydev (Jay M) via ruby-core @ 2023-12-28  5:57 UTC (permalink / raw)
  To: ruby-core; +Cc: jay4rubydev (Jay M)

Issue #20096 has been updated by jay4rubydev (Jay M).


I agree about REG_MULTI_SZ  - from checking the documentation of https://learn.microsoft.com/en-us/windows/win32/api/winreg/nf-winreg-regsetvalueexw:
With the REG_MULTI_SZ data type, the string must be terminated with two null characters.

This is being done in registry.rb, so no need to add the termsize.

Sorry, I am not set up for git pull requests in my dev env.

----------------------------------------
Bug #20096: Ruby 3.2.2 win32/registry: Junk appended to Windows Registry String Value
https://bugs.ruby-lang.org/issues/20096#change-105902

* Author: jay4rubydev (Jay M)
* Status: Open
* Priority: Normal
* ruby -v: ruby 3.2.2 (2023-03-30 revision e51014f9c0) [x64-mswin64_140]
* Backport: 3.0: UNKNOWN, 3.1: UNKNOWN, 3.2: UNKNOWN, 3.3: UNKNOWN
----------------------------------------
Ruby Version:
ruby 3.2.2 (2023-03-30 revision e51014f9c0) [x64-mswin64_140]
Compiler: MSVC 2019 - Microsoft (R) C/C++ Optimizing Compiler Version 19.29.30147 for x64.

Issue: win32/registry adds junk to Windows Registry String Value

Code:
require 'win32/registry'
win_oracle_key = "SOFTWARE\\MicroSoft"
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\\ModuleInfo"
reg[inst_loc_key] = inv_dir

Result:
Registry contains:
C:\Program Files\Tester\ModuleInfo爀

Observation: Looks like memory overread

Expected Result - without the junk:
C:\Program Files\Tester\ModuleInfo

After changing the code in registry.rb:
From:
    def write(name, type, data)

      termsize = 0
      case type
      when REG_SZ, REG_EXPAND_SZ
        data = data.encode(WCHAR)
        termsize = WCHAR_SIZE

To:

    def write(name, type, data)

      termsize = 0
      case type
      when REG_SZ, REG_EXPAND_SZ
        enc_data = data.encode(WCHAR)
		# Add NULL WCHAR for string data and don't set the termsize because 
		# enc_data.bytesize will now include the size of the NULL character.
		enc_data += WCHAR_NUL
        # termsize = WCHAR_SIZE
      ...



-- 
https://bugs.ruby-lang.org/
 ______________________________________________
 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/

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [ruby-core:115950] [Ruby master Bug#20096] Ruby 3.2.2 win32/registry: Junk appended to Windows Registry String Value
  2023-12-27  6:01 [ruby-core:115925] [Ruby master Bug#20096] Ruby 3.2.2 win32/registry: Junk appended to Windows Registry String Value jay4rubydev (Jay M) via ruby-core
  2023-12-28  5:42 ` [ruby-core:115946] " kjtsanaktsidis (KJ Tsanaktsidis) via ruby-core
  2023-12-28  5:57 ` [ruby-core:115948] " jay4rubydev (Jay M) via ruby-core
@ 2023-12-28  6:10 ` kjtsanaktsidis (KJ Tsanaktsidis) via ruby-core
  2023-12-28  7:05 ` [ruby-core:115951] " kjtsanaktsidis (KJ Tsanaktsidis) via ruby-core
                   ` (3 subsequent siblings)
  6 siblings, 0 replies; 8+ messages in thread
From: kjtsanaktsidis (KJ Tsanaktsidis) via ruby-core @ 2023-12-28  6:10 UTC (permalink / raw)
  To: ruby-core; +Cc: kjtsanaktsidis (KJ Tsanaktsidis)

Issue #20096 has been updated by kjtsanaktsidis (KJ Tsanaktsidis).


> I agree about REG_MULTI_SZ  - from checking the documentation of https://learn.microsoft.com/en-us/windows/win32/api/winreg/nf-winreg-regsetvalueexw:
> With the REG_MULTI_SZ data type, the string must be terminated with two null characters.
>
> This is being done in registry.rb, so no need to add the termsize.

OK, great, thank you.

> Sorry, I am not set up for git pull requests in my dev env.

No worries, I opened https://github.com/ruby/ruby/pull/9381 for this.

----------------------------------------
Bug #20096: Ruby 3.2.2 win32/registry: Junk appended to Windows Registry String Value
https://bugs.ruby-lang.org/issues/20096#change-105904

* Author: jay4rubydev (Jay M)
* Status: Open
* Priority: Normal
* ruby -v: ruby 3.2.2 (2023-03-30 revision e51014f9c0) [x64-mswin64_140]
* Backport: 3.0: UNKNOWN, 3.1: UNKNOWN, 3.2: UNKNOWN, 3.3: UNKNOWN
----------------------------------------
Ruby Version:
ruby 3.2.2 (2023-03-30 revision e51014f9c0) [x64-mswin64_140]
Compiler: MSVC 2019 - Microsoft (R) C/C++ Optimizing Compiler Version 19.29.30147 for x64.

Issue: win32/registry adds junk to Windows Registry String Value

Code:
require 'win32/registry'
win_oracle_key = "SOFTWARE\\MicroSoft"
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\\ModuleInfo"
reg[inst_loc_key] = inv_dir

Result:
Registry contains:
C:\Program Files\Tester\ModuleInfo爀

Observation: Looks like memory overread

Expected Result - without the junk:
C:\Program Files\Tester\ModuleInfo

After changing the code in registry.rb:
From:
    def write(name, type, data)

      termsize = 0
      case type
      when REG_SZ, REG_EXPAND_SZ
        data = data.encode(WCHAR)
        termsize = WCHAR_SIZE

To:

    def write(name, type, data)

      termsize = 0
      case type
      when REG_SZ, REG_EXPAND_SZ
        enc_data = data.encode(WCHAR)
		# Add NULL WCHAR for string data and don't set the termsize because 
		# enc_data.bytesize will now include the size of the NULL character.
		enc_data += WCHAR_NUL
        # termsize = WCHAR_SIZE
      ...



-- 
https://bugs.ruby-lang.org/
 ______________________________________________
 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/

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [ruby-core:115951] [Ruby master Bug#20096] Ruby 3.2.2 win32/registry: Junk appended to Windows Registry String Value
  2023-12-27  6:01 [ruby-core:115925] [Ruby master Bug#20096] Ruby 3.2.2 win32/registry: Junk appended to Windows Registry String Value jay4rubydev (Jay M) via ruby-core
                   ` (2 preceding siblings ...)
  2023-12-28  6:10 ` [ruby-core:115950] " kjtsanaktsidis (KJ Tsanaktsidis) via ruby-core
@ 2023-12-28  7:05 ` kjtsanaktsidis (KJ Tsanaktsidis) via ruby-core
  2024-01-10 10:40 ` [ruby-core:116147] " kjtsanaktsidis (KJ Tsanaktsidis) via ruby-core
                   ` (2 subsequent siblings)
  6 siblings, 0 replies; 8+ messages in thread
From: kjtsanaktsidis (KJ Tsanaktsidis) via ruby-core @ 2023-12-28  7:05 UTC (permalink / raw)
  To: ruby-core; +Cc: kjtsanaktsidis (KJ Tsanaktsidis)

Issue #20096 has been updated by kjtsanaktsidis (KJ Tsanaktsidis).


Fixed by merging https://github.com/ruby/ruby/pull/9381. I'll mark this to be backported to 3.2 as well.

----------------------------------------
Bug #20096: Ruby 3.2.2 win32/registry: Junk appended to Windows Registry String Value
https://bugs.ruby-lang.org/issues/20096#change-105905

* Author: jay4rubydev (Jay M)
* Status: Open
* Priority: Normal
* ruby -v: ruby 3.2.2 (2023-03-30 revision e51014f9c0) [x64-mswin64_140]
* Backport: 3.0: UNKNOWN, 3.1: UNKNOWN, 3.2: UNKNOWN, 3.3: UNKNOWN
----------------------------------------
Ruby Version:
ruby 3.2.2 (2023-03-30 revision e51014f9c0) [x64-mswin64_140]
Compiler: MSVC 2019 - Microsoft (R) C/C++ Optimizing Compiler Version 19.29.30147 for x64.

Issue: win32/registry adds junk to Windows Registry String Value

Code:
require 'win32/registry'
win_oracle_key = "SOFTWARE\\MicroSoft"
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\\ModuleInfo"
reg[inst_loc_key] = inv_dir

Result:
Registry contains:
C:\Program Files\Tester\ModuleInfo爀

Observation: Looks like memory overread

Expected Result - without the junk:
C:\Program Files\Tester\ModuleInfo

After changing the code in registry.rb:
From:
    def write(name, type, data)

      termsize = 0
      case type
      when REG_SZ, REG_EXPAND_SZ
        data = data.encode(WCHAR)
        termsize = WCHAR_SIZE

To:

    def write(name, type, data)

      termsize = 0
      case type
      when REG_SZ, REG_EXPAND_SZ
        enc_data = data.encode(WCHAR)
		# Add NULL WCHAR for string data and don't set the termsize because 
		# enc_data.bytesize will now include the size of the NULL character.
		enc_data += WCHAR_NUL
        # termsize = WCHAR_SIZE
      ...



-- 
https://bugs.ruby-lang.org/
 ______________________________________________
 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/

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [ruby-core:116147] [Ruby master Bug#20096] Ruby 3.2.2 win32/registry: Junk appended to Windows Registry String Value
  2023-12-27  6:01 [ruby-core:115925] [Ruby master Bug#20096] Ruby 3.2.2 win32/registry: Junk appended to Windows Registry String Value jay4rubydev (Jay M) via ruby-core
                   ` (3 preceding siblings ...)
  2023-12-28  7:05 ` [ruby-core:115951] " kjtsanaktsidis (KJ Tsanaktsidis) via ruby-core
@ 2024-01-10 10:40 ` kjtsanaktsidis (KJ Tsanaktsidis) via ruby-core
  2024-01-18  3:20 ` [ruby-core:116286] " nagachika (Tomoyuki Chikanaga) via ruby-core
  2024-03-07 11:12 ` [ruby-core:117074] " naruse (Yui NARUSE) via ruby-core
  6 siblings, 0 replies; 8+ messages in thread
From: kjtsanaktsidis (KJ Tsanaktsidis) via ruby-core @ 2024-01-10 10:40 UTC (permalink / raw)
  To: ruby-core; +Cc: kjtsanaktsidis (KJ Tsanaktsidis)

Issue #20096 has been updated by kjtsanaktsidis (KJ Tsanaktsidis).


Backport PR's:

* https://github.com/ruby/ruby/pull/9470
* https://github.com/ruby/ruby/pull/9471

----------------------------------------
Bug #20096: Ruby 3.2.2 win32/registry: Junk appended to Windows Registry String Value
https://bugs.ruby-lang.org/issues/20096#change-106152

* Author: jay4rubydev (Jay M)
* Status: Closed
* Priority: Normal
* ruby -v: ruby 3.2.2 (2023-03-30 revision e51014f9c0) [x64-mswin64_140]
* Backport: 3.0: UNKNOWN, 3.1: UNKNOWN, 3.2: REQUIRED, 3.3: REQUIRED
----------------------------------------
Ruby Version:
ruby 3.2.2 (2023-03-30 revision e51014f9c0) [x64-mswin64_140]
Compiler: MSVC 2019 - Microsoft (R) C/C++ Optimizing Compiler Version 19.29.30147 for x64.

Issue: win32/registry adds junk to Windows Registry String Value

Code:
require 'win32/registry'
win_oracle_key = "SOFTWARE\\MicroSoft"
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\\ModuleInfo"
reg[inst_loc_key] = inv_dir

Result:
Registry contains:
C:\Program Files\Tester\ModuleInfo爀

Observation: Looks like memory overread

Expected Result - without the junk:
C:\Program Files\Tester\ModuleInfo

After changing the code in registry.rb:
From:
    def write(name, type, data)

      termsize = 0
      case type
      when REG_SZ, REG_EXPAND_SZ
        data = data.encode(WCHAR)
        termsize = WCHAR_SIZE

To:

    def write(name, type, data)

      termsize = 0
      case type
      when REG_SZ, REG_EXPAND_SZ
        enc_data = data.encode(WCHAR)
		# Add NULL WCHAR for string data and don't set the termsize because 
		# enc_data.bytesize will now include the size of the NULL character.
		enc_data += WCHAR_NUL
        # termsize = WCHAR_SIZE
      ...



-- 
https://bugs.ruby-lang.org/
 ______________________________________________
 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/

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [ruby-core:116286] [Ruby master Bug#20096] Ruby 3.2.2 win32/registry: Junk appended to Windows Registry String Value
  2023-12-27  6:01 [ruby-core:115925] [Ruby master Bug#20096] Ruby 3.2.2 win32/registry: Junk appended to Windows Registry String Value jay4rubydev (Jay M) via ruby-core
                   ` (4 preceding siblings ...)
  2024-01-10 10:40 ` [ruby-core:116147] " kjtsanaktsidis (KJ Tsanaktsidis) via ruby-core
@ 2024-01-18  3:20 ` nagachika (Tomoyuki Chikanaga) via ruby-core
  2024-03-07 11:12 ` [ruby-core:117074] " naruse (Yui NARUSE) via ruby-core
  6 siblings, 0 replies; 8+ messages in thread
From: nagachika (Tomoyuki Chikanaga) via ruby-core @ 2024-01-18  3:20 UTC (permalink / raw)
  To: ruby-core; +Cc: nagachika (Tomoyuki Chikanaga)

Issue #20096 has been updated by nagachika (Tomoyuki Chikanaga).

Backport changed from 3.0: UNKNOWN, 3.1: UNKNOWN, 3.2: REQUIRED, 3.3: REQUIRED to 3.0: UNKNOWN, 3.1: UNKNOWN, 3.2: DONE, 3.3: REQUIRED

ruby_3_2 5dae6eb55e9785c8329708e55a49a280a344cdc1 merged revision(s) 051a874325c177e040301878069c2b28f5d06ce6.

----------------------------------------
Bug #20096: Ruby 3.2.2 win32/registry: Junk appended to Windows Registry String Value
https://bugs.ruby-lang.org/issues/20096#change-106308

* Author: jay4rubydev (Jay M)
* Status: Closed
* Priority: Normal
* ruby -v: ruby 3.2.2 (2023-03-30 revision e51014f9c0) [x64-mswin64_140]
* Backport: 3.0: UNKNOWN, 3.1: UNKNOWN, 3.2: DONE, 3.3: REQUIRED
----------------------------------------
Ruby Version:
ruby 3.2.2 (2023-03-30 revision e51014f9c0) [x64-mswin64_140]
Compiler: MSVC 2019 - Microsoft (R) C/C++ Optimizing Compiler Version 19.29.30147 for x64.

Issue: win32/registry adds junk to Windows Registry String Value

Code:
require 'win32/registry'
win_oracle_key = "SOFTWARE\\MicroSoft"
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\\ModuleInfo"
reg[inst_loc_key] = inv_dir

Result:
Registry contains:
C:\Program Files\Tester\ModuleInfo爀

Observation: Looks like memory overread

Expected Result - without the junk:
C:\Program Files\Tester\ModuleInfo

After changing the code in registry.rb:
From:
    def write(name, type, data)

      termsize = 0
      case type
      when REG_SZ, REG_EXPAND_SZ
        data = data.encode(WCHAR)
        termsize = WCHAR_SIZE

To:

    def write(name, type, data)

      termsize = 0
      case type
      when REG_SZ, REG_EXPAND_SZ
        enc_data = data.encode(WCHAR)
		# Add NULL WCHAR for string data and don't set the termsize because 
		# enc_data.bytesize will now include the size of the NULL character.
		enc_data += WCHAR_NUL
        # termsize = WCHAR_SIZE
      ...



-- 
https://bugs.ruby-lang.org/
 ______________________________________________
 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/

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [ruby-core:117074] [Ruby master Bug#20096] Ruby 3.2.2 win32/registry: Junk appended to Windows Registry String Value
  2023-12-27  6:01 [ruby-core:115925] [Ruby master Bug#20096] Ruby 3.2.2 win32/registry: Junk appended to Windows Registry String Value jay4rubydev (Jay M) via ruby-core
                   ` (5 preceding siblings ...)
  2024-01-18  3:20 ` [ruby-core:116286] " nagachika (Tomoyuki Chikanaga) via ruby-core
@ 2024-03-07 11:12 ` naruse (Yui NARUSE) via ruby-core
  6 siblings, 0 replies; 8+ messages in thread
From: naruse (Yui NARUSE) via ruby-core @ 2024-03-07 11:12 UTC (permalink / raw)
  To: ruby-core; +Cc: naruse (Yui NARUSE)

Issue #20096 has been updated by naruse (Yui NARUSE).

Backport changed from 3.0: UNKNOWN, 3.1: UNKNOWN, 3.2: DONE, 3.3: REQUIRED to 3.0: UNKNOWN, 3.1: UNKNOWN, 3.2: DONE, 3.3: DONE

ruby_3_3 ade02f3c8909a8bf630af2c88f00b7bd7ff02682 merged revision(s) 051a874325c177e040301878069c2b28f5d06ce6.

----------------------------------------
Bug #20096: Ruby 3.2.2 win32/registry: Junk appended to Windows Registry String Value
https://bugs.ruby-lang.org/issues/20096#change-107148

* Author: jay4rubydev (Jay M)
* Status: Closed
* ruby -v: ruby 3.2.2 (2023-03-30 revision e51014f9c0) [x64-mswin64_140]
* Backport: 3.0: UNKNOWN, 3.1: UNKNOWN, 3.2: DONE, 3.3: DONE
----------------------------------------
Ruby Version:
ruby 3.2.2 (2023-03-30 revision e51014f9c0) [x64-mswin64_140]
Compiler: MSVC 2019 - Microsoft (R) C/C++ Optimizing Compiler Version 19.29.30147 for x64.

Issue: win32/registry adds junk to Windows Registry String Value

Code:
require 'win32/registry'
win_oracle_key = "SOFTWARE\\MicroSoft"
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\\ModuleInfo"
reg[inst_loc_key] = inv_dir

Result:
Registry contains:
C:\Program Files\Tester\ModuleInfo爀

Observation: Looks like memory overread

Expected Result - without the junk:
C:\Program Files\Tester\ModuleInfo

After changing the code in registry.rb:
From:
    def write(name, type, data)

      termsize = 0
      case type
      when REG_SZ, REG_EXPAND_SZ
        data = data.encode(WCHAR)
        termsize = WCHAR_SIZE

To:

    def write(name, type, data)

      termsize = 0
      case type
      when REG_SZ, REG_EXPAND_SZ
        enc_data = data.encode(WCHAR)
		# Add NULL WCHAR for string data and don't set the termsize because 
		# enc_data.bytesize will now include the size of the NULL character.
		enc_data += WCHAR_NUL
        # termsize = WCHAR_SIZE
      ...



-- 
https://bugs.ruby-lang.org/
 ______________________________________________
 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/

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2024-03-07 11:12 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-12-27  6:01 [ruby-core:115925] [Ruby master Bug#20096] Ruby 3.2.2 win32/registry: Junk appended to Windows Registry String Value jay4rubydev (Jay M) via ruby-core
2023-12-28  5:42 ` [ruby-core:115946] " kjtsanaktsidis (KJ Tsanaktsidis) via ruby-core
2023-12-28  5:57 ` [ruby-core:115948] " jay4rubydev (Jay M) via ruby-core
2023-12-28  6:10 ` [ruby-core:115950] " kjtsanaktsidis (KJ Tsanaktsidis) via ruby-core
2023-12-28  7:05 ` [ruby-core:115951] " kjtsanaktsidis (KJ Tsanaktsidis) via ruby-core
2024-01-10 10:40 ` [ruby-core:116147] " kjtsanaktsidis (KJ Tsanaktsidis) via ruby-core
2024-01-18  3:20 ` [ruby-core:116286] " nagachika (Tomoyuki Chikanaga) via ruby-core
2024-03-07 11:12 ` [ruby-core:117074] " naruse (Yui NARUSE) via ruby-core

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).