aboutsummaryrefslogtreecommitdiff
path: root/devel/ice/files/patch-py-modules-IcePy-Types.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'devel/ice/files/patch-py-modules-IcePy-Types.cpp')
-rw-r--r--devel/ice/files/patch-py-modules-IcePy-Types.cpp112
1 files changed, 112 insertions, 0 deletions
diff --git a/devel/ice/files/patch-py-modules-IcePy-Types.cpp b/devel/ice/files/patch-py-modules-IcePy-Types.cpp
new file mode 100644
index 000000000000..160a9cc8a064
--- /dev/null
+++ b/devel/ice/files/patch-py-modules-IcePy-Types.cpp
@@ -0,0 +1,112 @@
+--- py/modules/IcePy/Types.cpp.orig 2013-03-11 15:19:47.000000000 +0000
++++ py/modules/IcePy/Types.cpp 2014-09-08 14:21:13.335195726 +0000
+@@ -1232,11 +1232,15 @@ IcePy::StructInfo::marshal(PyObject* p, const Ice::OutputStreamPtr& os, ObjectMa
+ {
+ assert(PyObject_IsInstance(p, pythonType.get()) == 1); // validate() should have caught this.
+
++ int sizePos = -1;
+ if(optional)
+ {
+ if(_variableLength)
+ {
+- os->startSize();
++ // BUGFIX: #5481 startSize/endSize can't be nested
++ //os->startSize();
++ sizePos = os->pos();
++ os->write(Ice::Int(0));
+ }
+ else
+ {
+@@ -1266,7 +1270,9 @@ IcePy::StructInfo::marshal(PyObject* p, const Ice::OutputStreamPtr& os, ObjectMa
+
+ if(optional && _variableLength)
+ {
+- os->endSize();
++ assert(sizePos != -1);
++ //os->endSize();
++ os->rewrite(os->pos() - sizePos - 4, sizePos);
+ }
+ }
+
+@@ -1402,11 +1408,15 @@ IcePy::SequenceInfo::marshal(PyObject* p, const Ice::OutputStreamPtr& os, Object
+ {
+ PrimitiveInfoPtr pi = PrimitiveInfoPtr::dynamicCast(elementType);
+
++ int sizePos = -1;
+ if(optional)
+ {
+ if(elementType->variableLength())
+ {
+- os->startSize();
++ // BUGFIX: #5481 startSize/endSize can't be nested
++ //os->startSize();
++ sizePos = os->pos();
++ os->write(Ice::Int(0));
+ }
+ else if(elementType->wireSize() > 1)
+ {
+@@ -1490,7 +1500,9 @@ IcePy::SequenceInfo::marshal(PyObject* p, const Ice::OutputStreamPtr& os, Object
+
+ if(optional && elementType->variableLength())
+ {
+- os->endSize();
++ assert(sizePos != -1);
++ //os->endSize();
++ os->rewrite(os->pos() - sizePos - 4, sizePos);
+ }
+ }
+
+@@ -2480,11 +2492,15 @@ IcePy::DictionaryInfo::marshal(PyObject* p, const Ice::OutputStreamPtr& os, Obje
+
+ const Ice::Int sz = p == Py_None ? 0 : static_cast<Ice::Int>(PyDict_Size(p));
+
++ int sizePos = -1;
+ if(optional)
+ {
+ if(_variableLength)
+ {
+- os->startSize();
++ // BUGFIX: #5481 startSize/endSize can't be nested
++ //os->startSize();
++ sizePos = os->pos();
++ os->write(Ice::Int(0));
+ }
+ else
+ {
+@@ -2523,7 +2539,9 @@ IcePy::DictionaryInfo::marshal(PyObject* p, const Ice::OutputStreamPtr& os, Obje
+
+ if(optional && _variableLength)
+ {
+- os->endSize();
++ assert(sizePos != -1);
++ //os->endSize();
++ os->rewrite(os->pos() - sizePos - 4, sizePos);
+ }
+ }
+
+@@ -2958,9 +2976,13 @@ IcePy::ProxyInfo::optionalFormat() const
+ void
+ IcePy::ProxyInfo::marshal(PyObject* p, const Ice::OutputStreamPtr& os, ObjectMap*, bool optional, const Ice::StringSeq*)
+ {
++ int sizePos = -1;
+ if(optional)
+ {
+- os->startSize();
++ // BUGFIX: #5481 startSize/endSize can't be nested
++ //os->startSize();
++ sizePos = os->pos();
++ os->write(Ice::Int(0));
+ }
+
+ if(p == Py_None)
+@@ -2978,7 +3000,9 @@ IcePy::ProxyInfo::marshal(PyObject* p, const Ice::OutputStreamPtr& os, ObjectMap
+
+ if(optional)
+ {
+- os->endSize();
++ assert(sizePos != -1);
++ //os->endSize();
++ os->rewrite(os->pos() - sizePos - 4, sizePos);
+ }
+ }
+