aboutsummaryrefslogtreecommitdiff
path: root/src/lib/resources.zig
diff options
context:
space:
mode:
authorHimbeer <himbeer@disroot.org>2024-07-21 11:11:13 +0200
committerHimbeer <himbeer@disroot.org>2024-07-21 11:11:26 +0200
commit512256e4a3e4a77a445dbda5ca6cb692f5c92bbd (patch)
treefdfaaf5c5c90e55931ddb6ec4f2cea62b3386d3a /src/lib/resources.zig
parent158403484c8edb8bc7209c4a8e551b608e3ddbd0 (diff)
resources: Fix userinit inode names pointing to undefined stack memory
Userinit contents can now be accessed successfully without getting a NotFound error for resources whose names got corrupted.
Diffstat (limited to 'src/lib/resources.zig')
-rw-r--r--src/lib/resources.zig10
1 files changed, 5 insertions, 5 deletions
diff --git a/src/lib/resources.zig b/src/lib/resources.zig
index 71cd73b..25835d5 100644
--- a/src/lib/resources.zig
+++ b/src/lib/resources.zig
@@ -170,14 +170,14 @@ pub const Error = error{
NoConsole,
};
-pub fn provideBuiltin() !void {
+pub fn provideBuiltin(allocator: std.mem.Allocator) !void {
try addDir("/io");
try addDir("/userinit");
try addDir("/process");
try addDir("/process/self");
try provideConsole();
- try provideUserinit();
+ try provideUserinit(allocator);
try provideProcess();
}
@@ -195,13 +195,12 @@ fn provideConsole() !void {
});
}
-fn provideUserinit() !void {
+fn provideUserinit(allocator: std.mem.Allocator) !void {
var userinit_stream = io.fixedBufferStream(userinit.tarball);
const reader = userinit_stream.reader();
var file_name_buffer: [4086]u8 = undefined;
var link_name_buffer: [4086]u8 = undefined;
- var path_buffer: [4096]u8 = undefined;
var it = tar.iterator(reader, .{
.file_name_buffer = file_name_buffer[0..],
@@ -209,7 +208,8 @@ fn provideUserinit() !void {
});
while (try it.next()) |file| {
- const path = try std.fmt.bufPrint(path_buffer[0..], "/userinit/{s}", .{file.name});
+ const resolved = try std.fs.path.resolvePosix(allocator, &[_][]const u8{file.name});
+ const path = try std.fmt.allocPrint(allocator, "/userinit/{s}", .{resolved});
switch (file.kind) {
.file => try addFile(path, file),
.directory => try addDir(path),