Skip to content

Commit 2c73296

Browse files
committed
tools: avoid vsymlink Windows checker crash
1 parent d2006a9 commit 2c73296

1 file changed

Lines changed: 6 additions & 4 deletions

File tree

cmd/tools/vsymlink/vsymlink_windows.c.v

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -130,11 +130,12 @@ fn get_reg_sys_env_handle() !voidptr {
130130
fn get_reg_value(reg_env_key voidptr, key string) !string {
131131
// query the value (shortcut the sizing step)
132132
reg_value_size := u32(4095) // this is the max length (not for the registry, but for the system %PATH%)
133-
mut reg_value := unsafe { &u16(malloc(int(reg_value_size))) }
134-
if C.RegQueryValueExW(reg_env_key, key.to_wide(), 0, 0, reg_value, &reg_value_size) != 0 {
133+
reg_value_cap := int(reg_value_size / u32(sizeof(u16))) + 1
134+
mut reg_value := []u16{len: reg_value_cap}
135+
if C.RegQueryValueExW(reg_env_key, key.to_wide(), 0, 0, &u8(reg_value.data), &reg_value_size) != 0 {
135136
return error('Unable to get registry value for "${key}".')
136137
}
137-
return unsafe { string_from_wide(reg_value) }
138+
return unsafe { string_from_wide(reg_value.data) }
138139
}
139140

140141
// sets the value for the given $key to the given $value
@@ -148,7 +149,8 @@ fn set_reg_value(reg_key voidptr, key string, value string) !bool {
148149
// Broadcasts a message to all listening windows (explorer.exe in particular)
149150
// letting them know that the system environment has changed and should be reloaded
150151
fn send_setting_change_msg(message_data string) !bool {
151-
if C.SendMessageTimeoutW(os.hwnd_broadcast, os.wm_settingchange, 0, unsafe { &u32(message_data.to_wide()) },
152+
message_data_wide := message_data.to_wide()
153+
if C.SendMessageTimeoutW(os.hwnd_broadcast, os.wm_settingchange, 0, unsafe { &u32(message_data_wide) },
152154
os.smto_abortifhung, 5000, 0) == 0 {
153155
return error('Could not broadcast WM_SETTINGCHANGE')
154156
}

0 commit comments

Comments
 (0)