diff options
author | Jesus Rivero <neurogeek@gentoo.org> | 2010-03-01 23:46:49 +0000 |
---|---|---|
committer | Jesus Rivero <neurogeek@gentoo.org> | 2010-03-01 23:46:49 +0000 |
commit | 3d55d72dce79397a5a0024364fb1a1eea679be3a (patch) | |
tree | 61f80606a6a9f008d2588422ad694a20790cc00a /dev-python/py-xmlrpc/files | |
parent | amd64 stable wrt #297299 (diff) | |
download | gentoo-2-3d55d72dce79397a5a0024364fb1a1eea679be3a.tar.gz gentoo-2-3d55d72dce79397a5a0024364fb1a1eea679be3a.tar.bz2 gentoo-2-3d55d72dce79397a5a0024364fb1a1eea679be3a.zip |
Added patchs wrt bug #299023 (now closed), Thanks to Florian for the report
(Portage version: 2.2_rc63/cvs/Linux i686)
Diffstat (limited to 'dev-python/py-xmlrpc/files')
7 files changed, 433 insertions, 0 deletions
diff --git a/dev-python/py-xmlrpc/files/py-xmlrpc_patch-extra.patch b/dev-python/py-xmlrpc/files/py-xmlrpc_patch-extra.patch new file mode 100644 index 000000000000..7f711eb70674 --- /dev/null +++ b/dev-python/py-xmlrpc/files/py-xmlrpc_patch-extra.patch @@ -0,0 +1,338 @@ +Patch added by neurogeek@gentoo.org +Patch added 03/01/2010 +Taken from: http://www.freebsd.org/cgi/cvsweb.cgi/ports/net/py-xmlrpc/files/ +Thanks to sobomax @ FreeBSD + +Due to unresponsiveness of the development team of the py-xmlrpc, I'm sending +this change request here in hope it can help the developers that use this +port. + +The py-xmlrpc module has a problem with boolean type - it implements boolean +type internally thus creating difficulties on encode/decode path of the +boolean variables. I've changed the source code to use internal Python's +boolean type and this made things straight to the user of this module. + +Another change I've made to the module is support for the <nil/> element. +Despite the fact this element isn't mentioned in the XML-RPC specification, +many of implementations support it, as this is the very convenient way to +pass null values from the environments with dynamic typing such as +Python, Perl, etc. + + +--- src/rpcBoolean.c.orig 2002-02-21 09:08:11.000000000 +0200 ++++ src/rpcBoolean.c 2008-10-15 10:41:34.000000000 +0300 +@@ -2,142 +2,3 @@ + * Copyright (C) 2001, Shilad Sen, Sourcelight Technologies, Inc. + * See xmlrpc.h or the README for more copyright information. + */ +- +- +-#include "xmlrpc.h" +-#include "rpcInternal.h" +- +- +-static void rpcBoolDealloc(rpcBool *bp); +-static int rpcBoolLength(rpcBool *bp); +-static int rpcBoolCompare(rpcBool *b1, rpcBool *b2); +-static PyObject *rpcBoolRepr(rpcBool *bp); +- +- +-/* +- * create a new edb boolean object +- */ +-PyObject * +-rpcBoolNew(bool value) +-{ +- rpcBool *bp; +- +- bp = PyObject_NEW(rpcBool, &rpcBoolType); +- if (bp == NULL) +- return NULL; +- bp->value = value; +- return (PyObject *)bp; +-} +- +- +-/* +- * get the value (true or false) of a boolean rpc object +- */ +-bool +-rpcBoolValue(PyObject *obj) +-{ +- return ((rpcBool *)obj)->value; +-} +- +- +-/* +- * free resources associated with a boolean object +- */ +-static void +-rpcBoolDealloc(rpcBool *bp) +-{ +- PyMem_DEL(bp); +-} +- +- +-/* +- * tell whether a boolean object is true or false +- */ +-static int +-rpcBoolLength(rpcBool *bp) +-{ +- if (bp->value) +- return 1; +- else +- return 0; +-} +- +- +-/* +- * bool object to dictionary conversion +- */ +-static PyMappingMethods rpcBoolAsMapping = { +- (inquiry)rpcBoolLength, /* mapping length */ +- (binaryfunc)NULL, /* mapping subscript */ +- (objobjargproc)NULL, /* mapping associate subscript */ +-}; +- +- +-/* +- * boolean comparison +- */ +-static int +-rpcBoolCompare(rpcBool *b1, rpcBool *b2) +-{ +- if (not b1->value and not b2->value) +- return 0; +- else if (b1->value and b2->value) +- return 0; +- else +- return 1; +-} +- +- +-/* +- * represent a boolean xml object +- */ +-static PyObject * +-rpcBoolStr(rpcBool *bp) +-{ +- if (bp->value) +- return PyString_FromString("<xmlrpc boolean true>"); +- else +- return PyString_FromString("<xmlrpc boolean false>"); +-} +- +- +-/* +- * represent a boolean xml object +- */ +-static PyObject * +-rpcBoolRepr(rpcBool *bp) +-{ +- if (bp->value) +- return PyString_FromString("boolean(1)"); +- else +- return PyString_FromString("boolean(0)"); +-} +- +- +-/* +- * map characterstics of a boolean +- */ +-PyTypeObject rpcBoolType = { +- PyObject_HEAD_INIT(0) +- 0, +- "rpcBoolean", +- sizeof(rpcBool), +- 0, +- (destructor)rpcBoolDealloc, /* tp_dealloc */ +- 0, /* tp_print */ +- 0, /* tp_getattr */ +- 0, /* tp_setattr */ +- (cmpfunc)rpcBoolCompare, /* tp_compare */ +- (reprfunc)rpcBoolRepr, /* tp_repr */ +- 0, /* tp_as_number */ +- 0, /* tp_as_sequence */ +- &rpcBoolAsMapping, /* tp_as_mapping */ +- 0, /* tp_hash */ +- 0, /* tp_call */ +- (reprfunc)rpcBoolStr, /* tp_str */ +- 0, /* tp_getattro */ +- 0, /* tp_setattro */ +- 0, /* tp_as_buffer */ +- 0, /* tp_xxx4 */ +- 0, /* tp_doc */ +-}; +--- src/rpcBoolean.h.orig 2008-10-15 10:46:52.000000000 +0300 ++++ src/rpcBoolean.h 2008-10-15 10:46:59.000000000 +0300 +@@ -6,26 +6,3 @@ + * + */ + +- +-#ifndef _RPCBOOL_H_ +-#define _RPCBOOL_H_ +- +- +-#include "rpcInclude.h" +-PyTypeObject rpcBoolType; +- +- +-/* +- * boolean object +- */ +-typedef struct { +- PyObject_HEAD /* python standard */ +- bool value; /* true/false value */ +-} rpcBool; +- +- +-PyObject *rpcBoolNew(bool value); +-bool rpcBoolValue(PyObject *obj); +- +- +-#endif /* _RPCBOOL_H_ */ +--- src/rpcUtils.c.orig 2003-04-21 18:39:15.000000000 +0300 ++++ src/rpcUtils.c 2008-10-15 10:45:01.000000000 +0300 +@@ -47,6 +47,7 @@ + + static strBuff *encodeValue(strBuff *sp, PyObject *value, uint tabs); + static strBuff *encodeBool(strBuff *sp, PyObject *value); ++static strBuff *encodeNone(strBuff *sp); + static strBuff *encodeInt(strBuff *sp, PyObject *value); + static strBuff *encodeDouble(strBuff *sp, PyObject *value); + static strBuff *encodeString(strBuff *sp, PyObject *value); +@@ -63,6 +64,7 @@ + static PyObject *decodeString(char **cp, char *ep, ulong *lines); + static PyObject *decodeTaglessString(char **cp, char *ep, ulong *lines); + static PyObject *decodeBool(char **cp, char *ep, ulong *lines); ++static PyObject *decodeNone(char **cp, char *ep, ulong *lines); + static PyObject *decodeBase64(char **cp, char *ep, ulong *lines); + static PyObject *decodeArray(char **cp, char *ep, ulong *lines); + static PyObject *decodeStruct(char **cp, char *ep, ulong *lines); +@@ -205,11 +207,13 @@ + { + if (buffConstant(sp, "<value>") == NULL) + return NULL; +- if (PyInt_Check(value) or PyLong_Check(value)) ++ if (PyInt_CheckExact(value) or PyLong_Check(value)) + sp = encodeInt(sp, value); ++ else if (value == Py_None) ++ sp = encodeNone(sp); + else if (PyFloat_Check(value)) + sp = encodeDouble(sp, value); +- else if (value->ob_type == &rpcBoolType) ++ else if (PyBool_Check(value)) + sp = encodeBool(sp, value); + else if (value->ob_type == &rpcDateType) + sp = encodeDate(sp, value); +@@ -286,12 +290,25 @@ + } + + /* ++ * encode the None as: "<nil/>" ++ */ ++static strBuff * ++encodeNone(strBuff *sp) ++{ ++ if (buffConstant(sp, "<nil/>") == NULL) ++ return NULL; ++ ++ return sp; ++} ++ ++/* ++/* + * encode the boolean true (for example) as: "<boolean>1</boolean>" + */ + static strBuff * + encodeBool(strBuff *sp, PyObject *value) + { +- if (((rpcBool *)value)->value) ++ if (value == Py_True) + return buffConstant(sp, "<boolean>1</boolean>"); + else + return buffConstant(sp, "<boolean>0</boolean>"); +@@ -569,6 +586,8 @@ + res = decodeDate(cp, ep, lines); + else if (strncmp(*cp, "<base64>", 8) == 0) + res = decodeBase64(cp, ep, lines); ++ else if (strncmp(*cp, "<nil/>", 6) == 0) ++ res = decodeNone(cp, ep, lines); + else { /* it must be a string */ + *cp = tp; + res = decodeTaglessString(cp, ep, lines); +@@ -619,6 +638,20 @@ + + + static PyObject * ++decodeNone(char **cp, char *ep, ulong *lines) ++{ ++ if (*cp + 6 >= ep) ++ return eosErr(); ++ *cp += 6; ++ if (chompStr(cp, ep, lines) >= ep) ++ return eosErr(); ++ ++ Py_INCREF(Py_None); ++ return Py_None; ++} ++ ++ ++static PyObject * + decodeBool(char **cp, char *ep, ulong *lines) + { + PyObject *res; +@@ -638,7 +671,12 @@ + if (chompStr(cp, ep, lines) >= ep) + return eosErr(); + +- return rpcBoolNew(value); ++ if (value) { ++ Py_INCREF(Py_True); ++ return Py_True; ++ } ++ Py_INCREF(Py_False); ++ return Py_False; + } + + +--- src/xmlrpc.c.orig 2003-04-21 18:39:15.000000000 +0300 ++++ src/xmlrpc.c 2008-10-15 10:47:23.000000000 +0300 +@@ -45,7 +45,6 @@ + rpcLogLevel = 3; + rpcLogger = stderr; + rpcDateFormat = XMLRPC_DATE_FORMAT_US; +- rpcBoolType.ob_type = &PyType_Type; + rpcDateType.ob_type = &PyType_Type; + rpcBase64Type.ob_type = &PyType_Type; + rpcClientType.ob_type = &PyType_Type; +--- src/xmlrpc.h.orig 2003-04-21 18:39:15.000000000 +0300 ++++ src/xmlrpc.h 2008-10-15 10:40:35.000000000 +0300 +@@ -45,7 +45,6 @@ + #define XMLRPC_DATE_FORMAT_EUROPE 2 + + #include "rpcBase64.h" +-#include "rpcBoolean.h" + #include "rpcClient.h" + #include "rpcDate.h" + #include "rpcDispatch.h" +--- src/xmlrpcmodule.c.orig 2003-04-21 19:22:54.000000000 +0300 ++++ src/xmlrpcmodule.c 2008-10-15 10:48:42.000000000 +0300 +@@ -197,7 +197,12 @@ + unless (PyArg_ParseTuple(args, "i", &value)) + return NULL; + +- return rpcBoolNew(value); ++ if (value) { ++ Py_INCREF(Py_True); ++ return Py_True; ++ } ++ Py_INCREF(Py_False); ++ return Py_False; + } + + + + diff --git a/dev-python/py-xmlrpc/files/py-xmlrpc_rpcBase64.patch b/dev-python/py-xmlrpc/files/py-xmlrpc_rpcBase64.patch new file mode 100644 index 000000000000..d22aa75b9a59 --- /dev/null +++ b/dev-python/py-xmlrpc/files/py-xmlrpc_rpcBase64.patch @@ -0,0 +1,16 @@ +Patch added by neurogeek@gentoo.org +Patch added 03/01/2010 +Taken from: http://www.freebsd.org/cgi/cvsweb.cgi/ports/net/py-xmlrpc/files/ +Thanks to sobomax @ FreeBSD + +--- src/rpcBase64.c ++++ src/rpcBase64.c +@@ -239,7 +239,7 @@ + if (bp->value) { + Py_DECREF(bp->value); + } +- PyMem_DEL(bp); ++ PyObject_DEL(bp); + } + + diff --git a/dev-python/py-xmlrpc/files/py-xmlrpc_rpcClient.patch b/dev-python/py-xmlrpc/files/py-xmlrpc_rpcClient.patch new file mode 100644 index 000000000000..37ad5293cda6 --- /dev/null +++ b/dev-python/py-xmlrpc/files/py-xmlrpc_rpcClient.patch @@ -0,0 +1,15 @@ +Patch added by neurogeek@gentoo.org +Patch added 03/01/2010 +Taken from: http://www.freebsd.org/cgi/cvsweb.cgi/ports/net/py-xmlrpc/files/ +Thanks to sobomax @ FreeBSD + +--- src/rpcClient.c ++++ src/rpcClient.c +@@ -179,7 +179,7 @@ + cp->url = NULL; + Py_DECREF(cp->src); + Py_DECREF(cp->disp); +- PyMem_DEL(cp); ++ PyObject_DEL(cp); + } + diff --git a/dev-python/py-xmlrpc/files/py-xmlrpc_rpcDate.patch b/dev-python/py-xmlrpc/files/py-xmlrpc_rpcDate.patch new file mode 100644 index 000000000000..3135173e96f8 --- /dev/null +++ b/dev-python/py-xmlrpc/files/py-xmlrpc_rpcDate.patch @@ -0,0 +1,16 @@ +Patch added by neurogeek@gentoo.org +Patch added 03/01/2010 +Taken from: http://www.freebsd.org/cgi/cvsweb.cgi/ports/net/py-xmlrpc/files/ +Thanks to sobomax @ FreeBSD + +--- src/rpcDate.c ++++ src/rpcDate.c +@@ -75,7 +75,7 @@ + if (dp->value) { + Py_DECREF(dp->value); + } +- PyMem_DEL(dp); ++ PyObject_DEL(dp); + } + + diff --git a/dev-python/py-xmlrpc/files/py-xmlrpc_rpcDispatch.patch b/dev-python/py-xmlrpc/files/py-xmlrpc_rpcDispatch.patch new file mode 100644 index 000000000000..f13c23c2b12c --- /dev/null +++ b/dev-python/py-xmlrpc/files/py-xmlrpc_rpcDispatch.patch @@ -0,0 +1,16 @@ +Patch added by neurogeek@gentoo.org +Patch added 03/01/2010 +Taken from: http://www.freebsd.org/cgi/cvsweb.cgi/ports/net/py-xmlrpc/files/ +Thanks to sobomax @ FreeBSD + +--- src/rpcDispatch.c ++++ src/rpcDispatch.c +@@ -68,7 +68,7 @@ + rpcDispClear(dp); + free(dp->srcs); + } +- PyMem_DEL(dp); ++ PyObject_DEL(dp); + } + + diff --git a/dev-python/py-xmlrpc/files/py-xmlrpc_rpcSource.patch b/dev-python/py-xmlrpc/files/py-xmlrpc_rpcSource.patch new file mode 100644 index 000000000000..9cbfc7f89a00 --- /dev/null +++ b/dev-python/py-xmlrpc/files/py-xmlrpc_rpcSource.patch @@ -0,0 +1,16 @@ +Patch added by neurogeek@gentoo.org +Patch added 03/01/2010 +Taken from: http://www.freebsd.org/cgi/cvsweb.cgi/ports/net/py-xmlrpc/files/ +Thanks to sobomax @ FreeBSD + +--- src/rpcSource.c ++++ src/rpcSource.c +@@ -61,7 +61,7 @@ + if (srcp->onErr and srcp->onErrType == ONERR_TYPE_PY) { + Py_DECREF((PyObject *)srcp->onErr); + } +- PyMem_DEL(srcp); ++ PyObject_DEL(srcp); + } + + diff --git a/dev-python/py-xmlrpc/files/py-xmlrpc_rpcUtils.patch b/dev-python/py-xmlrpc/files/py-xmlrpc_rpcUtils.patch new file mode 100644 index 000000000000..649b2faa5b3f --- /dev/null +++ b/dev-python/py-xmlrpc/files/py-xmlrpc_rpcUtils.patch @@ -0,0 +1,16 @@ +Patch added by neurogeek@gentoo.org +Patch added 03/01/2010 +Taken from: http://www.freebsd.org/cgi/cvsweb.cgi/ports/net/py-xmlrpc/files/ +Thanks to sobomax @ FreeBSD + +--- src/rpcUtils.c.orig ++++ src/rpcUtils.c +@@ -276,7 +280,7 @@ + double d; + + d = PyFloat_AS_DOUBLE(value); +- snprintf(buff, 255, "%f", d); ++ snprintf(buff, 255, "%.17f", d); + if ((buffConstant(sp, "<double>") == NULL) + or (buffConcat(sp, buff) == NULL) + or (buffConstant(sp, "</double>") == NULL)) |