summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHugo Parente Lima <hugo.pl@gmail.com>2010-12-23 15:50:54 -0200
committerHugo Parente Lima <hugo.pl@gmail.com>2010-12-23 16:10:45 -0200
commitfc997ef702dfe2d40b8420a3c98ca16d9d276596 (patch)
tree666588dc9c4548236cc3ee1da92779ac42d845d1
parentb671bda382fc85954a3587dbe728baa728dfe567 (diff)
downloadshiboken-fc997ef702dfe2d40b8420a3c98ca16d9d276596.tar.gz
shiboken-fc997ef702dfe2d40b8420a3c98ca16d9d276596.tar.xz
shiboken-fc997ef702dfe2d40b8420a3c98ca16d9d276596.zip
Fix bug#554 - "Inner classes don't work and give us a segfault"
Reviewer: Marcelo Lira <marcelo.lira@openbossa.org> Renato Araújo <renato.filho@openbossa.org>
-rw-r--r--libshiboken/basewrapper.cpp7
-rw-r--r--tests/samplebinding/bug_554_test.py40
2 files changed, 43 insertions, 4 deletions
diff --git a/libshiboken/basewrapper.cpp b/libshiboken/basewrapper.cpp
index ba26c965..8c0c2886 100644
--- a/libshiboken/basewrapper.cpp
+++ b/libshiboken/basewrapper.cpp
@@ -186,7 +186,7 @@ void SbkDeallocWrapperWithPrivateDtor(PyObject* self)
void SbkObjectTypeDealloc(PyObject* pyObj)
{
- SbkObjectType* sbkType = reinterpret_cast<SbkObjectType*>(pyObj->ob_type);
+ SbkObjectType* sbkType = reinterpret_cast<SbkObjectType*>(pyObj);
if (!sbkType->d)
return;
@@ -208,8 +208,8 @@ PyObject* SbkObjectTypeTpNew(PyTypeObject* metatype, PyObject* args, PyObject* k
if (!newType)
return 0;
- SbkObjectTypePrivate* d = new SbkObjectTypePrivate;
- memset(d, 0, sizeof(SbkObjectTypePrivate));
+ Shiboken::ObjectType::initPrivateData(newType);
+ SbkObjectTypePrivate* d = newType->d;
std::list<SbkObjectType*> bases = Shiboken::getCppBaseClasses(reinterpret_cast<PyTypeObject*>(newType));
if (bases.size() == 1) {
@@ -239,7 +239,6 @@ PyObject* SbkObjectTypeTpNew(PyTypeObject* metatype, PyObject* args, PyObject* k
d->user_data = 0;
d->d_func = 0;
d->is_user_type = 1;
- newType->d = d;
std::list<SbkObjectType*>::const_iterator it = bases.begin();
for (; it != bases.end(); ++it) {
diff --git a/tests/samplebinding/bug_554_test.py b/tests/samplebinding/bug_554_test.py
new file mode 100644
index 00000000..16d9a9c0
--- /dev/null
+++ b/tests/samplebinding/bug_554_test.py
@@ -0,0 +1,40 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+#
+# This file is part of the Shiboken Python Bindings Generator project.
+#
+# Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+#
+# Contact: PySide team <contact@pyside.org>
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public License
+# version 2.1 as published by the Free Software Foundation. Please
+# review the following information to ensure the GNU Lesser General
+# Public License version 2.1 requirements will be met:
+# http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+# #
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+# 02110-1301 USA
+
+'''Unit test for bug#554'''
+
+from sample import *
+
+class Bug554:
+ def crash(self):
+ class Crasher(ObjectType):
+ pass
+
+if __name__ == '__main__':
+ bug = Bug554()
+ bug.crash()
+
+