Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Sanimir Agovic <sanimir.agovic@intel.com>
To: gdb-patches@sourceware.org
Cc: pmuldoon@redhat.com
Subject: [PATCH 1/2] python: disallow python code to instanciate certain types
Date: Fri, 30 Aug 2013 14:40:00 -0000	[thread overview]
Message-ID: <1377873604-15519-2-git-send-email-sanimir.agovic@intel.com> (raw)
In-Reply-To: <1377873604-15519-1-git-send-email-sanimir.agovic@intel.com>

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>

python/

	* py-arch.c (gdbpy_initialize_arch): Set tp_new implicitly to NULL.
	* py-block.c (gdbpy_initialize_blocks): Set tp_new implicitly to NULL.
	* py-frame.c (gdbpy_initialize_frames): Set tp_new implicitly to NULL.
	* py-objfile.c (objfpy_new): Remove function.
	(objfile_object_type): Set tp_new to NULL.
	* py-progspace.c (pspy_new): Remove function.
	(pspace_object_type): Set tp_new to NULL
	* py-symtab.c (gdbpy_initialize_symtabs): Set tp_new implicitly to NULL.

Change-Id: Ie9ced3d27f4a0660d160f651391a97ed7af4d1ce
---
 gdb/python/py-arch.c      |    1 -
 gdb/python/py-block.c     |    1 -
 gdb/python/py-frame.c     |    1 -
 gdb/python/py-objfile.c   |   35 +----------------------------------
 gdb/python/py-progspace.c |   35 +----------------------------------
 gdb/python/py-symtab.c    |    2 --
 6 files changed, 2 insertions(+), 73 deletions(-)

diff --git a/gdb/python/py-arch.c b/gdb/python/py-arch.c
index 7098a8a..464ffb3 100644
--- a/gdb/python/py-arch.c
+++ b/gdb/python/py-arch.c
@@ -235,7 +235,6 @@ int
 gdbpy_initialize_arch (void)
 {
   arch_object_data = gdbarch_data_register_post_init (arch_object_data_init);
-  arch_object_type.tp_new = PyType_GenericNew;
   if (PyType_Ready (&arch_object_type) < 0)
     return -1;
 
diff --git a/gdb/python/py-block.c b/gdb/python/py-block.c
index c74ac2c..b7a7264 100644
--- a/gdb/python/py-block.c
+++ b/gdb/python/py-block.c
@@ -428,7 +428,6 @@ del_objfile_blocks (struct objfile *objfile, void *datum)
 int
 gdbpy_initialize_blocks (void)
 {
-  block_object_type.tp_new = PyType_GenericNew;
   if (PyType_Ready (&block_object_type) < 0)
     return -1;
 
diff --git a/gdb/python/py-frame.c b/gdb/python/py-frame.c
index f960b08..5fd099e 100644
--- a/gdb/python/py-frame.c
+++ b/gdb/python/py-frame.c
@@ -620,7 +620,6 @@ frapy_richcompare (PyObject *self, PyObject *other, int op)
 int
 gdbpy_initialize_frames (void)
 {
-  frame_object_type.tp_new = PyType_GenericNew;
   if (PyType_Ready (&frame_object_type) < 0)
     return -1;
 
diff --git a/gdb/python/py-objfile.c b/gdb/python/py-objfile.c
index a954c9d..ddd6b79 100644
--- a/gdb/python/py-objfile.c
+++ b/gdb/python/py-objfile.c
@@ -69,39 +69,6 @@ objfpy_dealloc (PyObject *o)
   Py_TYPE (self)->tp_free (self);
 }
 
-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;
-}
-
 PyObject *
 objfpy_get_printers (PyObject *o, void *ignore)
 {
@@ -374,5 +341,5 @@ static PyTypeObject objfile_object_type =
   0,				  /* tp_dictoffset */
   0,				  /* tp_init */
   0,				  /* tp_alloc */
-  objfpy_new,			  /* tp_new */
+  0,				  /* tp_new */
 };
diff --git a/gdb/python/py-progspace.c b/gdb/python/py-progspace.c
index 98eeecc..6634aae 100644
--- a/gdb/python/py-progspace.c
+++ b/gdb/python/py-progspace.c
@@ -77,39 +77,6 @@ pspy_dealloc (PyObject *self)
   Py_TYPE (self)->tp_free (self);
 }
 
-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;
-}
-
 PyObject *
 pspy_get_printers (PyObject *o, void *ignore)
 {
@@ -361,5 +328,5 @@ static PyTypeObject pspace_object_type =
   0,				  /* tp_dictoffset */
   0,				  /* tp_init */
   0,				  /* tp_alloc */
-  pspy_new,			  /* tp_new */
+  0,				  /* tp_new */
 };
diff --git a/gdb/python/py-symtab.c b/gdb/python/py-symtab.c
index 006946c..269feb8 100644
--- a/gdb/python/py-symtab.c
+++ b/gdb/python/py-symtab.c
@@ -484,11 +484,9 @@ del_objfile_sal (struct objfile *objfile, void *datum)
 int
 gdbpy_initialize_symtabs (void)
 {
-  symtab_object_type.tp_new = PyType_GenericNew;
   if (PyType_Ready (&symtab_object_type) < 0)
     return -1;
 
-  sal_object_type.tp_new = PyType_GenericNew;
   if (PyType_Ready (&sal_object_type) < 0)
     return -1;
 
-- 
1.7.1.1


  reply	other threads:[~2013-08-30 14:40 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 ` Sanimir Agovic [this message]
2013-08-30 15:08   ` [PATCH 1/2] python: disallow python code to instanciate certain types Phil Muldoon
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=1377873604-15519-2-git-send-email-sanimir.agovic@intel.com \
    --to=sanimir.agovic@intel.com \
    --cc=gdb-patches@sourceware.org \
    --cc=pmuldoon@redhat.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