1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177
|
Applied-Upstream: https://github.com/festvox/speech_tools/pull/14
--- a/include/EST_common.h
+++ b/include/EST_common.h
@@ -43,6 +43,14 @@
/* all this stuff should be common to C and C++ */
+#if defined __GNUC__
+ #define EST_WARN_UNUSED_RESULT __attribute__((warn_unused_result))
+#elif defined __clang__
+ #define EST_WARN_UNUSED_RESULT __attribute__((annotate("lo_warn_unused")))
+#else
+ #define EST_WARN_UNUSED_RESULT
+#endif
+
#ifdef __cplusplus
extern "C" {
#endif
--- a/include/EST_Token.h
+++ b/include/EST_Token.h
@@ -327,7 +327,7 @@ class EST_TokenStream{
/// peek at next token
EST_Token &peek(void);
/// Reading binary data, (don't use peek() immediately beforehand)
- int fread(void *buff,int size,int nitems);
+ int fread(void *buff,int size,int nitems) EST_WARN_UNUSED_RESULT;
//@}
/**@name stream initialization functions */
//@{
--- a/speech_class/EST_wave_io.cc
+++ b/speech_class/EST_wave_io.cc
@@ -514,7 +514,8 @@ enum EST_read_status load_wave_riff(EST_
return wrong_format;
/* We've got a riff file */
- ts.fread(&dsize,4,1);
+ /* Next 4 bytes are the file size */
+ if(ts.fread(&dsize,4,1) != 1) return misc_read_error;
/* .wav files are always little endian */
if (EST_BIG_ENDIAN) dsize = SWAPINT(dsize);
if ((ts.fread(info,sizeof(char),4) != 4) ||
@@ -527,9 +528,9 @@ enum EST_read_status load_wave_riff(EST_
(strncmp(info,"fmt ",4) != 0))
return misc_read_error; /* something else wrong */
- ts.fread(&dsize,4,1);
+ if (ts.fread(&dsize,4,1) != 1) return misc_read_error;
if (EST_BIG_ENDIAN) dsize = SWAPINT(dsize);
- ts.fread(&shortdata,2,1);
+ if (ts.fread(&shortdata,2,1) != 1) return misc_read_error;
if (EST_BIG_ENDIAN) shortdata = SWAPSHORT(shortdata);
switch (shortdata)
@@ -552,16 +553,16 @@ enum EST_read_status load_wave_riff(EST_
actual_sample_type = st_short;
/* return misc_read_error; */
}
- ts.fread(&shortdata,2,1);
+ if (ts.fread(&shortdata,2,1) != 1) return misc_read_error;
if (EST_BIG_ENDIAN) shortdata = SWAPSHORT(shortdata);
*num_channels = shortdata;
- ts.fread(sample_rate,4,1);
+ if (ts.fread(sample_rate,4,1) != 1) return misc_read_error;
if (EST_BIG_ENDIAN) *sample_rate = SWAPINT(*sample_rate);
- ts.fread(&intdata,4,1); /* average bytes per second -- ignored */
+ if (ts.fread(&intdata,4,1) != 1) return misc_read_error; /* average bytes per second -- ignored */
if (EST_BIG_ENDIAN) intdata = SWAPINT(intdata);
- ts.fread(&shortdata,2,1); /* block align ? */
+ if (ts.fread(&shortdata,2,1) != 1) return misc_read_error; /* block align ? */
if (EST_BIG_ENDIAN) shortdata = SWAPSHORT(shortdata);
- ts.fread(&shortdata,2,1);
+ if (ts.fread(&shortdata,2,1) != 1) return misc_read_error;
if (EST_BIG_ENDIAN) shortdata = SWAPSHORT(shortdata);
sample_width = (shortdata+7)/8;
@@ -578,14 +579,14 @@ enum EST_read_status load_wave_riff(EST_
}
if (strncmp(info,"data",4) == 0)
{
- ts.fread(&samps,4,1);
+ if (ts.fread(&samps,4,1) != 1) return misc_read_error;
if (EST_BIG_ENDIAN) samps = SWAPINT(samps);
samps /= (sample_width*(*num_channels));
break;
}
else if (strncmp(info,"fact",4) == 0)
{ /* some other type of chunk -- skip it */
- ts.fread(&samps,4,1);
+ if (ts.fread(&samps,4,1) != 1) return misc_read_error;
if (EST_BIG_ENDIAN) samps = SWAPINT(samps);
ts.seek(samps+ts.tell()); /* skip rest of header */
/* Hope this is the right amount */
@@ -595,7 +596,7 @@ enum EST_read_status load_wave_riff(EST_
// fprintf(stderr,"Ignoring unsupported chunk type \"%c%c%c%c\" in RIFF file\n",
// info[0],info[1],info[2],info[3]);
//return misc_read_error;
- ts.fread(&dsize,4,1);
+ if(ts.fread(&dsize,4,1) != 1) return misc_read_error;
if (EST_BIG_ENDIAN) dsize = SWAPINT(dsize);
ts.seek(dsize+ts.tell()); /* skip this chunk */
}
@@ -761,7 +762,7 @@ enum EST_read_status load_wave_aiff(EST_
return wrong_format;
/* We've got an aiff file, I hope */
- ts.fread(&dsize,4,1);
+ if (ts.fread(&dsize,4,1) != 1) return misc_read_error;
if (EST_LITTLE_ENDIAN) /* file is in different byte order */
dsize = SWAPINT(dsize);
if ((ts.fread(info,sizeof(char),4) != 4) ||
@@ -771,7 +772,7 @@ enum EST_read_status load_wave_aiff(EST_
return misc_read_error;
}
- for ( ; ts.fread(&chunk,1,sizeof(chunk)) == sizeof(chunk) ; )
+ for ( ; ts.fread(&chunk, sizeof(chunk), 1) == 1 ; )
{ /* for each chunk in the file */
if (EST_LITTLE_ENDIAN) /* file is in different byte order */
chunk.size = SWAPINT(chunk.size);
@@ -782,10 +783,13 @@ enum EST_read_status load_wave_aiff(EST_
fprintf(stderr,"AIFF chunk: bad size\n");
return misc_read_error;
}
- ts.fread(&comm_channels,1,sizeof(short));
- ts.fread(&comm_samples,1,sizeof(int));
- ts.fread(&comm_bits,1,sizeof(short));
- if (ts.fread(ieee_ext_sample_rate,1,10) != 10)
+ if (ts.fread(&comm_channels, sizeof(short), 1) != 1)
+ return misc_read_error;
+ if (ts.fread(&comm_samples, sizeof(int), 1) != 1)
+ return misc_read_error;
+ if (ts.fread(&comm_bits, sizeof(short), 1) != 1)
+ return misc_read_error;
+ if (ts.fread(ieee_ext_sample_rate, 10, 1) != 1)
{
fprintf(stderr,"AIFF chunk: eof within COMM chunk\n");
return misc_read_error;
@@ -800,7 +804,7 @@ enum EST_read_status load_wave_aiff(EST_
}
else if (strncmp(chunk.id,"SSND",4) == 0)
{
- if (ts.fread(&ssndchunk,1,sizeof(ssndchunk)) != sizeof(ssndchunk))
+ if (ts.fread(&ssndchunk, sizeof(ssndchunk), 1) != 1)
{
fprintf(stderr,"AIFF chunk: eof within SSND chunk\n");
return misc_read_error;
@@ -1138,7 +1142,8 @@ enum EST_read_status load_wave_snd(EST_T
int current_pos;
current_pos = ts.tell();
- ts.fread(&header, sizeof(Sun_au_header), 1);
+ if (ts.fread(&header, sizeof(Sun_au_header), 1) != 1)
+ return misc_read_error;
/* test for magic number */
if ((EST_LITTLE_ENDIAN) &&
@@ -1358,12 +1363,16 @@ enum EST_read_status load_wave_audlab(ES
/* Read header structures from char array */
current_pos = ts.tell();
- ts.fread(&fh, sizeof(struct audlabfh), 1);
+
+ if (ts.fread(&fh, sizeof(struct audlabfh), 1) != 1)
+ return misc_read_error;
if (strcmp(fh.file_type, "Sample") != 0)
return wrong_format;
- ts.fread(&sh, sizeof(struct audlabsh), 1);
- ts.fread(&sd, sizeof(struct audlabsd), 1);
+ if (ts.fread(&sh, sizeof(struct audlabsh), 1) != 1)
+ return misc_read_error;
+ if (ts.fread(&sd, sizeof(struct audlabsd), 1) != 1)
+ return misc_read_error;
hdr_length = sizeof(struct audlabfh) +
sizeof(struct audlabsh) +
sizeof(struct audlabsd);
|