2009-02-26 Phil Muldoon <pmuldoon@redhat.com>
authorPhil Muldoon <pmuldoon@redhat.com>
Thu, 26 Feb 2009 20:45:21 +0000 (20:45 +0000)
committerPhil Muldoon <pmuldoon@redhat.com>
Thu, 26 Feb 2009 20:45:21 +0000 (20:45 +0000)
        * 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.

gdb/ChangeLog
gdb/python/python-utils.c

index 02d0fc6..c7045cd 100644 (file)
@@ -1,4 +1,12 @@
-2009-02-26  Pedro Alves  <pedro@codesourcery.com>
+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.
+
+2007-02-26  Pedro Alves  <pedro@codesourcery.com>
 
        * mips-linux-nat.c (mips64_linux_fetch_registers): Pass `ops' to
        call to super_fetch_registers.
index b0ec7b3..ddac2f5 100644 (file)
@@ -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