Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
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


  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