Skip to content

Commit 35f5884

Browse files
committed
Improve error handling for PyFloat_AsDouble/PyLong_AsLong/PyLong_AsUnsignedLong
Check the value before to avoid calling PyErr_Occurred
1 parent 05f811a commit 35f5884

4 files changed

Lines changed: 7 additions & 7 deletions

File tree

cairo/context.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -901,7 +901,7 @@ pycairo_set_dash (PycairoContext *o, PyObject *args) {
901901
}
902902
dashes[i] = PyFloat_AsDouble(py_dash);
903903
Py_DECREF(py_dash);
904-
if (PyErr_Occurred()) {
904+
if (dashes[i] == -1.0 && PyErr_Occurred()) {
905905
PyMem_Free (dashes);
906906
Py_DECREF(py_dashes);
907907
return NULL;

cairo/enums.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -267,7 +267,7 @@ format_stride_for_width (PyObject *self, PyObject *args) {
267267
return NULL;
268268

269269
value = PyLong_AsLong (self);
270-
if (PyErr_Occurred())
270+
if (value == -1 && PyErr_Occurred())
271271
return NULL;
272272
if (value > INT_MAX || value < INT_MIN) {
273273
PyErr_SetString (PyExc_ValueError, "format value out of range");

cairo/glyph.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ _PycairoGlyphs_AsGlyphs (PyObject *py_object, int *num_glyphs)
9494
}
9595
x = PyFloat_AsDouble (py_x);
9696
Py_DECREF (py_x);
97-
if (PyErr_Occurred()) {
97+
if (x == 1.0 && PyErr_Occurred()) {
9898
goto error;
9999
}
100100
PyObject *py_y = PySequence_ITEM (py_seq, 2);
@@ -103,7 +103,7 @@ _PycairoGlyphs_AsGlyphs (PyObject *py_object, int *num_glyphs)
103103
}
104104
y = PyFloat_AsDouble (py_y);
105105
Py_DECREF (py_y);
106-
if (PyErr_Occurred()) {
106+
if (y == 1.0 && PyErr_Occurred()) {
107107
goto error;
108108
}
109109

@@ -149,7 +149,7 @@ _PyGlyph_AsGlyph (PyObject *pyobj, cairo_glyph_t *glyph) {
149149
}
150150
x = PyFloat_AsDouble (py_x);
151151
Py_DECREF (py_x);
152-
if (PyErr_Occurred()) {
152+
if (x == 1.0 && PyErr_Occurred()) {
153153
return -1;
154154
}
155155
PyObject *py_y = PySequence_ITEM (pyobj, 2);
@@ -158,7 +158,7 @@ _PyGlyph_AsGlyph (PyObject *pyobj, cairo_glyph_t *glyph) {
158158
}
159159
y = PyFloat_AsDouble (py_y);
160160
Py_DECREF (py_y);
161-
if (PyErr_Occurred()) {
161+
if (y == 1.0 && PyErr_Occurred()) {
162162
return -1;
163163
}
164164

cairo/misc.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -199,7 +199,7 @@ _conv_pyobject_to_ulong (PyObject *pyobj, unsigned long *result) {
199199
return -1;
200200

201201
temp = PyLong_AsUnsignedLong (pylong);
202-
if (PyErr_Occurred ())
202+
if (temp == (unsigned long)-1 && PyErr_Occurred ())
203203
return -1;
204204

205205
*result = temp;

0 commit comments

Comments
 (0)