[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [58660] trunk/blender/source/blender: fix for reading outside allocated memory when switching to the 3D view.

Campbell Barton ideasman42 at gmail.com
Sat Jul 27 12:32:27 CEST 2013


Revision: 58660
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=58660
Author:   campbellbarton
Date:     2013-07-27 10:32:27 +0000 (Sat, 27 Jul 2013)
Log Message:
-----------
fix for reading outside allocated memory when switching to the 3D view.

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/BKE_context.h
    trunk/blender/source/blender/blenkernel/intern/context.c
    trunk/blender/source/blender/editors/space_view3d/space_view3d.c

Modified: trunk/blender/source/blender/blenkernel/BKE_context.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_context.h	2013-07-27 09:38:34 UTC (rev 58659)
+++ trunk/blender/source/blender/blenkernel/BKE_context.h	2013-07-27 10:32:27 UTC (rev 58660)
@@ -200,8 +200,8 @@
 void CTX_data_type_set(struct bContextDataResult *result, short type);
 short CTX_data_type_get(struct bContextDataResult *result);
 
-int CTX_data_equals(const char *member, const char *str);
-int CTX_data_dir(const char *member);
+bool CTX_data_equals(const char *member, const char *str);
+bool CTX_data_dir(const char *member);
 
 #if 0
 void CTX_data_pointer_set(bContextDataResult *result, void *data);

Modified: trunk/blender/source/blender/blenkernel/intern/context.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/context.c	2013-07-27 09:38:34 UTC (rev 58659)
+++ trunk/blender/source/blender/blenkernel/intern/context.c	2013-07-27 10:32:27 UTC (rev 58660)
@@ -531,12 +531,12 @@
 	return CTX_data_dir_get_ex(C, TRUE, FALSE, FALSE);
 }
 
-int CTX_data_equals(const char *member, const char *str)
+bool CTX_data_equals(const char *member, const char *str)
 {
 	return (strcmp(member, str) == 0);
 }
 
-int CTX_data_dir(const char *member)
+bool CTX_data_dir(const char *member)
 {
 	return member[0] == '\0';
 }

Modified: trunk/blender/source/blender/editors/space_view3d/space_view3d.c
===================================================================
--- trunk/blender/source/blender/editors/space_view3d/space_view3d.c	2013-07-27 09:38:34 UTC (rev 58659)
+++ trunk/blender/source/blender/editors/space_view3d/space_view3d.c	2013-07-27 10:32:27 UTC (rev 58660)
@@ -1141,17 +1141,17 @@
 
 static int view3d_context(const bContext *C, const char *member, bContextDataResult *result)
 {
-	View3D *v3d = CTX_wm_view3d(C);
-	Scene *scene = CTX_data_scene(C);
-	Base *base;
 	/* fallback to the scene layer, allows duplicate and other object operators to run outside the 3d view */
-	unsigned int lay = v3d ? v3d->lay : scene->lay;
 
 	if (CTX_data_dir(member)) {
 		CTX_data_dir_set(result, view3d_context_dir);
 	}
 	else if (CTX_data_equals(member, "selected_objects") || CTX_data_equals(member, "selected_bases")) {
-		int selected_objects = CTX_data_equals(member, "selected_objects");
+		View3D *v3d = CTX_wm_view3d(C);
+		Scene *scene = CTX_data_scene(C);
+		const unsigned int lay = v3d ? v3d->lay : scene->lay;
+		Base *base;
+		const bool selected_objects = CTX_data_equals(member, "selected_objects");
 
 		for (base = scene->base.first; base; base = base->next) {
 			if ((base->flag & SELECT) && (base->lay & lay)) {
@@ -1167,7 +1167,11 @@
 		return 1;
 	}
 	else if (CTX_data_equals(member, "selected_editable_objects") || CTX_data_equals(member, "selected_editable_bases")) {
-		int selected_editable_objects = CTX_data_equals(member, "selected_editable_objects");
+		View3D *v3d = CTX_wm_view3d(C);
+		Scene *scene = CTX_data_scene(C);
+		const unsigned int lay = v3d ? v3d->lay : scene->lay;
+		Base *base;
+		const bool selected_editable_objects = CTX_data_equals(member, "selected_editable_objects");
 
 		for (base = scene->base.first; base; base = base->next) {
 			if ((base->flag & SELECT) && (base->lay & lay)) {
@@ -1185,7 +1189,11 @@
 		return 1;
 	}
 	else if (CTX_data_equals(member, "visible_objects") || CTX_data_equals(member, "visible_bases")) {
-		int visible_objects = CTX_data_equals(member, "visible_objects");
+		View3D *v3d = CTX_wm_view3d(C);
+		Scene *scene = CTX_data_scene(C);
+		const unsigned int lay = v3d ? v3d->lay : scene->lay;
+		Base *base;
+		const bool visible_objects = CTX_data_equals(member, "visible_objects");
 
 		for (base = scene->base.first; base; base = base->next) {
 			if (base->lay & lay) {
@@ -1201,7 +1209,11 @@
 		return 1;
 	}
 	else if (CTX_data_equals(member, "selectable_objects") || CTX_data_equals(member, "selectable_bases")) {
-		int selectable_objects = CTX_data_equals(member, "selectable_objects");
+		View3D *v3d = CTX_wm_view3d(C);
+		Scene *scene = CTX_data_scene(C);
+		const unsigned int lay = v3d ? v3d->lay : scene->lay;
+		Base *base;
+		const bool selectable_objects = CTX_data_equals(member, "selectable_objects");
 
 		for (base = scene->base.first; base; base = base->next) {
 			if (base->lay & lay) {
@@ -1217,6 +1229,9 @@
 		return 1;
 	}
 	else if (CTX_data_equals(member, "active_base")) {
+		View3D *v3d = CTX_wm_view3d(C);
+		Scene *scene = CTX_data_scene(C);
+		const unsigned int lay = v3d ? v3d->lay : scene->lay;
 		if (scene->basact && (scene->basact->lay & lay)) {
 			Object *ob = scene->basact->object;
 			/* if hidden but in edit mode, we still display, can happen with animation */
@@ -1227,6 +1242,9 @@
 		return 1;
 	}
 	else if (CTX_data_equals(member, "active_object")) {
+		View3D *v3d = CTX_wm_view3d(C);
+		Scene *scene = CTX_data_scene(C);
+		const unsigned int lay = v3d ? v3d->lay : scene->lay;
 		if (scene->basact && (scene->basact->lay & lay)) {
 			Object *ob = scene->basact->object;
 			if ((ob->restrictflag & OB_RESTRICT_VIEW) == 0 || (ob->mode & OB_MODE_EDIT))




More information about the Bf-blender-cvs mailing list