[Python-Dev] Type-converting functions, esp. unicode() vs. unistr()
Thomas Wouters
thomas@xs4all.net
Thu, 18 Jan 2001 17:43:49 +0100
On Thu, Jan 18, 2001 at 02:14:19AM -0800, Ka-Ping Yee wrote:
> Wow!! __complex__ can produce a segfault!
> >>> complex
> <built-in function complex>
> >>> class Foo:
> ... def __complex__(self): return 3
> ...
> >>> Foo()
> <__main__.Foo instance at 0x81e8684>
> >>> f = _
> >>> complex(f)
> Segmentation fault (core dumped)
> This happens because builtin_complex first retrieves and saves
> the PyNumberMethods of the argument (in this case, from the
> instance), then tries to call __complex__ (in this case, returning 3),
> and THEN coerces the result using nbr->nb_float if the result is
> not complex! (This calls the instance's nb_float method on the
> integer object 3!!)
I've noticed that lurking bug in the coercion code when I added augmented
assignment, though I don't recall whether I fixed it then, nor do I know if
that part's been "touched" by the recent coercion changes. If none of the
coercion champions speak up, I'll look at this sometime this weekend.
--
Thomas Wouters <thomas@xs4all.net>
Hi! I'm a .signature virus! copy me into your .signature file to help me spread!