[Bf-committers] Small patch to prevent crash when using the pulldown menu

Matt Ebb bf-committers@blender.org
Sun, 11 May 2003 17:50:38 +1000


This is a multi-part message in MIME format.

------=_NextPart_000_004E_01C317E5.D5414500
Content-Type: text/plain;
	charset="iso-8859-1"
Content-Transfer-Encoding: 7bit

I just found this bug while doing some testing. If you use the pulldown menu
options "Edit->Shear" or "Edit->Warp/Bend" while a Lamp, Camera, or Empty is
selected, Blender will crash (at least it does here on Windows XP).

This patch checks what type of object is selected first and gives an error
message rather than crashing.

Cheers,

Matt.

------=_NextPart_000_004E_01C317E5.D5414500
Content-Type: application/octet-stream;
	name="headerbuttons.c.diff"
Content-Transfer-Encoding: quoted-printable
Content-Disposition: attachment;
	filename="headerbuttons.c.diff"

--- =
/cygdrive/c/blender/src/bf-blender/blender/source/blender/src/headerbutto=
ns.c	2003-05-11 17:41:00.000000000 +1000=0A=
+++ ./headerbuttons.c	2003-05-11 17:43:26.000000000 +1000=0A=
@@ -2709,6 +2709,13 @@=0A=
=20
 static void do_info_editmenu(void *arg, int event)
 {
+	/* needed to check for valid selected objects */
+	Base *base;
+	Object *ob;
+
+	base=3D BASACT;
+	ob=3D base->object;
+
 	switch(event) {
 	=09
 	case 0:
@@ -2763,32 +2770,47 @@=0A=
 		break;
 	case 9:
 		/* Shear */
-		if (!G.obedit) {
+	=09
+		/* check that a valid object is selected to prevent crash */
+		if ((ob->type=3D=3DOB_LAMP) || (ob->type=3D=3DOB_EMPTY) || =
(ob->type=3D=3DOB_FONT) || (ob->type=3D=3DOB_CAMERA)) {
+			error("Only editable 3D objects can be sheared");
+		}
+		else {
+			if (!G.obedit) {
 			enter_editmode();
 			/* ### put these into a deselectall_gen() */
 			if(G.obedit->type=3D=3DOB_MESH) deselectall_mesh();
 			else if ELEM(G.obedit->type, OB_CURVE, OB_SURF) deselectall_nurb();
 			else if(G.obedit->type=3D=3DOB_MBALL) deselectall_mball();
 			else if(G.obedit->type=3D=3DOB_LATTICE) deselectall_Latt();
+			else if(G.obedit->type=3D=3DOB_ARMATURE) deselectall_armature();
 			/* ### */
-		}=09
-		if(select_area(SPACE_VIEW3D)) {
-			transform('S');
+			}
+			if(select_area(SPACE_VIEW3D)) {
+				transform('S');
+			}
 		}
 		break;
 	case 10:
 		/* Warp/Bend */
-		if (!G.obedit) {
+		/* check that a valid object is selected to prevent crash */
+		if ((ob->type=3D=3DOB_LAMP) || (ob->type=3D=3DOB_EMPTY) || =
(ob->type=3D=3DOB_FONT) || (ob->type=3D=3DOB_CAMERA)) {
+			error("Only editable 3D objects can be warped");
+		}
+		else {
+			if (!G.obedit) {
 			enter_editmode();
 			/* ### put these into a deselectall_gen() */
 			if(G.obedit->type=3D=3DOB_MESH) deselectall_mesh();
 			else if ELEM(G.obedit->type, OB_CURVE, OB_SURF) deselectall_nurb();
 			else if(G.obedit->type=3D=3DOB_MBALL) deselectall_mball();
 			else if(G.obedit->type=3D=3DOB_LATTICE) deselectall_Latt();
+			else if(G.obedit->type=3D=3DOB_ARMATURE) deselectall_armature();
 			/* ### */
-		}=09
-		if(select_area(SPACE_VIEW3D)) {
-			transform('w');
+			}
+			if(select_area(SPACE_VIEW3D)) {
+				transform('w');
+			}
 		}
 		break;
 	case 11:

------=_NextPart_000_004E_01C317E5.D5414500--