Commit aadd1b252e

Ryan Liptak <squeek502@hotmail.com>
2022-12-31 07:09:31
ChildProcess: fix false positives in windowsCreateProcessSupportsExtension
Previously, the implementation would essentially check `startsWith` instead of `eql` (e.g. it would return true for `.exec` because it erroneously 'matched' `.exe`). Follow up to #13993
1 parent 58c1d98
Changed files (1)
lib/std/child_process.zig
@@ -1357,6 +1357,7 @@ fn windowsCreateProcess(app_name: [*:0]u16, cmd_line: [*:0]u16, envp_ptr: ?[*]u1
 
 /// Case-insenstive UTF-16 lookup
 fn windowsCreateProcessSupportsExtension(ext: []const u16) bool {
+    if (ext.len != 4) return false;
     const State = enum {
         start,
         dot,
@@ -1413,6 +1414,11 @@ fn windowsCreateProcessSupportsExtension(ext: []const u16) bool {
     return false;
 }
 
+test "windowsCreateProcessSupportsExtension" {
+    try std.testing.expect(windowsCreateProcessSupportsExtension(&[_]u16{ '.', 'e', 'X', 'e' }));
+    try std.testing.expect(!windowsCreateProcessSupportsExtension(&[_]u16{ '.', 'e', 'X', 'e', 'c' }));
+}
+
 /// Caller must dealloc.
 fn windowsCreateCommandLine(allocator: mem.Allocator, argv: []const []const u8) ![:0]u8 {
     var buf = std.ArrayList(u8).init(allocator);