diff options
author | Hugo Lima <hugo.lima@openbossa.org> | 2010-03-17 14:09:23 -0300 |
---|---|---|
committer | Hugo Lima <hugo.lima@openbossa.org> | 2010-03-18 19:45:07 -0300 |
commit | ca2febda4080bb7ea2bd94aa9c8bf3ce18dccac0 (patch) | |
tree | 331f95ac6fee830788367d1675efc80ba140ab78 /libshiboken | |
parent | b6e8e35cdcf9946ad6672df340b55fa8843b72b9 (diff) |
Sequence conversion are made ONLY for python sequences.
Not for binded types implementing sequence protocol, otherwise this will
cause a mess like QBitArray being accepted by someone expecting a
QStringList.
Diffstat (limited to 'libshiboken')
-rw-r--r-- | libshiboken/conversions.h | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/libshiboken/conversions.h b/libshiboken/conversions.h index 2d09ac07f..600280c9f 100644 --- a/libshiboken/conversions.h +++ b/libshiboken/conversions.h @@ -508,7 +508,11 @@ struct StdListConverter { if (PyObject_TypeCheck(pyObj, SbkType<StdList>())) return true; - if (!PySequence_Check(pyObj)) + // Sequence conversion are made ONLY for python sequences, not for + // binded types implementing sequence protocol, otherwise this will + // cause a mess like QBitArray being accepted by someone expecting a + // QStringList. + if ((SbkType<StdList>() && isShibokenType(pyObj)) || !PySequence_Check(pyObj)) return false; for (int i = 0, max = PySequence_Length(pyObj); i < max; ++i) { AutoDecRef item(PySequence_GetItem(pyObj, i)); @@ -545,7 +549,7 @@ struct StdPairConverter { if (PyObject_TypeCheck(pyObj, SbkType<StdPair>())) return true; - if (!PySequence_Check(pyObj) || PySequence_Length(pyObj) != 2) + if ((SbkType<StdPair>() && isShibokenType(pyObj)) || !PySequence_Check(pyObj) || PySequence_Length(pyObj) != 2) return false; AutoDecRef item1(PySequence_GetItem(pyObj, 0)); @@ -584,7 +588,7 @@ struct StdMapConverter { if (PyObject_TypeCheck(pyObj, SbkType<StdMap>())) return true; - if (!PyDict_Check(pyObj)) + if ((SbkType<StdMap>() && isShibokenType(pyObj)) || !PyDict_Check(pyObj)) return false; PyObject* key; |