From 22ae5edf142ec14962960b9f4e482f86abaeed9e Mon Sep 17 00:00:00 2001 From: ReinforcedKnowledge Date: Sat, 16 Dec 2023 19:58:36 +0100 Subject: [PATCH 1/2] Add error when a tensor's name in gguf is long --- src/ggml.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/ggml.c b/src/ggml.c index 29e18a24c..5b2f9764f 100644 --- a/src/ggml.c +++ b/src/ggml.c @@ -18640,6 +18640,13 @@ struct gguf_context * gguf_init_from_file(const char * fname, struct gguf_init_p } ok = ok && gguf_fread_str(file, &info->name, &offset); + if (strlen(info->name.data) > GGML_MAX_NAME - 1) { + fprintf(stderr, "%s: tensor name '%s' is too long (maximum length: %d characters)\n", __func__, info->name.data, GGML_MAX_NAME - 1); + fclose(file); + gguf_free(ctx); + return NULL; + } + ok = ok && gguf_fread_el (file, &info->n_dims, sizeof(info->n_dims), &offset); for (uint32_t j = 0; j < info->n_dims; ++j) { ok = ok && gguf_fread_el(file, &info->ne[j], sizeof(info->ne[j]), &offset); From 34dc1bff013b04abea8dcb816d95ee82f2cacd56 Mon Sep 17 00:00:00 2001 From: ReinforcedKnowledge <96926916+ReinforcedKnowledge@users.noreply.github.com> Date: Tue, 19 Dec 2023 17:25:01 +0100 Subject: [PATCH 2/2] Reuse code logic in the error Co-authored-by: Georgi Gerganov --- src/ggml.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/ggml.c b/src/ggml.c index 5b2f9764f..388bb3df6 100644 --- a/src/ggml.c +++ b/src/ggml.c @@ -18639,14 +18639,12 @@ struct gguf_context * gguf_init_from_file(const char * fname, struct gguf_init_p info->ne[j] = 1; } - ok = ok && gguf_fread_str(file, &info->name, &offset); if (strlen(info->name.data) > GGML_MAX_NAME - 1) { fprintf(stderr, "%s: tensor name '%s' is too long (maximum length: %d characters)\n", __func__, info->name.data, GGML_MAX_NAME - 1); - fclose(file); - gguf_free(ctx); - return NULL; + ok = false; } + ok = ok && gguf_fread_str(file, &info->name, &offset); ok = ok && gguf_fread_el (file, &info->n_dims, sizeof(info->n_dims), &offset); for (uint32_t j = 0; j < info->n_dims; ++j) { ok = ok && gguf_fread_el(file, &info->ne[j], sizeof(info->ne[j]), &offset);