summaryrefslogtreecommitdiffstats
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
parent4382d3f5ed1534b2f79d72cb7cf11dec9e1758c7 (diff)
downloadrockbox-c93666d.tar.gz
rockbox-c93666d.tar.bz2
rockbox-c93666d.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
-rw-r--r--apps/talk.c9
-rw-r--r--apps/talk.h2
-rwxr-xr-xtools/genlang1
3 files changed, 10 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)
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);
diff --git a/tools/genlang b/tools/genlang
index d0b0f145ef..863a104185 100755
--- a/tools/genlang
+++ b/tools/genlang
@@ -718,6 +718,7 @@ MOO
# Output end of lang_enum.h
print HFILE_CORE <<MOO
+ LANG_LAST_VOICEONLY_INDEX_IN_ARRAY /* this is not a string, this is a marker */
};
/* end of generated enum list */
#endif /* _LANG_ENUM_H_ */