From d9739599ec65a812a134bb4bd73b2e67e2b86076 Mon Sep 17 00:00:00 2001 From: renerocksai Date: Fri, 25 Jul 2025 01:57:37 +0200 Subject: [PATCH] added fio-typecheck of mimetype field when parsing binfiles --- src/request.zig | 10 ++++++++-- src/util.zig | 17 +++++++++++++++++ 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/src/request.zig b/src/request.zig index d20f041..83de0d0 100644 --- a/src/request.zig +++ b/src/request.zig @@ -132,8 +132,14 @@ fn parseBinfilesFrom(a: Allocator, o: fio.FIOBJ) !HttpParam { var mimetype: []const u8 = undefined; if (fio.fiobj_hash_haskey(o, key_type) == 1) { - const mt = fio.fiobj_obj2cstr(fio.fiobj_hash_get(o, key_type)); - mimetype = mt.data[0..mt.len]; + const mt_fiobj = fio.fiobj_hash_get(o, key_type); + // for some reason, mimetype can be an array + if (fio.fiobj_type_is(mt_fiobj, fio.FIOBJ_T_STRING) == 1) { + const mt = fio.fiobj_obj2cstr(mt_fiobj); + mimetype = mt.data[0..mt.len]; + } else { + mimetype = &"application/octet-stream".*; + } } else { mimetype = &"application/octet-stream".*; } diff --git a/src/util.zig b/src/util.zig index 1719fe9..8a6d693 100644 --- a/src/util.zig +++ b/src/util.zig @@ -17,6 +17,23 @@ pub fn fio2str(o: fio.FIOBJ) ?[]const u8 { return x.data[0..x.len]; } +pub fn fiobj_type_as_string(o: zap.fio.FIOBJ) []const u8 { + const value_type = switch (zap.fio.fiobj_type(o)) { + zap.fio.FIOBJ_T_NULL => "null", + zap.fio.FIOBJ_T_TRUE => "true", + zap.fio.FIOBJ_T_FALSE => "false", + zap.fio.FIOBJ_T_NUMBER => "number", + zap.fio.FIOBJ_T_FLOAT => "float", + zap.fio.FIOBJ_T_STRING => "string", + zap.fio.FIOBJ_T_ARRAY => "array", + zap.fio.FIOBJ_T_HASH => "hash", + zap.fio.FIOBJ_T_DATA => "data", + zap.fio.FIOBJ_T_UNKNOWN => "unknown", + else => "unreachable", + }; + return value_type; +} + /// Used internally: convert a FIO object into its string representation. /// This always allocates, so choose your allocator wisely. /// Let's never use that