Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAleksey Lim <alsroot@member.fsf.org>2009-03-11 02:37:06 (GMT)
committer Aleksey Lim <alsroot@member.fsf.org>2009-03-11 02:37:06 (GMT)
commit114a5948b9f7c292734da0a20c454c3cfd1e7fb9 (patch)
tree4a2e82dbc59ceb9f5d2bc531df8ff2c3773040e8
parent0c6085d1539707f5a49f1d5ea3226f97c5c153ca (diff)
Prevent segfaults in text_position correction code
-rw-r--r--src/espeak.c26
1 files changed, 17 insertions, 9 deletions
diff --git a/src/espeak.c b/src/espeak.c
index 9b128aa..a492192 100644
--- a/src/espeak.c
+++ b/src/espeak.c
@@ -441,6 +441,12 @@ synth_cb(short *data, int numsamples, espeak_EVENT *events)
for (i = events; i->type != espeakEVENT_LIST_TERMINATED; ++i)
{
+ GST_DEBUG("type=%d text_position=%d length=%d "
+ "audio_position=%d sample=%d",
+ i->type, i->text_position, i->length,
+ i->audio_position, i->sample*2);
+
+
if (i->type == espeakEVENT_WORD)
--i->text_position;
else if (i->type == espeakEVENT_MARK)
@@ -448,11 +454,16 @@ synth_cb(short *data, int numsamples, espeak_EVENT *events)
// suppress failed text_position values
if (spin->last_mark)
{
- goffset pos = strstr(spin->context->text +
- spin->last_mark, "/>") - spin->context->text + 2;
- if (i->text_position <= spin->last_mark ||
- pos > i->text_position)
- i->text_position = pos;
+ const gchar *eom = strstr(spin->context->text +
+ spin->last_mark, "/>");
+ if (eom)
+ {
+ goffset pos = eom - spin->context->text + 2;
+
+ if (i->text_position <= spin->last_mark ||
+ pos > i->text_position)
+ i->text_position = pos;
+ }
}
spin->last_mark = i->text_position;
@@ -473,10 +484,7 @@ synth_cb(short *data, int numsamples, espeak_EVENT *events)
}
}
- GST_DEBUG("type=%d text_position=%d length=%d "
- "audio_position=%d sample=%d",
- i->type, i->text_position, i->length,
- i->audio_position, i->sample*2);
+ GST_DEBUG("text_position=%d", i->text_position);
g_array_append_val(spin->events, *i);
}