From fb9377df17ecd0261ac33b79710e96e09fff6c43 Mon Sep 17 00:00:00 2001 From: David Bader <65665893+BunterSchatten@users.noreply.github.com> Date: Fri, 30 Jan 2026 14:44:38 +0100 Subject: [PATCH] core/os: fix lookup_env_buf only working with empty buffer --- core/os/os2/env_linux.odin | 1 + core/os/os2/env_posix.odin | 1 + core/os/os2/env_wasi.odin | 1 + core/os/os_darwin.odin | 1 + core/os/os_freebsd.odin | 1 + core/os/os_haiku.odin | 1 + core/os/os_linux.odin | 1 + core/os/os_netbsd.odin | 1 + core/os/os_openbsd.odin | 1 + 9 files changed, 9 insertions(+) diff --git a/core/os/os2/env_linux.odin b/core/os/os2/env_linux.odin index faee5c5ab..7855fbfed 100644 --- a/core/os/os2/env_linux.odin +++ b/core/os/os2/env_linux.odin @@ -282,6 +282,7 @@ when ODIN_NO_CRT { return "", .Buffer_Full } else { copy(buf, key) + buf[len(key)] = 0 } cval := posix.getenv(cstring(raw_data(buf))) diff --git a/core/os/os2/env_posix.odin b/core/os/os2/env_posix.odin index 8b5f2082e..72a1daf18 100644 --- a/core/os/os2/env_posix.odin +++ b/core/os/os2/env_posix.odin @@ -35,6 +35,7 @@ _lookup_env_buf :: proc(buf: []u8, key: string) -> (value: string, error: Error) return "", .Buffer_Full } else { copy(buf, key) + buf[len(key)] = 0 } cval := posix.getenv(cstring(raw_data(buf))) diff --git a/core/os/os2/env_wasi.odin b/core/os/os2/env_wasi.odin index b126d014e..cb40667cf 100644 --- a/core/os/os2/env_wasi.odin +++ b/core/os/os2/env_wasi.odin @@ -88,6 +88,7 @@ _lookup_env_buf :: proc(buf: []u8, key: string) -> (value: string, error: Error) return "", .Buffer_Full } else { copy(buf, key) + buf[len(key)] = 0 } sync.shared_guard(&g_env_mutex) diff --git a/core/os/os_darwin.odin b/core/os/os_darwin.odin index 77b5825dd..d8f7a9577 100644 --- a/core/os/os_darwin.odin +++ b/core/os/os_darwin.odin @@ -1072,6 +1072,7 @@ lookup_env_buffer :: proc(buf: []u8, key: string) -> (value: string, err: Error) return "", .Buffer_Full } else { copy(buf, key) + buf[len(key)] = 0 } if value = string(_unix_getenv(cstring(raw_data(buf)))); value == "" { diff --git a/core/os/os_freebsd.odin b/core/os/os_freebsd.odin index 0542e10dc..82b5a2f0f 100644 --- a/core/os/os_freebsd.odin +++ b/core/os/os_freebsd.odin @@ -844,6 +844,7 @@ lookup_env_buffer :: proc(buf: []u8, key: string) -> (value: string, err: Error) return "", .Buffer_Full } else { copy(buf, key) + buf[len(key)] = 0 } if value = string(_unix_getenv(cstring(raw_data(buf)))); value == "" { diff --git a/core/os/os_haiku.odin b/core/os/os_haiku.odin index e7c71338b..ad984e33c 100644 --- a/core/os/os_haiku.odin +++ b/core/os/os_haiku.odin @@ -487,6 +487,7 @@ lookup_env_buffer :: proc(buf: []u8, key: string) -> (value: string, err: Error) return "", .Buffer_Full } else { copy(buf, key) + buf[len(key)] = 0 } if value = string(_unix_getenv(cstring(raw_data(buf)))); value == "" { diff --git a/core/os/os_linux.odin b/core/os/os_linux.odin index f0f9b401c..4c32676c6 100644 --- a/core/os/os_linux.odin +++ b/core/os/os_linux.odin @@ -963,6 +963,7 @@ lookup_env_buffer :: proc(buf: []u8, key: string) -> (value: string, err: Error) return "", .Buffer_Full } else { copy(buf, key) + buf[len(key)] = 0 } if value = string(_unix_getenv(cstring(raw_data(buf)))); value == "" { diff --git a/core/os/os_netbsd.odin b/core/os/os_netbsd.odin index 30511012f..640ea46cd 100644 --- a/core/os/os_netbsd.odin +++ b/core/os/os_netbsd.odin @@ -891,6 +891,7 @@ lookup_env_buffer :: proc(buf: []u8, key: string) -> (value: string, err: Error) return "", .Buffer_Full } else { copy(buf, key) + buf[len(key)] = 0 } if value = string(_unix_getenv(cstring(raw_data(buf)))); value == "" { diff --git a/core/os/os_openbsd.odin b/core/os/os_openbsd.odin index 50ee37dff..bf89a21f4 100644 --- a/core/os/os_openbsd.odin +++ b/core/os/os_openbsd.odin @@ -804,6 +804,7 @@ lookup_env_buffer :: proc(buf: []u8, key: string) -> (value: string, err: Error) return "", .Buffer_Full } else { copy(buf, key) + buf[len(key)] = 0 } if value = string(_unix_getenv(cstring(raw_data(buf)))); value == "" {