diff --git a/src/libespeak-ng/encoding.c b/src/libespeak-ng/encoding.c index 43af80d4..a9f19d89 100644 --- a/src/libespeak-ng/encoding.c +++ b/src/libespeak-ng/encoding.c @@ -803,6 +803,8 @@ text_decoder_getc(espeak_ng_TEXT_DECODER *decoder) uint32_t text_decoder_peekc(espeak_ng_TEXT_DECODER *decoder) { + if (decoder->current == decoder->end) return 0; + const uint8_t *current = decoder->current; uint32_t c = decoder->get(decoder); decoder->current = current; diff --git a/tests/encoding.c b/tests/encoding.c index d43d1058..c8810629 100644 --- a/tests/encoding.c +++ b/tests/encoding.c @@ -866,6 +866,10 @@ test_peekc() assert(text_decoder_getc(decoder) == 'd'); assert(text_decoder_eof(decoder) == 1); + // Calling peekc past the end of the buffer. + assert(text_decoder_peekc(decoder) == '\0'); + assert(text_decoder_eof(decoder) == 1); + destroy_text_decoder(decoder); }