authorgravatar for hello@nektro.netMeghan Denny <hello@nektro.net> 2026-04-30 03:53:47 -07:00
committergravatar for hello@nektro.netMeghan Denny <hello@nektro.net> 2026-04-30 03:53:47 -07:00
logd2e949cf9bb2aa088b3c21f4c4ea34ec71ae62d0
treed8185227c0cacf1280d94a9c340d1e46a4ca74a0
parent40ff2fd682d3e11194a66eeda9e3da8a961accc9
signaturebadge-check Signed by SSH key SHA256:4hHJbtBRU58AYXwjL7fkz2fnQHdiye8x1QpTCQ0sHNw

mkdtemp: remove toctou


1 files changed, 8 insertions(+), 5 deletions(-)

nfs.zig+8-5
......@@ -46,9 +46,12 @@ pub fn munmap(region: []const u8) void {
4646}
4747
4848pub fn mkdtemp() !Dir {
49 var template = "/tmp/tmp.XXXXXX\x00".*;
50 const path_p = try sys.mkdtemp(template[0 .. template.len - 1 :0].ptr);
51 const path = std.mem.sliceTo(path_p, 0);
52 std.log.debug("path: {s}", .{path});
53 return cwd().openDir(path, .{});
49 var template = "/tmp/tmp.XXXXXXXXXX\x00".*;
50 const letters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
51 var buf: [10]u8 = @splat(0);
52 const rand = try sys.getrandom(&buf, 0);
53 if (rand.len != 10) return error.EAGAIN;
54 for (template[9..][0..10], rand) |*a, b| a.* = letters[b % 62];
55 const path = template[0 .. template.len - 1 :0];
56 return cwd().makeOpenPath(path, .{});
5457}