[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [27499] trunk/blender/source/blender/ python/intern: disallow 'nan' for button input and pydriver's

Campbell Barton ideasman42 at gmail.com
Sun Mar 14 22:04:04 CET 2010


Revision: 27499
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=27499
Author:   campbellbarton
Date:     2010-03-14 22:04:02 +0100 (Sun, 14 Mar 2010)

Log Message:
-----------
disallow 'nan' for button input and pydriver's

Modified Paths:
--------------
    trunk/blender/source/blender/python/intern/bpy_driver.c
    trunk/blender/source/blender/python/intern/bpy_interface.c

Modified: trunk/blender/source/blender/python/intern/bpy_driver.c
===================================================================
--- trunk/blender/source/blender/python/intern/bpy_driver.c	2010-03-14 20:24:11 UTC (rev 27498)
+++ trunk/blender/source/blender/python/intern/bpy_driver.c	2010-03-14 21:04:02 UTC (rev 27499)
@@ -152,7 +152,7 @@
 	PyGILState_STATE gilstate;
 
 	DriverVar *dvar;
-	float result = 0.0f; /* default return */
+	double result = 0.0; /* default return */
 	char *expr = NULL;
 	short targets_ok= 1;
 	int i;
@@ -163,11 +163,11 @@
 	/* get the py expression to be evaluated */
 	expr = driver->expression;
 	if ((expr == NULL) || (expr[0]=='\0'))
-		return result;
+		return 0.0f;
 
 	if(!(G.f & G_SCRIPT_AUTOEXEC)) {
 		printf("skipping driver '%s', automatic scripts are disabled\n", driver->expression);
-		return result;
+		return 0.0f;
 	}
 
 	gilstate = PyGILState_Ensure();
@@ -177,7 +177,7 @@
 		if (bpy_pydriver_create_dict() != 0) {
 			fprintf(stderr, "Pydriver error: couldn't create Python dictionary");
 			PyGILState_Release(gilstate);
-			return result;
+			return 0.0f;
 		}
 	}
 
@@ -238,7 +238,7 @@
 				targets_ok= 0;
 			}
 			
-			fprintf(stderr, "\tBPY_pydriver_eval() - couldn't add variable '%s' to namespace \n", dvar->name);
+			fprintf(stderr, "\tBPY_pydriver_eval() - couldn't add variable '%s' to namespace\n", dvar->name);
 			// BPy_errors_to_report(NULL); // TODO - reports
 			PyErr_Print();
 			PyErr_Clear();
@@ -260,12 +260,10 @@
 	/* process the result */
 	if (retval == NULL) {
 		pydriver_error(driver);
-		result = 0.0f;
-	} else if((result= (float)PyFloat_AsDouble(retval)) == -1.0f && PyErr_Occurred()) {
+	} else if((result= PyFloat_AsDouble(retval)) == -1.0 && PyErr_Occurred()) {
 		pydriver_error(driver);
 		Py_DECREF(retval);
-		result = 0.0f;
-
+		result = 0.0;
 	}
 	else {
 		/* all fine, make sure the "invalid expression" flag is cleared */
@@ -274,5 +272,12 @@
 	}
 
 	PyGILState_Release(gilstate);
-	return result;
+    
+    if(finite(result)) {
+        return (float)result;
+    }
+    else {
+        fprintf(stderr, "\tBPY_pydriver_eval() - driver '%s' evaluates to '%f'\n", dvar->name, result);
+        return 0.0f;
+    }
 }

Modified: trunk/blender/source/blender/python/intern/bpy_interface.c
===================================================================
--- trunk/blender/source/blender/python/intern/bpy_interface.c	2010-03-14 20:24:11 UTC (rev 27498)
+++ trunk/blender/source/blender/python/intern/bpy_interface.c	2010-03-14 21:04:02 UTC (rev 27499)
@@ -580,6 +580,9 @@
 		if(val==-1 && PyErr_Occurred()) {
 			error_ret= -1;
 		}
+		else if (!finite(val)) {
+			*value= 0.0;
+		}
 		else {
 			*value= val;
 		}





More information about the Bf-blender-cvs mailing list