> > The function gimp-drawable-type-with-alpha wasn't
> > completely guarded. Calling it with a non-existent
> > drawable would cause a crash.
The fact that you can feed gimp with a bad drawable through the PDB and
make it crash, is indeed a bug. I have looked into the code in
app/drawable_cmds.c and I wonder why the validity of the passed
drawable_ID is not always checked. This code is autogenerated and it
looks that the check is disabled by default and is only enabled for
a few of gimp_drawable_ PDB calls.
Yosh, is this intentional? Otherwise please apply the attached patch
which makes all PDB calls check the validity of the drawable_ID.
Salut, Sven
Index: drawable.pdb
===================================================================
RCS file: /cvs/gnome/gimp/tools/pdbgen/pdb/drawable.pdb,v
retrieving revision 1.19
diff -u -r1.19 drawable.pdb
--- drawable.pdb 1999/12/26 07:54:39 1.19
+++ drawable.pdb 2000/01/31 17:35:00
@@ -20,13 +20,11 @@
sub drawable_arg {{
name => 'drawable',
type => 'drawable',
- desc => 'The drawable',
- no_success => 1
+ desc => 'The drawable'
}}
sub drawable_coord_args {
@inargs = ( &drawable_arg );
- delete $inargs[0]->{no_success};
foreach (qw(x y)) {
push @inargs, { name => "${_}_coord", type => '0 <= int32',
@@ -104,7 +102,6 @@
{ name => 'undo', type => 'boolean',
desc => 'Push merge to undo stack?' }
);
- delete $inargs[0]->{no_success};
%invoke = ( code => 'drawable_merge_shadow (drawable, undo);' );
}
@@ -130,7 +127,6 @@
{ name => 'fill_type', type => 'enum GimpFillType',
desc => 'The type of fill: %%desc%%' }
);
- delete $inargs[0]->{no_success};
%invoke = ( code => 'drawable_fill (drawable, (GimpFillType) fill_type);' );
}
@@ -214,8 +210,6 @@
$outargs[0]->{desc} = "The drawable's image";
$outargs[0]->{init} = 1;
- delete $inargs[0]->{no_success};
-
%invoke = (
code => 'success = (gimage = drawable_gimage (drawable)) != NULL;'
);
@@ -226,8 +220,6 @@
&drawable_prop_proc("the drawable's type", 'type', 'enum GimpImageType',
'type', "The drawable's type: { %%desc%% }");
-
- delete $inargs[0]->{no_success};
}
sub drawable_has_alpha {
@@ -425,7 +417,6 @@
&drawable_arg,
&std_image_arg
);
- delete $inargs[0]->{no_success};
%invoke = ( code => 'gimp_drawable_set_gimage (drawable, gimage);' );
}
@@ -461,7 +452,6 @@
desc => 'The thumbnail height',
alias => 'req_height' }
);
- delete $inargs[0]->{no_success};
@outargs = (
&dim_args,