From c93666d08e3ade6ee2c63d03180bac6d43536fff Mon Sep 17 00:00:00 2001 From: William Wilgus Date: Mon, 14 Oct 2019 21:42:19 -0500 Subject: talk.h make voice files check for proper number of entries on load In addition to version and target also check id1_max & id2_max for proper length before allowing voice file to be loaded Change-Id: I36016059d07781b0bb43dd9873bbb6e565298d76 --- apps/talk.c | 9 ++++++++- apps/talk.h | 2 +- 2 files changed, 9 insertions(+), 2 deletions(-) (limited to 'apps') diff --git a/apps/talk.c b/apps/talk.c index fb16e80417..9c53bb6da5 100644 --- a/apps/talk.c +++ b/apps/talk.c @@ -613,7 +613,9 @@ static bool load_voicefile_index(int fd) if (voicefile.table == sizeof(struct voicefile_header)) { if (voicefile.version == VOICE_VERSION && - voicefile.target_id == TARGET_ID) + voicefile.target_id == TARGET_ID && + voicefile.id1_max == TALK_FINAL_ID && + voicefile.id2_max == TALK_FINAL_ID_VOICEONLY - VOICEONLY_DELIMITER) { if (load_index_table(fd, &voicefile)) return true; @@ -621,6 +623,11 @@ static bool load_voicefile_index(int fd) } logf("Incompatible voice file"); + logf("version %d expected %d", voicefile.version, VOICE_VERSION); + logf("target_id %d expected %d", voicefile.target_id, TARGET_ID); + logf("id1_max %d expected %d", voicefile.id1_max, TALK_FINAL_ID); + logf("id2_max %d expected %d", + voicefile.id2_max, TALK_FINAL_ID_VOICEONLY - VOICEONLY_DELIMITER); return false; } diff --git a/apps/talk.h b/apps/talk.h index e8a8645326..a643cd4f89 100644 --- a/apps/talk.h +++ b/apps/talk.h @@ -134,7 +134,7 @@ int talk_time_intervals(long time, int unit_idx, bool enqueue); /* This (otherwise invalid) ID signals the end of the array. */ #define TALK_FINAL_ID LANG_LAST_INDEX_IN_ARRAY - +#define TALK_FINAL_ID_VOICEONLY LANG_LAST_VOICEONLY_INDEX_IN_ARRAY /* Enqueue next utterance even if enqueue parameter is false: don't interrupt the current utterance. */ void talk_force_enqueue_next(void); -- cgit v1.2.3