From 3eb5ec5dc5338e45d7e419045c8792ebd89b6c7e Mon Sep 17 00:00:00 2001 From: David Tolnay Date: Tue, 19 Aug 2025 08:14:46 -0700 Subject: [PATCH] Look for args set to null by a C library --- src/lib.rs | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/lib.rs b/src/lib.rs index 0e83b44..4793185 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -106,7 +106,15 @@ mod r#impl { // We count on the OS to provide argv for which argv + argc does not // overflow. - let end = unsafe { argv.offset(argc as isize) }; + let max_end = unsafe { argv.offset(argc as isize) }; + + // Stop at the first null arg. Some C command-line parsers (including + // GTK's GLib and Qt's QCommandLineParser) erase already handled + // arguments from argv and leave null entries at the end. + let mut end = argv; + while end < max_end && !unsafe { *end }.is_null() { + end = unsafe { end.add(1) }; + } Iter { next: argv, end } }