From dea7d441f2355a0cd7f263cdc91f231d2895b12c Mon Sep 17 00:00:00 2001 From: "Reece H. Dunn" Date: Thu, 7 Jan 2016 20:46:31 +0000 Subject: [PATCH] Avoid passing 0 to realloc in ReadPhondataManifest(compiledata.c). [clang scan-build] --- src/include/espeak-ng/espeak_ng.h | 1 + src/libespeak-ng/compiledata.c | 5 +++++ src/libespeak-ng/error.c | 3 +++ 3 files changed, 9 insertions(+) diff --git a/src/include/espeak-ng/espeak_ng.h b/src/include/espeak-ng/espeak_ng.h index 149001ac..10e66f32 100644 --- a/src/include/espeak-ng/espeak_ng.h +++ b/src/include/espeak-ng/espeak_ng.h @@ -50,6 +50,7 @@ typedef enum { ENS_NOT_SUPPORTED = 0x10000AFF, ENS_UNSUPPORTED_PHON_FORMAT = 0x10000BFF, ENS_NO_SPECT_FRAMES = 0x10000CFF, + ENS_EMPTY_PHONEME_MANIFEST = 0x10000DFF, } espeak_ng_STATUS; typedef enum { diff --git a/src/libespeak-ng/compiledata.c b/src/libespeak-ng/compiledata.c index e8edb24b..1de8514e 100644 --- a/src/libespeak-ng/compiledata.c +++ b/src/libespeak-ng/compiledata.c @@ -409,6 +409,11 @@ static espeak_ng_STATUS ReadPhondataManifest(espeak_ng_ERROR_CONTEXT *context) free(manifest[ix].name); } + if (n_lines == 0) { + fclose(f); + return ENS_EMPTY_PHONEME_MANIFEST; + } + if ((manifest = (NAMETAB *)realloc(manifest, n_lines * sizeof(NAMETAB))) == NULL) { fclose(f); return ENOMEM; diff --git a/src/libespeak-ng/error.c b/src/libespeak-ng/error.c index 467cbac0..8a0dfae1 100644 --- a/src/libespeak-ng/error.c +++ b/src/libespeak-ng/error.c @@ -116,6 +116,9 @@ ESPEAK_NG_API void espeak_ng_GetStatusCodeMessage(espeak_ng_STATUS status, char case ENS_NO_SPECT_FRAMES: strncpy0(buffer, "The spectral file does not contain any frame data", length); break; + case ENS_EMPTY_PHONEME_MANIFEST: + strncpy0(buffer, "The phoneme manifest file does not contain any phonemes", length); + break; default: if ((status & ENS_GROUP_MASK) == ENS_GROUP_ERRNO) strerror_r(status, buffer, length);