mirror of
https://gitlab.gnome.org/GNOME/gimp
synced 2024-10-22 04:22:29 +00:00
plug-ins/pygimp/pygimp-drawable.c plug-ins/pygimp/pygimp-vectors.c
2008-07-03 Lars-Peter Clausen <lars@metafoo.de> * plug-ins/pygimp/pygimp-drawable.c * plug-ins/pygimp/pygimp-vectors.c * plug-ins/pygimp/pygimp-display.c * plug-ins/pygimp/pygimp-image.c: Added checks to ensure that a python object only is created if its id is valid. Fixes bug #536403. * plug-ins/pygimp/pygimp-pdb.c * plug-ins/pygimp/pygimp-tile.c * plug-ins/pygimp/pygimp-colors.c * plug-ins/pygimp/pygimp.h: Fix crashing when pygimp is used with python-2.5 on 64 bit systems. Fixes bug #540629. svn path=/trunk/; revision=26044
This commit is contained in:
parent
4f606de456
commit
c103ca3c90
13
ChangeLog
13
ChangeLog
|
@ -1,3 +1,16 @@
|
|||
2008-07-03 Lars-Peter Clausen <lars@metafoo.de>
|
||||
|
||||
* plug-ins/pygimp/pygimp-drawable.c
|
||||
* plug-ins/pygimp/pygimp-vectors.c
|
||||
* plug-ins/pygimp/pygimp-display.c
|
||||
* plug-ins/pygimp/pygimp-image.c: Added checks to ensure that a python
|
||||
object only is created if its id is valid. Fixes bug #536403.
|
||||
* plug-ins/pygimp/pygimp-pdb.c
|
||||
* plug-ins/pygimp/pygimp-tile.c
|
||||
* plug-ins/pygimp/pygimp-colors.c
|
||||
* plug-ins/pygimp/pygimp.h: Fix crashing when pygimp is used with
|
||||
python-2.5 on 64 bit systems. Fixes bug #540629.
|
||||
|
||||
2008-07-03 Sven Neumann <sven@gimp.org>
|
||||
|
||||
* app/widgets/gimpsettingsbox.c (gimp_settings_box_constructor)
|
||||
|
|
|
@ -20,6 +20,7 @@
|
|||
|
||||
#define NO_IMPORT_PYGOBJECT
|
||||
|
||||
#include "pygimp.h"
|
||||
#include "pygimpcolor.h"
|
||||
|
||||
#include <libgimpmath/gimpmath.h>
|
||||
|
@ -459,14 +460,14 @@ static PyGetSetDef rgb_getsets[] = {
|
|||
{ NULL, (getter)0, (setter)0 },
|
||||
};
|
||||
|
||||
static int
|
||||
static Py_ssize_t
|
||||
rgb_length(PyObject *self)
|
||||
{
|
||||
return 4;
|
||||
}
|
||||
|
||||
static PyObject *
|
||||
rgb_getitem(PyObject *self, int pos)
|
||||
rgb_getitem(PyObject *self, Py_ssize_t pos)
|
||||
{
|
||||
GimpRGB *rgb;
|
||||
double val;
|
||||
|
@ -495,7 +496,7 @@ rgb_getitem(PyObject *self, int pos)
|
|||
}
|
||||
|
||||
static int
|
||||
rgb_setitem(PyObject *self, int pos, PyObject *value)
|
||||
rgb_setitem(PyObject *self, Py_ssize_t pos, PyObject *value)
|
||||
{
|
||||
if (pos < 0)
|
||||
pos += 4;
|
||||
|
@ -517,10 +518,10 @@ rgb_setitem(PyObject *self, int pos, PyObject *value)
|
|||
}
|
||||
|
||||
static PyObject *
|
||||
rgb_slice(PyObject *self, int start, int end)
|
||||
rgb_slice(PyObject *self, Py_ssize_t start, Py_ssize_t end)
|
||||
{
|
||||
PyTupleObject *ret;
|
||||
int i;
|
||||
Py_ssize_t i;
|
||||
|
||||
if (start < 0)
|
||||
start = 0;
|
||||
|
@ -540,13 +541,13 @@ rgb_slice(PyObject *self, int start, int end)
|
|||
}
|
||||
|
||||
static PySequenceMethods rgb_as_sequence = {
|
||||
(inquiry)rgb_length,
|
||||
rgb_length,
|
||||
(binaryfunc)0,
|
||||
(intargfunc)0,
|
||||
(intargfunc)rgb_getitem,
|
||||
(intintargfunc)rgb_slice,
|
||||
(intobjargproc)rgb_setitem,
|
||||
(intintobjargproc)0,
|
||||
0,
|
||||
rgb_getitem,
|
||||
rgb_slice,
|
||||
rgb_setitem,
|
||||
0,
|
||||
(objobjproc)0,
|
||||
};
|
||||
|
||||
|
@ -562,7 +563,7 @@ rgb_subscript(PyObject *self, PyObject *item)
|
|||
return NULL;
|
||||
return rgb_getitem(self, i);
|
||||
} else if (PySlice_Check(item)) {
|
||||
int start, stop, step, slicelength, cur, i;
|
||||
Py_ssize_t start, stop, step, slicelength, cur, i;
|
||||
PyObject *ret;
|
||||
|
||||
if (PySlice_GetIndicesEx((PySliceObject*)item, 4,
|
||||
|
@ -608,7 +609,7 @@ rgb_subscript(PyObject *self, PyObject *item)
|
|||
}
|
||||
|
||||
static PyMappingMethods rgb_as_mapping = {
|
||||
(inquiry)rgb_length,
|
||||
rgb_length,
|
||||
(binaryfunc)rgb_subscript,
|
||||
(objobjargproc)0
|
||||
};
|
||||
|
@ -982,14 +983,14 @@ static PyGetSetDef hsv_getsets[] = {
|
|||
{ NULL, (getter)0, (setter)0 },
|
||||
};
|
||||
|
||||
static int
|
||||
static Py_ssize_t
|
||||
hsv_length(PyObject *self)
|
||||
{
|
||||
return 4;
|
||||
}
|
||||
|
||||
static PyObject *
|
||||
hsv_getitem(PyObject *self, int pos)
|
||||
hsv_getitem(PyObject *self, Py_ssize_t pos)
|
||||
{
|
||||
GimpHSV *hsv;
|
||||
double val, scale_factor;
|
||||
|
@ -1040,10 +1041,10 @@ hsv_setitem(PyObject *self, int pos, PyObject *value)
|
|||
}
|
||||
|
||||
static PyObject *
|
||||
hsv_slice(PyObject *self, int start, int end)
|
||||
hsv_slice(PyObject *self, Py_ssize_t start, Py_ssize_t end)
|
||||
{
|
||||
PyTupleObject *ret;
|
||||
int i;
|
||||
Py_ssize_t i;
|
||||
|
||||
if (start < 0)
|
||||
start = 0;
|
||||
|
@ -1063,13 +1064,13 @@ hsv_slice(PyObject *self, int start, int end)
|
|||
}
|
||||
|
||||
static PySequenceMethods hsv_as_sequence = {
|
||||
(inquiry)hsv_length,
|
||||
hsv_length,
|
||||
(binaryfunc)0,
|
||||
(intargfunc)0,
|
||||
(intargfunc)hsv_getitem,
|
||||
(intintargfunc)hsv_slice,
|
||||
(intobjargproc)hsv_setitem,
|
||||
(intintobjargproc)0,
|
||||
0,
|
||||
hsv_getitem,
|
||||
hsv_slice,
|
||||
hsv_setitem,
|
||||
0,
|
||||
(objobjproc)0,
|
||||
};
|
||||
|
||||
|
@ -1085,7 +1086,7 @@ hsv_subscript(PyObject *self, PyObject *item)
|
|||
return NULL;
|
||||
return hsv_getitem(self, i);
|
||||
} else if (PySlice_Check(item)) {
|
||||
int start, stop, step, slicelength, cur, i;
|
||||
Py_ssize_t start, stop, step, slicelength, cur, i;
|
||||
PyObject *ret;
|
||||
|
||||
if (PySlice_GetIndicesEx((PySliceObject*)item, 4,
|
||||
|
@ -1131,7 +1132,7 @@ hsv_subscript(PyObject *self, PyObject *item)
|
|||
}
|
||||
|
||||
static PyMappingMethods hsv_as_mapping = {
|
||||
(inquiry)hsv_length,
|
||||
hsv_length,
|
||||
(binaryfunc)hsv_subscript,
|
||||
(objobjargproc)0
|
||||
};
|
||||
|
@ -1495,14 +1496,14 @@ static PyGetSetDef hsl_getsets[] = {
|
|||
{ NULL, (getter)0, (setter)0 },
|
||||
};
|
||||
|
||||
static int
|
||||
static Py_ssize_t
|
||||
hsl_length(PyObject *self)
|
||||
{
|
||||
return 4;
|
||||
}
|
||||
|
||||
static PyObject *
|
||||
hsl_getitem(PyObject *self, int pos)
|
||||
hsl_getitem(PyObject *self, Py_ssize_t pos)
|
||||
{
|
||||
GimpHSL *hsl;
|
||||
double val, scale_factor;
|
||||
|
@ -1553,10 +1554,10 @@ hsl_setitem(PyObject *self, int pos, PyObject *value)
|
|||
}
|
||||
|
||||
static PyObject *
|
||||
hsl_slice(PyObject *self, int start, int end)
|
||||
hsl_slice(PyObject *self, Py_ssize_t start, Py_ssize_t end)
|
||||
{
|
||||
PyTupleObject *ret;
|
||||
int i;
|
||||
Py_ssize_t i;
|
||||
|
||||
if (start < 0)
|
||||
start = 0;
|
||||
|
@ -1576,13 +1577,13 @@ hsl_slice(PyObject *self, int start, int end)
|
|||
}
|
||||
|
||||
static PySequenceMethods hsl_as_sequence = {
|
||||
(inquiry)hsl_length,
|
||||
hsl_length,
|
||||
(binaryfunc)0,
|
||||
(intargfunc)0,
|
||||
(intargfunc)hsl_getitem,
|
||||
(intintargfunc)hsl_slice,
|
||||
(intobjargproc)hsl_setitem,
|
||||
(intintobjargproc)0,
|
||||
0,
|
||||
hsl_getitem,
|
||||
hsl_slice,
|
||||
hsl_setitem,
|
||||
0,
|
||||
(objobjproc)0,
|
||||
};
|
||||
|
||||
|
@ -1598,7 +1599,7 @@ hsl_subscript(PyObject *self, PyObject *item)
|
|||
return NULL;
|
||||
return hsl_getitem(self, i);
|
||||
} else if (PySlice_Check(item)) {
|
||||
int start, stop, step, slicelength, cur, i;
|
||||
Py_ssize_t start, stop, step, slicelength, cur, i;
|
||||
PyObject *ret;
|
||||
|
||||
if (PySlice_GetIndicesEx((PySliceObject*)item, 4,
|
||||
|
@ -1644,7 +1645,7 @@ hsl_subscript(PyObject *self, PyObject *item)
|
|||
}
|
||||
|
||||
static PyMappingMethods hsl_as_mapping = {
|
||||
(inquiry)hsl_length,
|
||||
hsl_length,
|
||||
(binaryfunc)hsl_subscript,
|
||||
(objobjargproc)0
|
||||
};
|
||||
|
@ -1999,14 +2000,14 @@ static PyGetSetDef cmyk_getsets[] = {
|
|||
{ NULL, (getter)0, (setter)0 },
|
||||
};
|
||||
|
||||
static int
|
||||
static Py_ssize_t
|
||||
cmyk_length(PyObject *self)
|
||||
{
|
||||
return 5;
|
||||
}
|
||||
|
||||
static PyObject *
|
||||
cmyk_getitem(PyObject *self, int pos)
|
||||
cmyk_getitem(PyObject *self, Py_ssize_t pos)
|
||||
{
|
||||
GimpCMYK *cmyk;
|
||||
double val;
|
||||
|
@ -2059,10 +2060,10 @@ cmyk_setitem(PyObject *self, int pos, PyObject *value)
|
|||
}
|
||||
|
||||
static PyObject *
|
||||
cmyk_slice(PyObject *self, int start, int end)
|
||||
cmyk_slice(PyObject *self, Py_ssize_t start, Py_ssize_t end)
|
||||
{
|
||||
PyTupleObject *ret;
|
||||
int i;
|
||||
Py_ssize_t i;
|
||||
|
||||
if (start < 0)
|
||||
start = 0;
|
||||
|
@ -2082,13 +2083,13 @@ cmyk_slice(PyObject *self, int start, int end)
|
|||
}
|
||||
|
||||
static PySequenceMethods cmyk_as_sequence = {
|
||||
(inquiry)cmyk_length,
|
||||
cmyk_length,
|
||||
(binaryfunc)0,
|
||||
(intargfunc)0,
|
||||
(intargfunc)cmyk_getitem,
|
||||
(intintargfunc)cmyk_slice,
|
||||
(intobjargproc)cmyk_setitem,
|
||||
(intintobjargproc)0,
|
||||
0,
|
||||
cmyk_getitem,
|
||||
cmyk_slice,
|
||||
cmyk_setitem,
|
||||
0,
|
||||
(objobjproc)0,
|
||||
};
|
||||
|
||||
|
@ -2104,7 +2105,7 @@ cmyk_subscript(PyObject *self, PyObject *item)
|
|||
return NULL;
|
||||
return cmyk_getitem(self, i);
|
||||
} else if (PySlice_Check(item)) {
|
||||
int start, stop, step, slicelength, cur, i;
|
||||
Py_ssize_t start, stop, step, slicelength, cur, i;
|
||||
PyObject *ret;
|
||||
|
||||
if (PySlice_GetIndicesEx((PySliceObject*)item, 5,
|
||||
|
@ -2153,7 +2154,7 @@ cmyk_subscript(PyObject *self, PyObject *item)
|
|||
}
|
||||
|
||||
static PyMappingMethods cmyk_as_mapping = {
|
||||
(inquiry)cmyk_length,
|
||||
cmyk_length,
|
||||
(binaryfunc)cmyk_subscript,
|
||||
(objobjargproc)0
|
||||
};
|
||||
|
|
|
@ -46,7 +46,7 @@ pygimp_display_new(gint32 ID)
|
|||
{
|
||||
PyGimpDisplay *self;
|
||||
|
||||
if (ID == -1) {
|
||||
if (!gimp_display_is_valid(ID)) {
|
||||
Py_INCREF(Py_None);
|
||||
return Py_None;
|
||||
}
|
||||
|
|
|
@ -1202,21 +1202,16 @@ pygimp_drawable_new(GimpDrawable *drawable, gint32 ID)
|
|||
{
|
||||
PyObject *self;
|
||||
|
||||
if (drawable == NULL && ID == -1) {
|
||||
if (drawable != NULL)
|
||||
ID = drawable->drawable_id;
|
||||
|
||||
if (!gimp_drawable_is_valid(ID)) {
|
||||
Py_INCREF(Py_None);
|
||||
return Py_None;
|
||||
}
|
||||
|
||||
if (drawable != NULL)
|
||||
ID = drawable->drawable_id;
|
||||
|
||||
/* create the appropriate object type */
|
||||
|
||||
/* avoids calling gimp_drawable_is_layer with an invalid id
|
||||
* pygimp_channel_new handles it cleanly
|
||||
*/
|
||||
if (gimp_drawable_is_valid(ID) &&
|
||||
gimp_drawable_is_layer(ID))
|
||||
if (gimp_drawable_is_layer(ID))
|
||||
self = pygimp_layer_new(ID);
|
||||
else
|
||||
self = pygimp_channel_new(ID);
|
||||
|
@ -1224,6 +1219,7 @@ pygimp_drawable_new(GimpDrawable *drawable, gint32 ID)
|
|||
if (self == NULL)
|
||||
return NULL;
|
||||
|
||||
if (PyObject_TypeCheck(self, &PyGimpDrawable_Type))
|
||||
((PyGimpDrawable *)self)->drawable = drawable;
|
||||
|
||||
return self;
|
||||
|
@ -1692,7 +1688,7 @@ lay_repr(PyGimpLayer *self)
|
|||
gchar *name;
|
||||
|
||||
name = gimp_drawable_get_name(self->ID);
|
||||
s = PyString_FromFormat("<gimp.Layer '%s'>", name);
|
||||
s = PyString_FromFormat("<gimp.Layer '%s'>", name ? name : "(null)");
|
||||
g_free(name);
|
||||
|
||||
return s;
|
||||
|
@ -1778,7 +1774,7 @@ pygimp_layer_new(gint32 ID)
|
|||
{
|
||||
PyGimpLayer *self;
|
||||
|
||||
if (ID == -1) {
|
||||
if (!gimp_drawable_is_valid(ID) || !gimp_drawable_is_layer(ID)) {
|
||||
Py_INCREF(Py_None);
|
||||
return Py_None;
|
||||
}
|
||||
|
@ -1971,7 +1967,7 @@ chn_repr(PyGimpChannel *self)
|
|||
gchar *name;
|
||||
|
||||
name = gimp_drawable_get_name(self->ID);
|
||||
s = PyString_FromFormat("<gimp.Channel '%s'>", name);
|
||||
s = PyString_FromFormat("<gimp.Channel '%s'>", name ? name : "(null)");
|
||||
g_free(name);
|
||||
|
||||
return s;
|
||||
|
@ -2066,7 +2062,7 @@ pygimp_channel_new(gint32 ID)
|
|||
{
|
||||
PyGimpChannel *self;
|
||||
|
||||
if (ID == -1) {
|
||||
if (!gimp_drawable_is_valid(ID) || !gimp_drawable_is_channel(ID)) {
|
||||
Py_INCREF(Py_None);
|
||||
return Py_None;
|
||||
}
|
||||
|
|
|
@ -1314,7 +1314,7 @@ pygimp_image_new(gint32 ID)
|
|||
{
|
||||
PyGimpImage *self;
|
||||
|
||||
if (ID == -1) {
|
||||
if (!gimp_image_is_valid(ID)) {
|
||||
Py_INCREF(Py_None);
|
||||
return Py_None;
|
||||
}
|
||||
|
|
|
@ -820,7 +820,7 @@ pf_call(PyGimpPDBFunction *self, PyObject *args, PyObject *kwargs)
|
|||
#endif
|
||||
|
||||
if (kwargs) {
|
||||
int len, pos;
|
||||
Py_ssize_t len, pos;
|
||||
PyObject *key, *val;
|
||||
|
||||
len = PyDict_Size(kwargs);
|
||||
|
|
|
@ -146,10 +146,10 @@ tile_repr(PyGimpTile *self)
|
|||
return s;
|
||||
}
|
||||
|
||||
static int
|
||||
tile_length(PyGimpTile *self)
|
||||
static Py_ssize_t
|
||||
tile_length(PyObject *self)
|
||||
{
|
||||
return self->tile->ewidth * self->tile->eheight;
|
||||
return ((PyGimpTile*)self)->tile->ewidth * ((PyGimpTile*)self)->tile->eheight;
|
||||
}
|
||||
|
||||
static PyObject *
|
||||
|
@ -251,7 +251,7 @@ tile_ass_sub(PyGimpTile *self, PyObject *v, PyObject *w)
|
|||
}
|
||||
|
||||
static PyMappingMethods tile_as_mapping = {
|
||||
(inquiry)tile_length, /*length*/
|
||||
tile_length, /*length*/
|
||||
(binaryfunc)tile_subscript, /*subscript*/
|
||||
(objobjargproc)tile_ass_sub, /*ass_sub*/
|
||||
};
|
||||
|
@ -358,8 +358,8 @@ pr_dealloc(PyGimpPixelRgn *self)
|
|||
|
||||
/* Code to access pr objects as mappings */
|
||||
|
||||
static int
|
||||
pr_length(PyGimpPixelRgn *self)
|
||||
static Py_ssize_t
|
||||
pr_length(PyObject *self)
|
||||
{
|
||||
PyErr_SetString(pygimp_error, "Can't get size of pixel region");
|
||||
return -1;
|
||||
|
@ -371,7 +371,7 @@ pr_subscript(PyGimpPixelRgn *self, PyObject *key)
|
|||
GimpPixelRgn *pr = &(self->pr);
|
||||
int bpp = pr->bpp;
|
||||
PyObject *x, *y;
|
||||
int x1, y1, x2, y2, xs, ys;
|
||||
Py_ssize_t x1, y1, x2, y2, xs, ys;
|
||||
|
||||
if (!PyTuple_Check(key) || PyTuple_Size(key) != 2) {
|
||||
PyErr_SetString(PyExc_TypeError, "subscript must be a 2-tuple");
|
||||
|
@ -480,7 +480,7 @@ pr_ass_sub(PyGimpPixelRgn *self, PyObject *v, PyObject *w)
|
|||
int bpp = pr->bpp;
|
||||
PyObject *x, *y;
|
||||
guchar *buf;
|
||||
int len, x1, x2, xs, y1, y2, ys;
|
||||
Py_ssize_t len, x1, x2, xs, y1, y2, ys;
|
||||
|
||||
if (w == NULL) {
|
||||
PyErr_SetString(PyExc_TypeError, "can't delete subscripts");
|
||||
|
@ -592,7 +592,7 @@ pr_ass_sub(PyGimpPixelRgn *self, PyObject *v, PyObject *w)
|
|||
}
|
||||
|
||||
static PyMappingMethods pr_as_mapping = {
|
||||
(inquiry)pr_length, /*mp_length*/
|
||||
pr_length, /*mp_length*/
|
||||
(binaryfunc)pr_subscript, /*mp_subscript*/
|
||||
(objobjargproc)pr_ass_sub, /*mp_ass_subscript*/
|
||||
};
|
||||
|
|
|
@ -981,7 +981,7 @@ pygimp_vectors_new(gint32 ID)
|
|||
{
|
||||
PyGimpVectors *self;
|
||||
|
||||
if (ID == -1) {
|
||||
if (!gimp_vectors_is_valid(ID)) {
|
||||
Py_INCREF(Py_None);
|
||||
return Py_None;
|
||||
}
|
||||
|
|
|
@ -27,6 +27,12 @@
|
|||
#define _INSIDE_PYGIMP_
|
||||
#include "pygimp-api.h"
|
||||
|
||||
#if PY_VERSION_HEX < 0x02050000 && !defined(PY_SSIZE_T_MIN)
|
||||
typedef int Py_ssize_t;
|
||||
#define PY_SSIZE_T_MAX INT_MAX
|
||||
#define PY_SSIZE_T_MIN INT_MIN
|
||||
#endif
|
||||
|
||||
G_BEGIN_DECLS
|
||||
|
||||
extern PyObject *pygimp_error;
|
||||
|
|
Loading…
Reference in a new issue