From 297fc2f4387a014d20f249bd0423cf5bb6e2c3d2 Mon Sep 17 00:00:00 2001 From: Alexander Akhundzhanov Date: Wed, 26 Aug 2020 17:23:01 +0300 Subject: [PATCH] [spine-c] Fixed floating point exception - division by zero (#1706) --- spine-c/spine-c/include/spine/extension.h | 2 ++ spine-c/spine-c/src/spine/PathConstraint.c | 8 +------- 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/spine-c/spine-c/include/spine/extension.h b/spine-c/spine-c/include/spine/extension.h index 67221f0b8..71f38fbba 100644 --- a/spine-c/spine-c/include/spine/extension.h +++ b/spine-c/spine-c/include/spine/extension.h @@ -110,6 +110,7 @@ #define SQRT(A) sqrtf(A) #define ACOS(A) acosf(A) #define POW(A,B) pow(A, B) +#define ISNAN(A) (int)isnan(A) #else #define FMOD(A,B) (float)fmod(A, B) #define ATAN2(A,B) (float)atan2(A, B) @@ -118,6 +119,7 @@ #define SQRT(A) (float)sqrt(A) #define ACOS(A) (float)acos(A) #define POW(A,B) (float)pow(A, B) +#define ISNAN(A) (int)isnan(A) #endif #define SIN_DEG(A) SIN((A) * DEG_RAD) diff --git a/spine-c/spine-c/src/spine/PathConstraint.c b/spine-c/spine-c/src/spine/PathConstraint.c index 672877973..9f19c998a 100644 --- a/spine-c/spine-c/src/spine/PathConstraint.c +++ b/spine-c/spine-c/src/spine/PathConstraint.c @@ -212,18 +212,12 @@ static void _addAfterPosition (float p, float* temp, int i, float* out, int o) { out[o + 2] = r; } -/* Need to pass 0 as an argument, so VC++ doesn't error with C2124 */ -static int _isNan(float value, float zero) { - float _nan = (float)0.0 / zero; - return 0 == memcmp((void*)&value, (void*)&_nan, sizeof(value)); -} - static void _addCurvePosition (float p, float x1, float y1, float cx1, float cy1, float cx2, float cy2, float x2, float y2, float* out, int o, int/*bool*/tangents) { float tt, ttt, u, uu, uuu; float ut, ut3, uut3, utt3; float x, y; - if (p == 0 || _isNan(p, 0)) { + if (p == 0 || ISNAN(p)) { out[o] = x1; out[o + 1] = y1; out[o + 2] = ATAN2(cy1 - y1, cx1 - x1);