summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoger Hu <roger.hu@gmail.com>2014-06-16 07:55:36 -0700
committerAsk Solem <ask@celeryproject.org>2015-10-30 12:15:48 -0700
commit948e2bfea9d496299e0e1cb1be01cb4358263c38 (patch)
treecb737d83f74d7d2c9e97d0559c54d13d54e834ba
parent612211932b0cec65642fd8e47b7bb3f563eef14a (diff)
downloadlibrabbitmq-948e2bfea9d496299e0e1cb1be01cb4358263c38.tar.gz
Check if the return value is -1. If so, goto fail, which will invoke PyErr_Ocurred().
https://docs.python.org/2/c-api/int.html https://docs.python.org/2/c-api/float.html Somehow runnning PyErr_Ocurred() when no exception has been generated triggers an unknown thread state and seg faults.
-rw-r--r--Modules/_librabbitmq/connection.c12
1 files changed, 8 insertions, 4 deletions
diff --git a/Modules/_librabbitmq/connection.c b/Modules/_librabbitmq/connection.c
index af52cd4..2ca4933 100644
--- a/Modules/_librabbitmq/connection.c
+++ b/Modules/_librabbitmq/connection.c
@@ -292,8 +292,10 @@ PyDict_ToAMQTable(amqp_connection_state_t conn, PyObject *src, amqp_pool_t *pool
else if (PyLong_Check(dvalue) || PyInt_Check(dvalue)) {
/* Int | Long */
clong_value = (int64_t)PyLong_AsLong(dvalue);
- if (PyErr_Occurred())
- goto error;
+
+ if (clong_value == -1)
+ goto error;
+
AMQTable_SetIntValue(&dst,
PyString_AS_AMQBYTES(dkey),
clong_value
@@ -301,8 +303,10 @@ PyDict_ToAMQTable(amqp_connection_state_t conn, PyObject *src, amqp_pool_t *pool
}
else if (PyFloat_Check(dvalue)) {
cdouble_value = PyFloat_AsDouble(dvalue);
- if (PyErr_Occurred())
- goto error;
+
+ if (cdouble_value == -1)
+ goto error;
+
AMQTable_SetDoubleValue(&dst,
PyString_AS_AMQBYTES(dkey),
cdouble_value