From dbbebcab339c7d63d3806e8f32574bb9aad9a694 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Johannes=20G=C3=A4=C3=9Fler?= Date: Sat, 31 Aug 2024 14:35:42 +0200 Subject: [PATCH] ggml: fix ggml_graph_cpy undefined behavior (ggml/943) --- ggml/include/ggml.h | 4 ++-- ggml/src/ggml.c | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/ggml/include/ggml.h b/ggml/include/ggml.h index 09c72b095..6354fcf51 100644 --- a/ggml/include/ggml.h +++ b/ggml/include/ggml.h @@ -681,8 +681,8 @@ extern "C" { struct ggml_hash_set { size_t size; - ggml_bitset_t * used; - struct ggml_tensor ** keys; + ggml_bitset_t * used; // whether or not the keys are in use i.e. set + struct ggml_tensor ** keys; // actual tensors in the set, keys[i] is only defined if ggml_bitset_get(used, i) }; // computation graph diff --git a/ggml/src/ggml.c b/ggml/src/ggml.c index 3504e9ad3..5f106d52a 100644 --- a/ggml/src/ggml.c +++ b/ggml/src/ggml.c @@ -19130,7 +19130,8 @@ void ggml_graph_cpy(struct ggml_cgraph * src, struct ggml_cgraph * dst) { } for (size_t i = 0; i < src->visited_hash_set.size; ++i) { - if (src->visited_hash_set.keys[i]) { + // copy all hashset keys (tensors) that are in use + if (ggml_bitset_get(src->visited_hash_set.used, i)) { ggml_hash_insert(&dst->visited_hash_set, src->visited_hash_set.keys[i]); } }