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
diff options
context:
space:
mode:
authorWillian Padovani Germano <wpgermano@gmail.com>2003-06-07 07:49:45 +0400
committerWillian Padovani Germano <wpgermano@gmail.com>2003-06-07 07:49:45 +0400
commitad61dd37ef059b14b8e929d14d64306dcc4ba207 (patch)
tree7d7beaf7af3256225151c532321537602c37f893 /source/blender/python/BPY_interface.c
parentb499fac975115444e18bcaa3ac6ec5a82592ffaa (diff)
* Improved error checking in BPY_interface.c:
Applied a fix suggested by Guignot * Added part of Module Blender.Scene. * Added doxygen comments to Camera.c .
Diffstat (limited to 'source/blender/python/BPY_interface.c')
-rw-r--r--source/blender/python/BPY_interface.c80
1 files changed, 43 insertions, 37 deletions
diff --git a/source/blender/python/BPY_interface.c b/source/blender/python/BPY_interface.c
index 87b83a502c9..fefa80e9c21 100644
--- a/source/blender/python/BPY_interface.c
+++ b/source/blender/python/BPY_interface.c
@@ -175,7 +175,13 @@ void BPY_Err_Handle(Text *text)
PyErr_Restore(exception, err, tb); // takes away reference!
PyErr_Print();
tb = PySys_GetObject("last_traceback");
- Py_XINCREF(tb);
+
+ if (!tb) {
+ printf("\nCan't get traceback\n");
+ return;
+ }
+
+ Py_INCREF(tb);
/* From old bpython BPY_main.c:
* 'check traceback objects and look for last traceback in the
@@ -422,41 +428,6 @@ int BPY_call_importloader(char *name)
return (0);
}
-/* XXX THE 3 FUNCTIONS BELOW ARE IMPLEMENTED IN DRAW.C */
-
-/*****************************************************************************/
-/* Description: */
-/* Notes: Not implemented yet */
-/*****************************************************************************/
-//int BPY_spacetext_is_pywin(struct SpaceText *st)
-//{
-// /* No printf is done here because it is called with every mouse move */
-// return (0);
-//}
-
-/*****************************************************************************/
-/* Description: */
-/* Notes: Not implemented yet */
-/*****************************************************************************/
-//void BPY_spacetext_do_pywin_draw(struct SpaceText *st)
-//{
-// printf ("In BPY_spacetext_do_pywin_draw\n");
-// return;
-//}
-
-/*****************************************************************************/
-/* Description: */
-/* Notes: Not implemented yet */
-/*****************************************************************************/
-//void BPY_spacetext_do_pywin_event(struct SpaceText *st,
-// unsigned short event,
-// short val)
-//{
-// printf ("In BPY_spacetext_do_pywin_event(st=?, event=%d, val=%d)\n",
-// event, val);
-// return;
-//}
-
/*****************************************************************************/
/* Private functions */
/*****************************************************************************/
@@ -476,7 +447,37 @@ PyObject * RunPython(Text *text, PyObject *globaldict)
* to speed-up execution if the user executes the script multiple times */
if (!text->compiled) { /* if it wasn't already compiled, do it now */
- buf = txt_to_buf(text);
+
+#ifdef BLENDER_SANDBOX_MODE
+
+/* IGNORE THIS ALL FOR A WHILE, IT'S VERY INCOMPLETE AND WILL CHANGE
+ * CONSIDERABLY IN THE NEXT COMMIT. THE ifdef won't stay, either. */
+
+/* The import statement is a security risk, so we don't allow it in
+ * SANDBOX MODE. Instead, we import all needed modules ourselves and
+ * substitute all 'import' and '__import__' statements in the code by
+ * '#mport' and '#_import__', resp., making their lines become comments
+ * in Python (to let scripts run without import errors). */
+
+/* Disable importing only for the safest sandbox mode */
+
+ txt_move_bof(text, 0); /* move to the beginning of the script */
+
+/* Search all occurrences of 'import' in the script */
+/* XXX Also check for from ... import ... */
+ while (txt_find_string (text, "import")) {
+ char *line = text->sell->line;
+
+ if (text->curc > 1) /* is it '__import__' ? */
+ if (strncmp (&line[text->curc - 2],
+ "__import__", 10) == 0) text->curc -= 2;
+
+ line[text->curc] = '#'; /* change them to '#mport' or '#_import__' */
+ }
+
+#endif
+
+ buf = txt_to_buf(text);
text->compiled = Py_CompileString(buf, GetName(text), Py_file_input);
@@ -488,6 +489,11 @@ PyObject * RunPython(Text *text, PyObject *globaldict)
}
}
+#ifdef BLENDER_SANDBOX_MODE
+ //save the script as a dict entry and call the eval code for it
+ //then return
+ PyDict_SetItemString(globaldict, "_SB_code", text->compiled);
+#endif
return PyEval_EvalCode(text->compiled, globaldict, globaldict);
}