[ python-Bugs-1165306 ] Property access with decorator makes
interpreter crash
SourceForge.net
noreply at sourceforge.net
Sun Mar 27 23:16:54 CEST 2005
Bugs item #1165306, was opened at 2005-03-17 14:56
Message generated for change (Comment added) made by mwh
You can respond by visiting:
https://sourceforge.net/tracker/?func=detail&atid=105470&aid=1165306&group_id=5470
Category: Python Interpreter Core
Group: Python 2.3
Status: Open
Resolution: None
Priority: 6
Submitted By: Remy Blank (remyblank)
Assigned to: Michael Hudson (mwh)
Summary: Property access with decorator makes interpreter crash
Initial Comment:
The attached file makes the interpreter crash.
Basially, a method is decorated, and used as the getter
function for a property. Accessing the property
provokes the crash.
I get the following output (linux-2.6.10):
joe at pat TestCases $ ./crashTest.py
Creating instance
Getting value
Segmentation fault
Using python-2.3.4 from Gentoo, i.e. it has a few
patches from 2.3.5.
On Windows XP with python-2.4, I get a "Python has
encountered a problem and needs to close." dialog box.
----------------------------------------------------------------------
>Comment By: Michael Hudson (mwh)
Date: 2005-03-27 22:16
Message:
Logged In: YES
user_id=6656
> > remyblank: let me guess your code wasn't doing what
> > you thought it did? :)
>
> Err... Not sure what you mean... What would be the correct
> way to do what I thought it did?
Well, I don't know, but what it was doing was trying to create a method
bound to None...
I'll check this in soon.
----------------------------------------------------------------------
Comment By: Remy Blank (remyblank)
Date: 2005-03-17 20:13
Message:
Logged In: YES
user_id=568100
> remyblank: let me guess your code wasn't doing what you
thought it did? :)
Err... Not sure what you mean... What would be the correct
way to do what I thought it did?
The code was largely inspired by a Cookbook entry. These are
still my first steps with decorators, and I have to admit I
don't yet fully understand why I have to create a MethodType
manually.
----------------------------------------------------------------------
Comment By: Guido van Rossum (gvanrossum)
Date: 2005-03-17 18:43
Message:
Logged In: YES
user_id=6380
Looks OK on cursory inspection.
----------------------------------------------------------------------
Comment By: Michael Hudson (mwh)
Date: 2005-03-17 17:28
Message:
Logged In: YES
user_id=6656
Let's attach a test case too.
----------------------------------------------------------------------
Comment By: Michael Hudson (mwh)
Date: 2005-03-17 17:15
Message:
Logged In: YES
user_id=6656
Well, it's a bit more subtle than I thought:
>>> def f(): pass
...
>>> print f.__get__(1).im_class
None
The problem occurs when *both* im_self and im_class are None; and I'm
now reasonably convinced that calling the type object is the only way this
can be acheived. So a simple check along these lines in
instancemethod_new would suffice (patch attached), and seems less likely
to break code.
I suspect this has missed 2.4.1.
remyblank: let me guess your code wasn't doing what you thought it did? :)
----------------------------------------------------------------------
Comment By: Guido van Rossum (gvanrossum)
Date: 2005-03-17 17:03
Message:
Logged In: YES
user_id=6380
Looks like I wasn't finished with the thought when I checked
it in. I think I was trying to make instancemethod generally
useful as a currying primitive. That should probably be
considered more careful; please roll it back.
(I think it may have been part of the aborted experiment to
get rid of bound methods.)
Is there time to backport this to 2.4.1?
----------------------------------------------------------------------
Comment By: Michael Hudson (mwh)
Date: 2005-03-17 16:44
Message:
Logged In: YES
user_id=6656
Hmm. A little CVS log reading finds us this:
revision 2.170
date: 2003/04/09 19:35:08; author: gvanrossum; state: Exp; lines: +2 -2
branches: 2.170.10;
Make it possible to call instancemethod() with 2 arguments.
Guido, what was the motivation for this? Is it possible to create
instancemethods with im_class == NULL some other way? (If there is, I
don't see it).
Also, you didn't add a unit test <poke> (in fact, instancemethod_new only
gets called twice during a run of the test suite, both times with three
arguments).
----------------------------------------------------------------------
Comment By: Michael Hudson (mwh)
Date: 2005-03-17 15:17
Message:
Logged In: YES
user_id=6656
Confirmed, on 2.4 HEAD, even.
There's a lot going on in your test file that is unecessary, though; this is a
smaller test case:
types.MethodType(lambda :None, None)(1)
instancemethod_call doesn't seem to expect im_class to be NULL...
----------------------------------------------------------------------
You can respond by visiting:
https://sourceforge.net/tracker/?func=detail&atid=105470&aid=1165306&group_id=5470
More information about the Python-bugs-list
mailing list