Fixes a potential crash when encoding NaNs
authorJean-Marc Valin <jmvalin@jmvalin.ca>
Mon, 21 Oct 2013 21:53:48 +0000 (17:53 -0400)
committerJean-Marc Valin <jmvalin@jmvalin.ca>
Mon, 21 Oct 2013 21:58:03 +0000 (17:58 -0400)
This fixes tansig_approx() to avoid crashing when the input is NaN.
The problem could only be triggered when calling the float API with
a float build at a complexity of 7 or more (i.e. analysis called).
Since the crash was due to an out-of-bound read (typically the index
is INT_MIN), it's unlikely to be exploitable in any other way than
causing a crash.

src/mlp.c

index 73b1d31..56040bd 100644 (file)
--- a/src/mlp.c
+++ b/src/mlp.c
@@ -67,9 +67,10 @@ static inline float tansig_approx(float x)
        int i;
        float y, dy;
        float sign=1;
-    if (x>=8)
+       /* Tests are reversed to catch NaNs */
+    if (!(x<8))
         return 1;
-    if (x<=-8)
+    if (!(x>-8))
         return -1;
        if (x<0)
        {