[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [33450] trunk/blender/source/blender/ blenkernel/intern/curve.c: Bugfix #25026

Ton Roosendaal ton at blender.org
Fri Dec 3 18:31:35 CET 2010


Revision: 33450
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=33450
Author:   ton
Date:     2010-12-03 18:31:34 +0100 (Fri, 03 Dec 2010)

Log Message:
-----------
Bugfix #25026

Nurbs edit: 'switch order' crashed when order was higher than amount of 
points.

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/intern/curve.c

Modified: trunk/blender/source/blender/blenkernel/intern/curve.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/curve.c	2010-12-03 17:28:41 UTC (rev 33449)
+++ trunk/blender/source/blender/blenkernel/intern/curve.c	2010-12-03 17:31:34 UTC (rev 33450)
@@ -2906,38 +2906,41 @@
 			bp2--;
 		}
 		if(nu->type == CU_NURBS) {
-			/* inverse knots */
-			a= KNOTSU(nu);
-			fp1= nu->knotsu;
-			fp2= fp1+(a-1);
-			a/= 2;
-			while(fp1!=fp2 && a>0) {
-				SWAP(float, *fp1, *fp2);
-				a--;
-				fp1++; 
-				fp2--;
-			}
-			/* and make in increasing order again */
-			a= KNOTSU(nu);
-			fp1= nu->knotsu;
-			fp2=tempf= MEM_mallocN(sizeof(float)*a, "switchdirect");
-			while(a--) {
-				fp2[0]= fabs(fp1[1]-fp1[0]);
+			/* no knots for too short paths */
+			if(nu->knotsu) {
+				/* inverse knots */
+				a= KNOTSU(nu);
+				fp1= nu->knotsu;
+				fp2= fp1+(a-1);
+				a/= 2;
+				while(fp1!=fp2 && a>0) {
+					SWAP(float, *fp1, *fp2);
+					a--;
+					fp1++; 
+					fp2--;
+				}
+				/* and make in increasing order again */
+				a= KNOTSU(nu);
+				fp1= nu->knotsu;
+				fp2=tempf= MEM_mallocN(sizeof(float)*a, "switchdirect");
+				while(a--) {
+					fp2[0]= fabs(fp1[1]-fp1[0]);
+					fp1++;
+					fp2++;
+				}
+		
+				a= KNOTSU(nu)-1;
+				fp1= nu->knotsu;
+				fp2= tempf;
+				fp1[0]= 0.0;
 				fp1++;
-				fp2++;
+				while(a--) {
+					fp1[0]= fp1[-1]+fp2[0];
+					fp1++;
+					fp2++;
+				}
+				MEM_freeN(tempf);
 			}
-	
-			a= KNOTSU(nu)-1;
-			fp1= nu->knotsu;
-			fp2= tempf;
-			fp1[0]= 0.0;
-			fp1++;
-			while(a--) {
-				fp1[0]= fp1[-1]+fp2[0];
-				fp1++;
-				fp2++;
-			}
-			MEM_freeN(tempf);
 		}
 	}
 	else {





More information about the Bf-blender-cvs mailing list