From 1eb0cf5c155ecad3fa05f4444153ead0a48368a4 Mon Sep 17 00:00:00 2001 From: Cebtenzzre Date: Tue, 26 Sep 2023 13:01:47 -0400 Subject: [PATCH] gguf : basic type checking in gguf_get_* --- ggml.c | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/ggml.c b/ggml.c index a0be068d6..93080526c 100644 --- a/ggml.c +++ b/ggml.c @@ -20164,68 +20164,84 @@ enum gguf_type gguf_get_kv_type(const struct gguf_context * ctx, int i) { } enum gguf_type gguf_get_arr_type(const struct gguf_context * ctx, int i) { + GGML_ASSERT(ctx->kv[i].type == GGUF_TYPE_ARRAY); return ctx->kv[i].value.arr.type; } const void * gguf_get_arr_data(const struct gguf_context * ctx, int i) { + GGML_ASSERT(ctx->kv[i].type == GGUF_TYPE_ARRAY); return ctx->kv[i].value.arr.data; } const char * gguf_get_arr_str(const struct gguf_context * ctx, int key_id, int i) { + GGML_ASSERT(ctx->kv[i].type == GGUF_TYPE_ARRAY); struct gguf_kv * kv = &ctx->kv[key_id]; struct gguf_str * str = &((struct gguf_str *) kv->value.arr.data)[i]; return str->data; } int gguf_get_arr_n(const struct gguf_context * ctx, int i) { + GGML_ASSERT(ctx->kv[i].type == GGUF_TYPE_ARRAY); return ctx->kv[i].value.arr.n; } uint8_t gguf_get_val_u8(const struct gguf_context * ctx, int i) { + GGML_ASSERT(ctx->kv[i].type == GGUF_TYPE_UINT8); return ctx->kv[i].value.uint8; } int8_t gguf_get_val_i8(const struct gguf_context * ctx, int i) { + GGML_ASSERT(ctx->kv[i].type == GGUF_TYPE_INT8); return ctx->kv[i].value.int8; } uint16_t gguf_get_val_u16(const struct gguf_context * ctx, int i) { + GGML_ASSERT(ctx->kv[i].type == GGUF_TYPE_UINT16); return ctx->kv[i].value.uint16; } int16_t gguf_get_val_i16(const struct gguf_context * ctx, int i) { + GGML_ASSERT(ctx->kv[i].type == GGUF_TYPE_INT16); return ctx->kv[i].value.int16; } uint32_t gguf_get_val_u32(const struct gguf_context * ctx, int i) { + GGML_ASSERT(ctx->kv[i].type == GGUF_TYPE_UINT32); return ctx->kv[i].value.uint32; } int32_t gguf_get_val_i32(const struct gguf_context * ctx, int i) { + GGML_ASSERT(ctx->kv[i].type == GGUF_TYPE_INT32); return ctx->kv[i].value.int32; } float gguf_get_val_f32(const struct gguf_context * ctx, int i) { + GGML_ASSERT(ctx->kv[i].type == GGUF_TYPE_FLOAT32); return ctx->kv[i].value.float32; } uint64_t gguf_get_val_u64(const struct gguf_context * ctx, int i) { + GGML_ASSERT(ctx->kv[i].type == GGUF_TYPE_UINT64); return ctx->kv[i].value.uint64; } int64_t gguf_get_val_i64(const struct gguf_context * ctx, int i) { + GGML_ASSERT(ctx->kv[i].type == GGUF_TYPE_INT64); return ctx->kv[i].value.int64; } double gguf_get_val_f64(const struct gguf_context * ctx, int i) { + GGML_ASSERT(ctx->kv[i].type == GGUF_TYPE_FLOAT64); return ctx->kv[i].value.float64; } bool gguf_get_val_bool(const struct gguf_context * ctx, int i) { + GGML_ASSERT(ctx->kv[i].type == GGUF_TYPE_BOOL); return ctx->kv[i].value.bool_; } -const char * gguf_get_val_str (const struct gguf_context * ctx, int i) { +const char * gguf_get_val_str(const struct gguf_context * ctx, int i) { + GGML_ASSERT(ctx->kv[i].type == GGUF_TYPE_STRING); return ctx->kv[i].value.str.data; }