Re: fetching unset GParamSpec property
- From: Torsten Schoenfeld <kaffeetisch gmx de>
- To: gtk-perl-list gnome org
- Subject: Re: fetching unset GParamSpec property
- Date: Sun, 13 Jul 2008 17:35:59 +0200
Kevin Ryde wrote:
The program below gets some errors followed by a segv
GLib-GObject-CRITICAL **: g_param_spec_ref: assertion `G_IS_PARAM_SPEC (pspec)' failed at
/home/gg/bug/default-value/param-null.pl line 19.
GLib-GObject-CRITICAL **: g_param_spec_sink: assertion `G_IS_PARAM_SPEC (pspec)' failed at
/home/gg/bug/default-value/param-null.pl line 19.
GLib-GObject-CRITICAL **: g_param_spec_get_name: assertion `G_IS_PARAM_SPEC (pspec)' failed at
/home/gg/bug/default-value/param-null.pl line 19.
I guess newSVGParamSpec() expect NULL. Is it meant to? Or is it up to
_gperl_sv_from_value_internal(), per below?
I think newSVGParamSpec should follow the precedent of gperl_new_object,
gperl_new_boxed, and newSVGChar -- accept NULL and return undef. As in the
attached patch.
muppet?
--
Bye,
-Torsten
Index: GParamSpec.xs
===================================================================
RCS file: /cvsroot/gtk2-perl/gtk2-perl-xs/Glib/GParamSpec.xs,v
retrieving revision 1.23
diff -u -d -p -r1.23 GParamSpec.xs
--- GParamSpec.xs 17 Oct 2005 19:26:09 -0000 1.23
+++ GParamSpec.xs 13 Jul 2008 15:34:57 -0000
@@ -147,6 +147,9 @@ newSVGParamSpec (GParamSpec * pspec)
HV * stash;
const char * package;
+ if (!pspec)
+ return &PL_sv_undef;
+
g_param_spec_ref (pspec);
g_param_spec_sink (pspec);
Index: t/e.t
===================================================================
RCS file: /cvsroot/gtk2-perl/gtk2-perl-xs/Glib/t/e.t,v
retrieving revision 1.2
diff -u -d -p -r1.2 e.t
--- t/e.t 20 Oct 2004 17:33:56 -0000 1.2
+++ t/e.t 13 Jul 2008 15:34:57 -0000
@@ -1,9 +1,10 @@
+#!/usr/bin/perl
#
# ParamSpec stuff.
#
use strict;
use Glib ':constants';
-use Test::More tests => 231;
+use Test::More tests => 232;
# first register some types with which to play below.
@@ -204,3 +205,13 @@ Glib::Type->register (
foreach (@params) {
is ($_->get_owner_type, 'Bar', ref($_)." owner type after adding");
}
+
+
+
+#
+# verify that NULL param specs are handled gracefully
+#
+
+my $object = Bar->new;
+my $x = $object->get ('param_spec');
+is ($x, undef);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]