diff --git a/common/common.cpp b/common/common.cpp index f64943f67..007864dc7 100644 --- a/common/common.cpp +++ b/common/common.cpp @@ -266,7 +266,12 @@ bool parse_kv_override(const char * data, std::vector & } else if (strncmp(sep, "str:", 4) == 0) { sep += 4; kvo.tag = LLAMA_KV_OVERRIDE_TYPE_STR; - strncpy(kvo.val_str, sep, 128); + if (strlen(sep) > 127) { + fprintf(stderr, "%s: malformed KV override '%s', value cannot exceed 127 chars\n", __func__, data); + return false; + } + strncpy(kvo.val_str, sep, 127); + kvo.val_str[127] = '\0'; } else { fprintf(stderr, "%s: invalid type for KV override '%s'\n", __func__, data); return false; diff --git a/examples/quantize/quantize.cpp b/examples/quantize/quantize.cpp index e910c1e3a..432cc2b4f 100644 --- a/examples/quantize/quantize.cpp +++ b/examples/quantize/quantize.cpp @@ -307,14 +307,16 @@ int main(int argc, char ** argv) { llama_model_kv_override kvo; std::strcpy(kvo.key, LLM_KV_QUANTIZE_IMATRIX_FILE); kvo.tag = LLAMA_KV_OVERRIDE_TYPE_STR; - strncpy(kvo.val_str, imatrix_file.c_str(), 128); + strncpy(kvo.val_str, imatrix_file.c_str(), 127); + kvo.val_str[127] = '\0'; kv_overrides.emplace_back(std::move(kvo)); } if (!imatrix_dataset.empty()) { llama_model_kv_override kvo; std::strcpy(kvo.key, LLM_KV_QUANTIZE_IMATRIX_DATASET); kvo.tag = LLAMA_KV_OVERRIDE_TYPE_STR; - strncpy(kvo.val_str, imatrix_dataset.c_str(), 128); + strncpy(kvo.val_str, imatrix_dataset.c_str(), 127); + kvo.val_str[127] = '\0'; kv_overrides.emplace_back(std::move(kvo)); }