Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/intern
diff options
context:
space:
mode:
authorBrecht Van Lommel <brechtvanlommel@gmail.com>2016-09-18 14:06:15 +0300
committerBrecht Van Lommel <brechtvanlommel@gmail.com>2016-09-18 14:38:20 +0300
commit0552d5820b70d2bc60a703af23cdea6828317ab4 (patch)
tree7d6f1b4ba3c2a9486f4fa24ae033ab4ac96dc497 /intern
parent40247ee491fbe7517a4de3920c3616c9329cde6d (diff)
Fix T49384: crash in tangent space calculation with NaN mesh vertices.
Diffstat (limited to 'intern')
-rw-r--r--intern/mikktspace/mikktspace.c11
1 files changed, 7 insertions, 4 deletions
diff --git a/intern/mikktspace/mikktspace.c b/intern/mikktspace/mikktspace.c
index 7e5861ea9ed..8d51816b132 100644
--- a/intern/mikktspace/mikktspace.c
+++ b/intern/mikktspace/mikktspace.c
@@ -579,11 +579,10 @@ static void MergeVertsFast(int piTriList_in_and_out[], STmpVert pTmpVert[], cons
{
// make bbox
int c=0, l=0, channel=0;
- float fvMin[3], fvMax[3];
+ float fvMin[3] = {INFINITY, INFINITY, INFINITY};
+ float fvMax[3] = {-INFINITY, -INFINITY, -INFINITY};
float dx=0, dy=0, dz=0, fSep=0;
- for (c=0; c<3; c++)
- { fvMin[c]=pTmpVert[iL_in].vert[c]; fvMax[c]=fvMin[c]; }
- for (l=(iL_in+1); l<=iR_in; l++)
+ for (l=iL_in; l<=iR_in; l++)
for (c=0; c<3; c++)
if (fvMin[c]>pTmpVert[l].vert[c]) fvMin[c]=pTmpVert[l].vert[c];
else if (fvMax[c]<pTmpVert[l].vert[c]) fvMax[c]=pTmpVert[l].vert[c];
@@ -598,6 +597,10 @@ static void MergeVertsFast(int piTriList_in_and_out[], STmpVert pTmpVert[], cons
fSep = 0.5f*(fvMax[channel]+fvMin[channel]);
+ // stop if all vertices are NaNs
+ if (!isfinite(fSep))
+ return;
+
// terminate recursion when the separation/average value
// is no longer strictly between fMin and fMax values.
if (fSep>=fvMax[channel] || fSep<=fvMin[channel])