From edecf75b611cf0e6b1c2658846cff013434edad4 Mon Sep 17 00:00:00 2001 From: Martin Sustrik Date: Thu, 17 Sep 2009 12:29:32 +0200 Subject: python binding checks ctx argument type --- bindings/python/pyzmq.cpp | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/bindings/python/pyzmq.cpp b/bindings/python/pyzmq.cpp index 628d037..4bb5653 100644 --- a/bindings/python/pyzmq.cpp +++ b/bindings/python/pyzmq.cpp @@ -30,6 +30,8 @@ #pragma warning (disable:4996) #endif +extern PyTypeObject context_type; + struct context_t { PyObject_HEAD @@ -55,14 +57,14 @@ int context_init (context_t *self, PyObject *args, PyObject *kwdict) if (!PyArg_ParseTupleAndKeywords (args, kwdict, "ii", (char**) kwlist, &app_threads, &io_threads)) { PyErr_SetString (PyExc_SystemError, "invalid arguments"); - return -1; // ? + return -1; } assert (!self->handle); self->handle = zmq_init (app_threads, io_threads); if (!self->handle) { PyErr_SetString (PyExc_SystemError, strerror (errno)); - return -1; // ? + return -1; } return 0; @@ -79,6 +81,8 @@ void context_dealloc (context_t *self) self->ob_type->tp_free ((PyObject*) self); } +extern PyTypeObject socket_type; + struct socket_t { PyObject_HEAD @@ -100,18 +104,17 @@ int socket_init (socket_t *self, PyObject *args, PyObject *kwdict) context_t *context; int socket_type; static const char *kwlist [] = {"context", "type", NULL}; - if (!PyArg_ParseTupleAndKeywords (args, kwdict, "Oi", (char**) kwlist, - &context, &socket_type)) { + if (!PyArg_ParseTupleAndKeywords (args, kwdict, "O!i", (char**) kwlist, + &context_type, &context, &socket_type)) { PyErr_SetString (PyExc_SystemError, "invalid arguments"); - return NULL; + return -1; } - // TODO: Check whether 'context' is really a libpyzmq.Context object. assert (!self->handle); self->handle = zmq_socket (context->handle, socket_type); if (!self->handle) { PyErr_SetString (PyExc_SystemError, strerror (errno)); - return -1; // ? + return -1; } return 0; @@ -157,7 +160,6 @@ PyObject *socket_setsockopt (socket_t *self, PyObject *args, PyObject *kwdict) case ZMQ_IDENTITY: case ZMQ_SUBSCRIBE: case ZMQ_UNSUBSCRIBE: - rc = zmq_setsockopt (self->handle, option, PyString_AsString (optval), PyString_Size (optval)); break; @@ -309,7 +311,7 @@ static PyMethodDef context_methods [] = } }; -static PyTypeObject context_type = +PyTypeObject context_type = { PyObject_HEAD_INIT (NULL) 0, @@ -395,7 +397,7 @@ static PyMethodDef socket_methods [] = } }; -static PyTypeObject socket_type = +PyTypeObject socket_type = { PyObject_HEAD_INIT (NULL) 0, -- cgit v1.2.3