1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-23 18:27:40 +00:00
serenity/Userland/Libraries/LibC
Jelle Raaijmakers f081a89cd9 LibC: Do not crash if putenv variable is invalid
Dr. POSIX says:

    Although the space used by string is no longer used once a new
    string which defines name is passed to putenv(), if any thread in
    the application has used getenv() to retrieve a pointer to this
    variable, it should not be freed by calling free(). If the changed
    environment variable is one known by the system (such as the locale
    environment variables) the application should never free the buffer
    used by earlier calls to putenv() for the same variable.

Applications _should_ not free the data passed to `putenv`, but they
_could_ in practice. I found that our Quake II port misbehaves in this
way, but does not crash on other platforms because glibc/musl `putenv`
does not assume that environment variables are correctly formatted.

The new behavior ignores environment variables without a '=' present,
and prevents excessively reading beyond the variable's name if the data
pointed to by the environment entry does not contain any null bytes.

With this change, our Quake II port no longer crashes when switching
from fullscreen to windowed mode.
2023-06-06 08:18:44 +02:00
..
arch LibC: Remove i686 support 2022-12-28 11:53:41 +01:00
arpa Everywhere: Rename to_{string => deprecated_string}() where applicable 2022-12-06 08:54:33 +01:00
bits Userland: Fix wrong signature of dladdr 2023-05-05 02:19:05 +02:00
net LibC: Add missing sys/cdefs.h include 2022-08-23 19:07:12 +01:00
netinet LibC: Add Ipv6 address checking macros to netinet/in.h 2023-04-29 08:55:16 -06:00
sys Kernel+LibC: Modify aarch64's __mcontext to store registers in an array 2023-04-06 21:19:58 +03:00
alloca.h Everything: Move to SPDX license identifiers in all files. 2021-04-22 11:22:27 +02:00
assert.cpp Kernel: Move process coredump metadata modification to the prctl syscall 2023-03-05 16:55:08 +01:00
assert.h Everywhere: Run clang-format 2022-12-03 23:52:23 +00:00
byteswap.h Everywhere: Fix order of includes and #pragma once 2022-09-18 18:30:05 -07:00
CMakeLists.txt LibC: Remove i686 support 2022-12-28 11:53:41 +01:00
complex.cpp LibC: Add barebones <complex.h> 2022-05-23 00:13:26 +02:00
complex.h LibC: Add missing sys/cdefs.h include 2022-08-23 19:07:12 +01:00
crt0.cpp LibC: Set up a dummy first stack frame in _start 2023-06-01 09:04:20 +02:00
crt0_shared.cpp Everywhere: Remove unused includes of LibC/stdlib.h 2023-01-02 20:27:20 -05:00
ctype.cpp LibC: Align _ctype_ to newlib's implementation 2022-06-30 12:34:16 +01:00
ctype.h LibC: Align _ctype_ to newlib's implementation 2022-06-30 12:34:16 +01:00
cxxabi.cpp Everywhere: Remove "LibC/" includes, add lint-rule against it 2023-01-07 10:01:37 -07:00
dirent.cpp Everywhere: Remove unused includes of AK/Format.h 2023-01-02 20:27:20 -05:00
dirent.h LibC: Add missing sys/cdefs.h include 2022-08-23 19:07:12 +01:00
dlfcn.cpp Userland: Fix wrong signature of dladdr 2023-05-05 02:19:05 +02:00
dlfcn.h Userland: Fix wrong signature of dladdr 2023-05-05 02:19:05 +02:00
elf.h LibC+LibELF: Handle the R_AARCH64_IRELATIVE relocation type 2023-05-14 13:47:53 +02:00
endian.h Everything: Move to SPDX license identifiers in all files. 2021-04-22 11:22:27 +02:00
errno.h LibC: Implement errno via a __errno_location() function 2022-04-21 11:49:48 +02:00
errno_codes.h LibC: Add missing macro definitions for errno codes 2022-05-08 13:04:32 -07:00
fcntl.cpp LibC: Properly implement the futimens function 2023-04-10 10:21:28 +02:00
fcntl.h LibC: Add missing sys/cdefs.h include 2022-08-23 19:07:12 +01:00
fd_set.h Kernel+LibC: Move the FD_SETSIZE declaration to API/POSIX/select.h file 2023-03-01 19:36:53 -07:00
fenv.cpp Everywhere: Use ARCH(AARCH64) instead of AK_ARCH_AARCH64 2023-04-14 19:15:19 +02:00
fenv.h Everywhere: Run clang-format 2022-04-01 21:24:45 +01:00
float.h LibC+LibDl: Declare functions taking no arguments as taking void 2022-01-08 19:22:00 +01:00
fnmatch.cpp Everywhere: Fix more Copyright header inconsistencies 2021-10-04 11:10:09 +01:00
fnmatch.h LibC: Add missing sys/cdefs.h include 2022-08-23 19:07:12 +01:00
getopt.cpp LibC: Correctly reset the getopt state on optind = 1 2023-03-12 22:09:09 +01:00
getopt.h Everywhere: Run clang-format 2022-04-01 21:24:45 +01:00
getsubopt.cpp Everywhere: Remove unused includes of LibC/stdlib.h 2023-01-02 20:27:20 -05:00
glob.cpp LibC: Add stubs for glob and globfree 2022-07-08 22:27:38 +00:00
glob.h LibC: Add missing sys/cdefs.h include 2022-08-23 19:07:12 +01:00
grp.cpp LibC: Ensure that struct group::gr_mem pointers are aligned 2023-05-28 05:05:09 -06:00
grp.h LibC: Implement getgrent_r 2022-11-25 23:13:16 +01:00
ifaddrs.cpp Everywhere: Remove "LibC/" includes, add lint-rule against it 2023-01-07 10:01:37 -07:00
ifaddrs.h Kernel+LibC: Stub out getifaddrs() and freeifaddrs() 2021-12-22 00:02:36 -08:00
inttypes.cpp Everywhere: Run clang-format 2022-04-01 21:24:45 +01:00
inttypes.h Kernel+Userland: Remove uses of the __i386__ compiler macro 2022-12-28 11:53:41 +01:00
ioctl.cpp LibC: Don't truncate arguments for ioctl() on x86_64 2021-07-22 04:18:39 +04:30
langinfo.cpp Everywhere: Run clang-format 2022-04-01 21:24:45 +01:00
langinfo.h Everywhere: Fix more Copyright header inconsistencies 2021-10-04 11:10:09 +01:00
libcinit.cpp LibC: Implement errno via a __errno_location() function 2022-04-21 11:49:48 +02:00
libgen.cpp Everything: Move to SPDX license identifiers in all files. 2021-04-22 11:22:27 +02:00
libgen.h Everything: Move to SPDX license identifiers in all files. 2021-04-22 11:22:27 +02:00
limits.h Kernel+Libraries: Don't include limits.h from LibELF/Validation.h 2023-01-21 10:43:59 -07:00
link.cpp Everything: Move to SPDX license identifiers in all files. 2021-04-22 11:22:27 +02:00
link.h Userland: Remove unecessary uses of __serenity__ macro 2022-10-10 12:23:12 +02:00
locale.cpp LibC: Allow detection of supported locales through setlocale 2022-09-29 09:02:17 -04:00
locale.h Everywhere: Run clang-format 2022-04-01 21:24:45 +01:00
malloc.cpp Kernel+Libraries: Move defines and types from sys/auxv.h to Kernel/API 2023-01-21 10:43:59 -07:00
mallocdefs.h LibC: Increase alignment for malloc() BigAllocationBlocks to 16 bytes 2022-03-02 11:40:37 +01:00
math.cpp Everywhere: Use ARCH(AARCH64) instead of AK_ARCH_AARCH64 2023-04-14 19:15:19 +02:00
math.h LibM: Move the math standard library to LibC 2022-09-16 16:09:19 +00:00
memory.h Everything: Move to SPDX license identifiers in all files. 2021-04-22 11:22:27 +02:00
mntent.cpp LibC: Remove TODO() macros to not break mc port 2022-01-13 18:46:22 +01:00
mntent.h LibC: Add mntent stub functions 2022-01-07 18:38:32 +01:00
net.cpp LibC: Implement if_indextoname and if_nametoindex 2023-04-14 12:29:03 +01:00
netdb.cpp LibIPC+LibC: Add and use a helper to encode/decoder container sizes 2023-01-04 20:13:54 +01:00
netdb.h LibC: Add herror() and hstrerror() 2022-05-12 15:01:32 +02:00
nl_types.h Everywhere: Fix more Copyright header inconsistencies 2021-10-04 11:10:09 +01:00
paths.h Ports: Add dosfstools port 2022-10-15 13:16:24 +02:00
poll.cpp LibC: Mark a bunch of functions as cancellation points 2022-07-22 10:07:15 -07:00
poll.h LibC: Add missing sys/cdefs.h include 2022-08-23 19:07:12 +01:00
priority.cpp LibC: Add getpriority() and setpriority() stubs 2021-09-23 18:51:21 +02:00
pthread.cpp Kernel+LibC: Implement pthread_create for AArch64 2023-04-23 14:30:59 +02:00
pthread.h LibC: Make 'attributes' parameter for pthread_create const 2022-10-24 15:49:39 +02:00
pthread_cond.cpp LibC: Mark a bunch of functions as cancellation points 2022-07-22 10:07:15 -07:00
pthread_integration.cpp Kernel: Clean up sys$futex and add support for cross-process futexes 2022-07-21 16:39:22 +02:00
pthread_once.cpp Kernel: Clean up sys$futex and add support for cross-process futexes 2022-07-21 16:39:22 +02:00
pthread_tls.cpp LibC: Remove a bunch of weak pthread_* symbols 2022-07-19 20:58:51 -07:00
pty.cpp Everywhere: Remove unused includes of AK/Format.h 2023-01-02 20:27:20 -05:00
pty.h LibC: Remove 'int* aslave' parameter from forkpty() 2021-05-06 13:52:46 +01:00
pwd.cpp Everywhere: Remove unused DeprecatedString includes 2023-04-09 22:00:54 +02:00
pwd.h LibC: Implement getpwent_r 2022-11-08 11:51:19 +01:00
qsort.cpp Everywhere: Run clang-format 2022-04-01 21:24:45 +01:00
regex.cpp LibC: Reduce reliance on the dlfcn internals for regex functions 2022-09-05 10:12:02 +01:00
regex.h LibC+LibRegex: Move central regex definitions into LibC/bits 2022-09-20 12:57:21 +01:00
resolv.cpp Everywhere: Fix more Copyright header inconsistencies 2021-10-04 11:10:09 +01:00
resolv.h LibC: Add missing sys/cdefs.h include 2022-08-23 19:07:12 +01:00
scanf.cpp Everywhere: Remove unused includes of AK/StdLibExtras.h 2023-01-02 20:27:20 -05:00
sched.cpp Kernel+LibC: Report correct scheduling priority limits 2022-10-27 11:30:19 +01:00
sched.h LibC: Remove duplicate definition of sched_param from sched.h 2022-10-27 11:30:19 +01:00
search.cpp Everywhere: Run clang-format 2022-04-01 21:24:45 +01:00
search.h Everywhere: Run clang-format 2022-04-01 21:24:45 +01:00
semaphore.cpp AK: Remove StringBuilder::build() in favor of to_deprecated_string() 2023-01-27 20:38:49 +00:00
semaphore.h LibPthread: Implement named semaphores 2022-07-21 16:39:22 +02:00
serenity.cpp Kernel+LibC: Implement readlinkat(2) 2022-12-11 19:55:37 -07:00
serenity.h LibC: Add missing sys/cdefs.h include 2022-08-23 19:07:12 +01:00
setjmp.h Kernel+Userland: Remove uses of the __i386__ compiler macro 2022-12-28 11:53:41 +01:00
shadow.cpp Everywhere: Remove unused includes of LibC/stdlib.h 2023-01-02 20:27:20 -05:00
shadow.h Everywhere: Run clang-format 2022-04-01 21:24:45 +01:00
signal.cpp LibC: Fix incorrect string length calculation in getsignalbyname() 2023-05-23 01:42:04 +02:00
signal.h Kernel+LibC: Move LibC/signal_numbers.h to Kernel/API/POSIX 2023-01-21 10:43:59 -07:00
spawn.cpp Everywhere: Remove unused includes of LibC/stdlib.h 2023-01-02 20:27:20 -05:00
spawn.h Everywhere: Run clang-format 2022-04-01 21:24:45 +01:00
ssp.cpp LibELF: Add stack guard hardening 2022-11-29 11:04:21 +01:00
ssp_nonshared.cpp LibC: Properly implement stack protectors 2022-11-01 14:49:09 +00:00
stat.cpp LibC: Properly implement the futimens function 2023-04-10 10:21:28 +02:00
stdarg.h Everything: Move to SPDX license identifiers in all files. 2021-04-22 11:22:27 +02:00
stddef.h LibC: Remove #ifdef KERNEL guard from stddef.h 2023-01-21 10:43:59 -07:00
stdint.h Everything: Move to SPDX license identifiers in all files. 2021-04-22 11:22:27 +02:00
stdio.cpp Everywhere: Remove "LibC/" includes, add lint-rule against it 2023-01-07 10:01:37 -07:00
stdio.h Kernel+LibC+LibCore: Implement renameat(2) 2022-12-11 19:55:37 -07:00
stdio_ext.h LibC: Add missing sys/cdefs.h include 2022-08-23 19:07:12 +01:00
stdlib.cpp LibC: Do not crash if putenv variable is invalid 2023-06-06 08:18:44 +02:00
stdlib.h LibC+LibCore: Remove serenity_setenv() 2023-02-05 16:40:51 +01:00
string.cpp LibC: Add missing spec links for string APIs 2023-06-05 06:55:54 +02:00
string.h LibC: Fix memmem signature compliance 2023-06-05 06:55:54 +02:00
strings.cpp LibC: Add ffs{,l,ll} 2022-10-14 13:37:29 +02:00
strings.h LibC: Add ffs{,l,ll} 2022-10-14 13:37:29 +02:00
stubs.cpp Everywhere: Run clang-format 2022-12-03 23:52:23 +00:00
sysexits.h LibC: Use EX_IOERR instead of EX_IOER 2021-06-10 20:21:08 +01:00
syslog.cpp AK: Remove StringBuilder::build() in favor of to_deprecated_string() 2023-01-27 20:38:49 +00:00
syslog.h Everywhere: Run clang-format 2022-04-01 21:24:45 +01:00
termcap.cpp AK+Everywhere: Rename String to DeprecatedString 2022-12-06 08:54:33 +01:00
termcap.h Everywhere: Run clang-format 2022-04-01 21:24:45 +01:00
termios.cpp LibC: Mark a bunch of functions as cancellation points 2022-07-22 10:07:15 -07:00
termios.h LibC: Add missing sys/cdefs.h include 2022-08-23 19:07:12 +01:00
time.cpp LibTimeZone+Userland: Change timezone functions to use UnixDateTime 2023-05-24 23:18:07 +02:00
time.h LibC: Remove duplicate declaration of clock_t and time_t 2023-01-21 10:43:59 -07:00
times.cpp Everything: Move to SPDX license identifiers in all files. 2021-04-22 11:22:27 +02:00
ucontext.h LibC: Add public and independent ucontext.h header 2022-06-12 00:28:26 +01:00
ulimit.cpp LibC: Add a wrapper for the getrusage syscall 2022-02-28 20:09:37 +01:00
ulimit.h Everything: Move to SPDX license identifiers in all files. 2021-04-22 11:22:27 +02:00
unistd.cpp Libraries: Convert DeprecatedFile usages to LibFileSystem 2023-03-24 10:58:43 +00:00
unistd.h LibC: Correctly reset the getopt state on optind = 1 2023-03-12 22:09:09 +01:00
utime.cpp Everywhere: Run clang-format 2022-04-01 21:24:45 +01:00
utime.h Everywhere: Run clang-format 2022-04-01 21:24:45 +01:00
utmp.h Everything: Move to SPDX license identifiers in all files. 2021-04-22 11:22:27 +02:00
utsname.cpp Everything: Move to SPDX license identifiers in all files. 2021-04-22 11:22:27 +02:00
wchar.cpp LibC: Implement wcswidth 2022-06-30 11:57:49 +02:00
wchar.h LibC: Implement wcswidth 2022-06-30 11:57:49 +02:00
wctype.cpp Everywhere: Remove unused includes of AK/Format.h 2023-01-02 20:27:20 -05:00
wctype.h LibC: Add missing sys/cdefs.h include 2022-08-23 19:07:12 +01:00
wstdio.cpp LibC: Automatically append null terminator in vswprintf 2022-03-20 08:40:36 -04:00