int64_t n_tensors = 0;
if (ok && gr.read(ctx->version)) {
+ /*
+ * bit layout is different when reading non-native endian models.
+ * assuming that the GGUF version is 3, the non-native endian model
+ * would read it as 0x30000000. we can use the AND operation against
+ * the last 4 hexadecimal digits to check if the model is the same
+ * endianness as the host system.
+ */
+ if ((ctx->version & 0x0000FFFF) == 0x00000000) {
+ GGML_LOG_ERROR("%s: failed to load model: this GGUF file version %" PRIu32 " is extremely large, is there a mismatch between the host and model endianness?\n", __func__, ctx->version);
+ gguf_free(ctx);
+ return nullptr;
+ }
+
+ GGML_ASSERT(ctx->version > 0 && ctx->version <= 65535);
if (ctx->version == 1) {
GGML_LOG_ERROR("%s: GGUFv1 is no longer supported, please use a more up-to-date version\n", __func__);
ok = false;