Sophie

Sophie

distrib > Mageia > 6 > armv7hl > media > core-updates-src > by-pkgid > 4e37cc30f379d8d90ee6796391c7a5e8 > files > 8

libsndfile-1.0.28-3.4.mga6.src.rpm

diff --git a/src/ulaw.c b/src/ulaw.c
index e50b4cb59210..a884efbcfd7a 100644
--- a/src/ulaw.c
+++ b/src/ulaw.c
@@ -837,20 +837,40 @@ i2ulaw_array (const int *ptr, int count, unsigned char *buffer)
 static inline void
 f2ulaw_array (const float *ptr, int count, unsigned char *buffer, float normfact)
 {	while (--count >= 0)
-	{	if (ptr [count] >= 0)
-			buffer [count] = ulaw_encode [lrintf (normfact * ptr [count])] ;
-		else
-			buffer [count] = 0x7F & ulaw_encode [- lrintf (normfact * ptr [count])] ;
+	{	int idx;
+		if (isnan (ptr [count])) {
+			buffer [count] = ulaw_encode [0];
+		} else if (ptr [count] >= 0) {
+			idx = lrint (normfact * ptr [count]);
+			if (idx > 8192)
+				idx = 8192;
+			buffer [count] = ulaw_encode [idx] ;
+		} else {
+			idx = -lrint (normfact * ptr [count]) ;
+			if (idx > 8192)
+				idx = 8192;
+			buffer [count] = 0x7F & ulaw_encode [idx] ;
+			}
 		} ;
 } /* f2ulaw_array */
 
 static inline void
 d2ulaw_array (const double *ptr, int count, unsigned char *buffer, double normfact)
 {	while (--count >= 0)
-	{	if (ptr [count] >= 0)
-			buffer [count] = ulaw_encode [lrint (normfact * ptr [count])] ;
-		else
-			buffer [count] = 0x7F & ulaw_encode [- lrint (normfact * ptr [count])] ;
+	{	int idx;
+		if (isnan (ptr [count])) {
+			buffer [count] = ulaw_encode [0];
+		} else if (ptr [count] >= 0) {
+			idx = lrint (normfact * ptr [count]);
+			if (idx > 8192)
+				idx = 8192;
+			buffer [count] = ulaw_encode [idx] ;
+		} else {
+			idx = -lrint (normfact * ptr [count]) ;
+			if (idx > 8192)
+				idx = 8192;
+			buffer [count] = 0x7F & ulaw_encode [idx] ;
+			}
 		} ;
 } /* d2ulaw_array */