summaryrefslogtreecommitdiff
path: root/apps
diff options
context:
space:
mode:
authorWilliam Wilgus <me.theuser@yahoo.com>2019-10-14 21:42:19 -0500
committerWilliam Wilgus <me.theuser@yahoo.com>2020-04-17 07:30:23 +0200
commitc93666d08e3ade6ee2c63d03180bac6d43536fff (patch)
tree224beaf1debd650bb8bceaeac3dcc5624fabb542 /apps
parent4382d3f5ed1534b2f79d72cb7cf11dec9e1758c7 (diff)
downloadrockbox-c93666d08e3ade6ee2c63d03180bac6d43536fff.tar.gz
rockbox-c93666d08e3ade6ee2c63d03180bac6d43536fff.zip
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
Diffstat (limited to 'apps')
-rw-r--r--apps/talk.c9
-rw-r--r--apps/talk.h2
2 files changed, 9 insertions, 2 deletions
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)
613 if (voicefile.table == sizeof(struct voicefile_header)) 613 if (voicefile.table == sizeof(struct voicefile_header))
614 { 614 {
615 if (voicefile.version == VOICE_VERSION && 615 if (voicefile.version == VOICE_VERSION &&
616 voicefile.target_id == TARGET_ID) 616 voicefile.target_id == TARGET_ID &&
617 voicefile.id1_max == TALK_FINAL_ID &&
618 voicefile.id2_max == TALK_FINAL_ID_VOICEONLY - VOICEONLY_DELIMITER)
617 { 619 {
618 if (load_index_table(fd, &voicefile)) 620 if (load_index_table(fd, &voicefile))
619 return true; 621 return true;
@@ -621,6 +623,11 @@ static bool load_voicefile_index(int fd)
621 } 623 }
622 624
623 logf("Incompatible voice file"); 625 logf("Incompatible voice file");
626 logf("version %d expected %d", voicefile.version, VOICE_VERSION);
627 logf("target_id %d expected %d", voicefile.target_id, TARGET_ID);
628 logf("id1_max %d expected %d", voicefile.id1_max, TALK_FINAL_ID);
629 logf("id2_max %d expected %d",
630 voicefile.id2_max, TALK_FINAL_ID_VOICEONLY - VOICEONLY_DELIMITER);
624 return false; 631 return false;
625} 632}
626 633
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);
134 134
135/* This (otherwise invalid) ID signals the end of the array. */ 135/* This (otherwise invalid) ID signals the end of the array. */
136#define TALK_FINAL_ID LANG_LAST_INDEX_IN_ARRAY 136#define TALK_FINAL_ID LANG_LAST_INDEX_IN_ARRAY
137 137#define TALK_FINAL_ID_VOICEONLY LANG_LAST_VOICEONLY_INDEX_IN_ARRAY
138/* Enqueue next utterance even if enqueue parameter is false: don't 138/* Enqueue next utterance even if enqueue parameter is false: don't
139 interrupt the current utterance. */ 139 interrupt the current utterance. */
140void talk_force_enqueue_next(void); 140void talk_force_enqueue_next(void);