aboutsummaryrefslogtreecommitdiff
path: root/gdb/python
diff options
context:
space:
mode:
authorPhil Muldoon <pmuldoon@redhat.com>2009-02-26 20:45:21 +0000
committerPhil Muldoon <pmuldoon@redhat.com>2009-02-26 20:45:21 +0000
commit83390453c399fd336223ba1cfbcd77d5bef4c2cb (patch)
treede219623bbdfc3f3c73e4014331bcce22c13b67d /gdb/python
parenta0740d21fab1a24e058a517d17bfb80f166ff9e1 (diff)
downloadfsf-binutils-gdb-83390453c399fd336223ba1cfbcd77d5bef4c2cb.zip
fsf-binutils-gdb-83390453c399fd336223ba1cfbcd77d5bef4c2cb.tar.gz
fsf-binutils-gdb-83390453c399fd336223ba1cfbcd77d5bef4c2cb.tar.bz2
2009-02-26 Phil Muldoon <pmuldoon@redhat.com>
* python/python-utils.c (python_string_to_unicode): Always return a new reference. (python_string_to_target_string): Decrement transient python instance. (python_string_to_host_string): Likewise.
Diffstat (limited to 'gdb/python')
-rw-r--r--gdb/python/python-utils.c16
1 files changed, 13 insertions, 3 deletions
diff --git a/gdb/python/python-utils.c b/gdb/python/python-utils.c
index b0ec7b3..ddac2f5 100644
--- a/gdb/python/python-utils.c
+++ b/gdb/python/python-utils.c
@@ -81,7 +81,11 @@ python_string_to_unicode (PyObject *obj)
/* If obj is already a unicode string, just return it.
I wish life was always that simple... */
if (PyUnicode_Check (obj))
- unicode_str = obj;
+ {
+ unicode_str = obj;
+ Py_INCREF (obj);
+ }
+
else if (PyString_Check (obj))
unicode_str = PyUnicode_FromEncodedObject (obj, host_charset (), NULL);
else
@@ -136,12 +140,15 @@ char *
python_string_to_target_string (PyObject *obj)
{
PyObject *str;
+ char *result;
str = python_string_to_unicode (obj);
if (str == NULL)
return NULL;
- return unicode_to_target_string (str);
+ result = unicode_to_target_string (str);
+ Py_DECREF (str);
+ return result;
}
/* Converts a python string (8-bit or unicode) to a target string in
@@ -152,12 +159,15 @@ char *
python_string_to_host_string (PyObject *obj)
{
PyObject *str;
+ char *result;
str = python_string_to_unicode (obj);
if (str == NULL)
return NULL;
- return unicode_to_encoded_string (str, host_charset ());
+ result = unicode_to_encoded_string (str, host_charset ());
+ Py_DECREF (str);
+ return result;
}
/* Converts a target string of LENGTH bytes in the target's charset to a