Browse Source

Show error instead of crash when using method or property before C++ object is constructed

rdb 9 years ago
parent
commit
99f7fb6fcd
2 changed files with 3 additions and 2 deletions
  1. 1 0
      doc/ReleaseNotes
  2. 2 2
      dtool/src/interrogatedb/py_panda.cxx

+ 1 - 0
doc/ReleaseNotes

@@ -10,6 +10,7 @@ This issue fixes several bugs that were still found in 1.9.2.
 * Fix loading old models with MovingPart<LMatrix4f>
 * Improve performance of CPU vertex animation somewhat
 * Show framebuffer properties when fbprop request fails
+* Show error instead of crash on use of object before __init__
 * Fix hang on exit when using Python task on threaded task chain
 * Fix inability to get RGBA renderbuffer in certain cases
 * Work around GLSL issue with #pragma and certain Intel drivers

+ 2 - 2
dtool/src/interrogatedb/py_panda.cxx

@@ -70,7 +70,7 @@ void DTOOL_Call_ExtractThisPointerForType(PyObject *self, Dtool_PyTypedObject *c
 //               wrong type, raises an AttributeError.
 ////////////////////////////////////////////////////////////////////
 bool Dtool_Call_ExtractThisPointer(PyObject *self, Dtool_PyTypedObject &classdef, void **answer) {
-  if (self == NULL || !DtoolCanThisBeAPandaInstance(self)) {
+  if (self == NULL || !DtoolCanThisBeAPandaInstance(self) || ((Dtool_PyInstDef *)self)->_ptr_to_object == NULL) {
     Dtool_Raise_TypeError("C++ object is not yet constructed, or already destructed.");
     return false;
   }
@@ -93,7 +93,7 @@ bool Dtool_Call_ExtractThisPointer(PyObject *self, Dtool_PyTypedObject &classdef
 bool Dtool_Call_ExtractThisPointer_NonConst(PyObject *self, Dtool_PyTypedObject &classdef,
                                             void **answer, const char *method_name) {
 
-  if (self == NULL || !DtoolCanThisBeAPandaInstance(self)) {
+  if (self == NULL || !DtoolCanThisBeAPandaInstance(self) || ((Dtool_PyInstDef *)self)->_ptr_to_object == NULL) {
     Dtool_Raise_TypeError("C++ object is not yet constructed, or already destructed.");
     return false;
   }