@@ -59,6 +59,8 @@ static const int16_t seg_uend[8] = {
59
59
static int16_t
60
60
search (int16_t val , const int16_t * table , int size )
61
61
{
62
+ assert (0 <= size );
63
+ assert (size < INT16_MAX );
62
64
int i ;
63
65
64
66
for (i = 0 ; i < size ; i ++ ) {
@@ -170,6 +172,7 @@ st_14linear2ulaw(int16_t pcm_val) /* 2's complement (14-bit range) */
170
172
if (seg >= 8 ) /* out of range, return maximum value. */
171
173
return (unsigned char ) (0x7F ^ mask );
172
174
else {
175
+ assert (seg >= 0 );
173
176
uval = (unsigned char ) (seg << 4 ) | ((pcm_val >> (seg + 1 )) & 0xF );
174
177
return (uval ^ mask );
175
178
}
@@ -300,13 +303,13 @@ static const int stepsizeTable[89] = {
300
303
#ifdef WORDS_BIGENDIAN
301
304
#define GETINT24 (cp , i ) ( \
302
305
((unsigned char *)(cp) + (i))[2] + \
303
- (((unsigned char *)(cp) + (i))[1] << 8) + \
304
- (((signed char *)(cp) + (i))[0] << 16) )
306
+ (((unsigned char *)(cp) + (i))[1] * (1 << 8)) + \
307
+ (((signed char *)(cp) + (i))[0] * (1 << 16) ) )
305
308
#else
306
309
#define GETINT24 (cp , i ) ( \
307
310
((unsigned char *)(cp) + (i))[0] + \
308
- (((unsigned char *)(cp) + (i))[1] << 8) + \
309
- (((signed char *)(cp) + (i))[2] << 16) )
311
+ (((unsigned char *)(cp) + (i))[1] * (1 << 8)) + \
312
+ (((signed char *)(cp) + (i))[2] * (1 << 16) ) )
310
313
#endif
311
314
312
315
@@ -347,10 +350,10 @@ static const int stepsizeTable[89] = {
347
350
} while(0)
348
351
349
352
350
- #define GETSAMPLE32 (size , cp , i ) ( \
351
- (size == 1) ? (int)GETINT8((cp), (i)) << 24 : \
352
- (size == 2) ? (int)GETINT16((cp), (i)) << 16 : \
353
- (size == 3) ? (int)GETINT24((cp), (i)) << 8 : \
353
+ #define GETSAMPLE32 (size , cp , i ) ( \
354
+ (size == 1) ? (int)GETINT8((cp), (i)) * (1 << 24) : \
355
+ (size == 2) ? (int)GETINT16((cp), (i)) * (1 << 16) : \
356
+ (size == 3) ? (int)GETINT24((cp), (i)) * (1 << 8) : \
354
357
(int)GETINT32((cp), (i)))
355
358
356
359
#define SETSAMPLE32 (size , cp , i , val ) do { \
@@ -1558,7 +1561,7 @@ audioop_ulaw2lin_impl(PyObject *module, Py_buffer *fragment, int width)
1558
1561
1559
1562
cp = fragment -> buf ;
1560
1563
for (i = 0 ; i < fragment -> len * width ; i += width ) {
1561
- int val = st_ulaw2linear16 (* cp ++ ) << 16 ;
1564
+ int val = st_ulaw2linear16 (* cp ++ ) * ( 1 << 16 ) ;
1562
1565
SETSAMPLE32 (width , ncp , i , val );
1563
1566
}
1564
1567
return rv ;
@@ -1632,7 +1635,7 @@ audioop_alaw2lin_impl(PyObject *module, Py_buffer *fragment, int width)
1632
1635
cp = fragment -> buf ;
1633
1636
1634
1637
for (i = 0 ; i < fragment -> len * width ; i += width ) {
1635
- val = st_alaw2linear16 (* cp ++ ) << 16 ;
1638
+ val = st_alaw2linear16 (* cp ++ ) * ( 1 << 16 ) ;
1636
1639
SETSAMPLE32 (width , ncp , i , val );
1637
1640
}
1638
1641
return rv ;
@@ -1757,7 +1760,7 @@ audioop_lin2adpcm_impl(PyObject *module, Py_buffer *fragment, int width,
1757
1760
1758
1761
/* Step 6 - Output value */
1759
1762
if ( bufferstep ) {
1760
- outputbuffer = (delta << 4 ) & 0xf0 ;
1763
+ outputbuffer = (delta * ( 1 << 4 ) ) & 0xf0 ;
1761
1764
} else {
1762
1765
* ncp ++ = (delta & 0x0f ) | outputbuffer ;
1763
1766
}
@@ -1875,7 +1878,7 @@ audioop_adpcm2lin_impl(PyObject *module, Py_buffer *fragment, int width,
1875
1878
step = stepsizeTable [index ];
1876
1879
1877
1880
/* Step 6 - Output value */
1878
- SETSAMPLE32 (width , ncp , i , valpred << 16 );
1881
+ SETSAMPLE32 (width , ncp , i , valpred * ( 1 << 16 ) );
1879
1882
}
1880
1883
1881
1884
rv = Py_BuildValue ("(O(ii))" , str , valpred , index );
0 commit comments