diff --git a/spine-c/spine-c/src/spine/PathConstraint.c b/spine-c/spine-c/src/spine/PathConstraint.c index 525ee397e..0347e9029 100644 --- a/spine-c/spine-c/src/spine/PathConstraint.c +++ b/spine-c/spine-c/src/spine/PathConstraint.c @@ -198,12 +198,17 @@ static void _addAfterPosition (float p, float* temp, int i, float* out, int o) { out[o + 2] = r; } +static int _isNan(float value) { + float _nan = (float)0.0/(float)0.0; + 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) p = 0.0001f; + if (p == 0 || _isNan(p)) p = 0.0001f; tt = p * p, ttt = tt * p, u = 1 - p, uu = u * u, uuu = uu * u; ut = u * p, ut3 = ut * 3, uut3 = u * ut3, utt3 = ut3 * p; x = x1 * uuu + cx1 * uut3 + cx2 * utt3 + x2 * ttt, y = y1 * uuu + cy1 * uut3 + cy2 * utt3 + y2 * ttt;