[Patches] [ python-Patches-1552731 ] Fix error checks and leaks in setobject.c

SourceForge.net noreply at sourceforge.net
Thu Sep 7 09:05:54 CEST 2006


Patches item #1552731, was opened at 2006-09-05 07:47
Message generated for change (Comment added) made by nnorwitz
You can respond by visiting: 
https://sourceforge.net/tracker/?func=detail&atid=305470&aid=1552731&group_id=5470

Please note that this message will contain a full copy of the comment thread,
including the initial issue submission, for this request,
not just the latest update.
Category: Core (C code)
Group: Python 2.5
Status: Open
Resolution: Accepted
Priority: 7
Submitted By: Raymond Hettinger (rhettinger)
Assigned to: Raymond Hettinger (rhettinger)
Summary: Fix error checks and leaks in setobject.c

Initial Comment:
Check return values for errors.

Fix refcounts on the error returns;

----------------------------------------------------------------------

>Comment By: Neal Norwitz (nnorwitz)
Date: 2006-09-07 00:05

Message:
Logged In: YES 
user_id=33168

rev 51798 for 2.6 was checked in.

Georg, true. I was thinking that something like this would
be nicer:

	int rv = set_contains_key(so, key);
	if (rv == -1 ||
 	    (rv != 0 && set_add_key(result, key) == -1)) {

I figured the transformation would be easy.  But now that I
look at the code above, I really don't like that at all. 
The only other solution I can think of is to use a goto:

	int rv = set_contains_key(so, key);
	if (rv == -1)
		goto some_error;
	if (rv) {
		if (set_add_key(result, key) == -1) {
some_error:

I'm not really sure I like that either.  So basically no
matter which way the code looks, I'm not gonna be happy. :-)
 Oh well.

Raymond, were you planning on backporting this or did you
want someone else to?  I volunteer to backport to 2.4. ;-)

----------------------------------------------------------------------

Comment By: Georg Brandl (gbrandl)
Date: 2006-09-06 00:09

Message:
Logged In: YES 
user_id=849994

That misses the possibility of set_contains_key's return
value being 0.

----------------------------------------------------------------------

Comment By: Neal Norwitz (nnorwitz)
Date: 2006-09-06 00:04

Message:
Logged In: YES 
user_id=33168

This is fine.  Though I wonder if hunks like this:

-		if (set_contains_key(so, key)) {
+		int rv = set_contains_key(so, key);
+		if (rv == -1) {
+			Py_DECREF(it);
+			Py_DECREF(result);
+			Py_DECREF(key);
+			return NULL;
+		}
+		if (rv) {
 			if (set_add_key(result, key) == -1) {


would be clearer (to me at least) more like:

	if (set_contains_key(so, key) == -1 ||
 	    set_add_key(result, key) == -1) {

That ensures the cleanup is the same.  There are several
similar hunks.

----------------------------------------------------------------------

Comment By: Georg Brandl (gbrandl)
Date: 2006-09-05 23:54

Message:
Logged In: YES 
user_id=849994

Shouldn't this go into 2.5 final?

----------------------------------------------------------------------

You can respond by visiting: 
https://sourceforge.net/tracker/?func=detail&atid=305470&aid=1552731&group_id=5470


More information about the Patches mailing list