From: Phil Muldoon <pmuldoon@redhat.com>
To: Sanimir Agovic <sanimir.agovic@intel.com>
Cc: gdb-patches@sourceware.org
Subject: Re: [PATCH 1/2] python: disallow python code to instanciate certain types
Date: Fri, 30 Aug 2013 15:08:00 -0000 [thread overview]
Message-ID: <5220B578.6030100@redhat.com> (raw)
In-Reply-To: <1377873604-15519-2-git-send-email-sanimir.agovic@intel.com>
On 30/08/13 15:40, Sanimir Agovic wrote:
> I simply followed the pattern used for gdb.Type and assign NULL to tp_new
> thus the type cannot be created from python code.
>
> before>
> (gdb) python gdb.Frame()
> (gdb)
>
> after>
> (gdb) python gdb.Frame()
> Traceback (most recent call last):
> File "<string>", line 1, in <module>
> TypeError: cannot create 'gdb.Frame' instances
> Error while executing Python code.
>
> 2013-08-30 Sanimir Agovic <sanimir.agovic@intel.com>
Thanks.
> -static PyObject *
> -objfpy_new (PyTypeObject *type, PyObject *args, PyObject *keywords)
> -{
> - objfile_object *self = (objfile_object *) type->tp_alloc (type, 0);
> -
> - if (self)
> - {
> - self->objfile = NULL;
> -
> - self->printers = PyList_New (0);
> - if (!self->printers)
> - {
> - Py_DECREF (self);
> - return NULL;
> - }
> -
> - self->frame_filters = PyDict_New ();
> - if (!self->frame_filters)
> - {
> - Py_DECREF (self);
> - return NULL;
> - }
> -
> - self->type_printers = PyList_New (0);
> - if (!self->type_printers)
> - {
> - Py_DECREF (self);
> - return NULL;
> - }
> - }
> - return (PyObject *) self;
> -}
In removing this function, you are removing the instantiation of
self->printers (Which is needed for pretty-printers),
self->frame-filters (for frame filters) and self->type_printers (for
type printers). If this is the case, and I have not missed an
equivalent instantiation somewhere else, you will have an
uninitialized PyObject for each of the above and likely will result in
a crash? I'm surprised this did not crash GDB. Each object file
keeps a separate list or dictionary of frame filters, pretty printers
and type printers that may be populated for object file specific
scenarios (like auto-loading). Also, I suspect the corresponding
clean-up function for these objects will crash when they are freed.
> -static PyObject *
> -pspy_new (PyTypeObject *type, PyObject *args, PyObject *keywords)
> -{
> - pspace_object *self = (pspace_object *) type->tp_alloc (type, 0);
> -
> - if (self)
> - {
> - self->pspace = NULL;
> -
> - self->printers = PyList_New (0);
> - if (!self->printers)
> - {
> - Py_DECREF (self);
> - return NULL;
> - }
> -
> - self->frame_filters = PyDict_New ();
> - if (!self->frame_filters)
> - {
> - Py_DECREF (self);
> - return NULL;
> - }
> -
> - self->type_printers = PyList_New (0);
> - if (!self->type_printers)
> - {
> - Py_DECREF (self);
> - return NULL;
> - }
> - }
> - return (PyObject *) self;
> -}
> -
Ditto, same with object files above.
Cheers,
Phil
next prev parent reply other threads:[~2013-08-30 15:08 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-08-30 14:40 [PATCH 0/2] prevent gdb.Frame/Objfile and other types to be instanciated Sanimir Agovic
2013-08-30 14:40 ` [PATCH 1/2] python: disallow python code to instanciate certain types Sanimir Agovic
2013-08-30 15:08 ` Phil Muldoon [this message]
2013-10-10 19:08 ` Tom Tromey
2013-10-10 19:06 ` Tom Tromey
2013-08-30 14:40 ` [PATCH 2/2] test: ensure certain types exposed to python are not instancable Sanimir Agovic
2013-10-10 19:14 ` Tom Tromey
2013-10-10 19:59 ` Paul_Koning
2013-10-10 19:10 ` [PATCH 0/2] prevent gdb.Frame/Objfile and other types to be instanciated Tom Tromey
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=5220B578.6030100@redhat.com \
--to=pmuldoon@redhat.com \
--cc=gdb-patches@sourceware.org \
--cc=sanimir.agovic@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox