|
@@ -1055,7 +1055,7 @@ static float float32_unpack(uint32 x)
|
|
|
uint32 sign = x & 0x80000000;
|
|
|
uint32 exp = (x & 0x7fe00000) >> 21;
|
|
|
double res = sign ? -(double)mantissa : (double)mantissa;
|
|
|
- return (float) ldexp((float)res, exp-788);
|
|
|
+ return (float) ldexp((float)res, (int)exp-788);
|
|
|
}
|
|
|
|
|
|
|
|
@@ -3379,7 +3379,7 @@ static int vorbis_decode_packet_rest(vorb *f, int *len, Mode *m, int left_start,
|
|
|
// this isn't to spec, but spec would require us to read ahead
|
|
|
// and decode the size of all current frames--could be done,
|
|
|
// but presumably it's not a commonly used feature
|
|
|
- f->current_loc = -n2; // start of first frame is positioned for discard
|
|
|
+ f->current_loc = 0u - n2; // start of first frame is positioned for discard (NB this is an intentional unsigned overflow/wrap-around)
|
|
|
// we might have to discard samples "from" the next frame too,
|
|
|
// if we're lapping a large block then a small at the start?
|
|
|
f->discard_samples_deferred = n - right_end;
|
|
@@ -3963,7 +3963,7 @@ static int start_decoder(vorb *f)
|
|
|
if (g->class_masterbooks[j] >= f->codebook_count) return error(f, VORBIS_invalid_setup);
|
|
|
}
|
|
|
for (k=0; k < 1 << g->class_subclasses[j]; ++k) {
|
|
|
- g->subclass_books[j][k] = get_bits(f,8)-1;
|
|
|
+ g->subclass_books[j][k] = (int16)get_bits(f,8)-1;
|
|
|
if (g->subclass_books[j][k] >= f->codebook_count) return error(f, VORBIS_invalid_setup);
|
|
|
}
|
|
|
}
|