[Python-Dev] Fw: Access violation when no memory
Fred L. Drake, Jr.
fdrake@beopen.com
Mon, 26 Jun 2000 08:46:23 -0700 (PDT)
Vladimir Marangozov writes:
> There are two possible fixes, and I'm not sure which one is better:
>
> a) Fix the Instance_New code, by freeing the instance on inst->in_dict
> allocation failure (without decref'ing the instance).
I think this is the right one; this *shold* be all that's ever
needed, and isolates the check to the cod ethat can experiance
failure.
> b) Fix the dealloc code, by checking whether in_dict is not NULL
> before proceeding with the __del__ finalization logic.
This protects against bad C code elsewhere that makes a mess of
existing objects by stepping around the API (such as by setting
inst->in_dict to NULL). I'm not sure we want to protect against that
since it could mask bugs (I doubt anyone would do that deliberatly, so
I feel safe calling it a bug!).
> Opinions?
And for free! So infer what you will about their worth. :)
> 2. In ceval.c, there are indeed cases where 'tb' and 'exc' are NULL on
> low-memory conditions. They are pushed on the stack, then popped with
> a segfault. The only reasonable behavior I get, after some testing,
> is by setting the tb and exc to Py_None if any of them is NULL before
> pushing them onto the stack. The program succeeds or the process is
> killed by the OS (tested on Linux).
>
> However, I'm not sure that setting tb and/or exc to Py_None, if NULL,
> makes any sense and won't cause side effects.
This doesn't seem like a situation where you'd be masking some other
kind of bug by using Py_None, and it avoids the core dump. Since
you're not masking anything, I'd go ahead and use Py_None here.
-Fred
--
Fred L. Drake, Jr. <fdrake at beopen.com>
BeOpen PythonLabs Team Member