mirror of
https://github.com/python/cpython.git
synced 2025-09-26 18:29:57 +00:00
bpo-32962: python-gdb catchs UnicodeDecodeError (GH-7693)
python-gdb now catchs UnicodeDecodeError exceptions when calling string().
This commit is contained in:
parent
019d33b7a4
commit
d22fc0bc7d
2 changed files with 18 additions and 10 deletions
|
@ -0,0 +1,2 @@
|
||||||
|
python-gdb now catchs ``UnicodeDecodeError`` exceptions when calling
|
||||||
|
``string()``.
|
|
@ -270,12 +270,13 @@ class PyObjectPtr(object):
|
||||||
|
|
||||||
def safe_tp_name(self):
|
def safe_tp_name(self):
|
||||||
try:
|
try:
|
||||||
return self.type().field('tp_name').string()
|
ob_type = self.type()
|
||||||
except NullPyObjectPtr:
|
tp_name = ob_type.field('tp_name')
|
||||||
# NULL tp_name?
|
return tp_name.string()
|
||||||
return 'unknown'
|
# NullPyObjectPtr: NULL tp_name?
|
||||||
except RuntimeError:
|
# RuntimeError: Can't even read the object at all?
|
||||||
# Can't even read the object at all?
|
# UnicodeDecodeError: Failed to decode tp_name bytestring
|
||||||
|
except (NullPyObjectPtr, RuntimeError, UnicodeDecodeError):
|
||||||
return 'unknown'
|
return 'unknown'
|
||||||
|
|
||||||
def proxyval(self, visited):
|
def proxyval(self, visited):
|
||||||
|
@ -349,7 +350,9 @@ class PyObjectPtr(object):
|
||||||
try:
|
try:
|
||||||
tp_name = t.field('tp_name').string()
|
tp_name = t.field('tp_name').string()
|
||||||
tp_flags = int(t.field('tp_flags'))
|
tp_flags = int(t.field('tp_flags'))
|
||||||
except RuntimeError:
|
# RuntimeError: NULL pointers
|
||||||
|
# UnicodeDecodeError: string() fails to decode the bytestring
|
||||||
|
except (RuntimeError, UnicodeDecodeError):
|
||||||
# Handle any kind of error e.g. NULL ptrs by simply using the base
|
# Handle any kind of error e.g. NULL ptrs by simply using the base
|
||||||
# class
|
# class
|
||||||
return cls
|
return cls
|
||||||
|
@ -617,7 +620,10 @@ class PyCFunctionObjectPtr(PyObjectPtr):
|
||||||
|
|
||||||
def proxyval(self, visited):
|
def proxyval(self, visited):
|
||||||
m_ml = self.field('m_ml') # m_ml is a (PyMethodDef*)
|
m_ml = self.field('m_ml') # m_ml is a (PyMethodDef*)
|
||||||
ml_name = m_ml['ml_name'].string()
|
try:
|
||||||
|
ml_name = m_ml['ml_name'].string()
|
||||||
|
except UnicodeDecodeError:
|
||||||
|
ml_name = '<ml_name:UnicodeDecodeError>'
|
||||||
|
|
||||||
pyop_m_self = self.pyop_field('m_self')
|
pyop_m_self = self.pyop_field('m_self')
|
||||||
if pyop_m_self.is_null():
|
if pyop_m_self.is_null():
|
||||||
|
@ -1340,13 +1346,13 @@ class wrapperobject(PyObjectPtr):
|
||||||
try:
|
try:
|
||||||
name = self.field('descr')['d_base']['name'].string()
|
name = self.field('descr')['d_base']['name'].string()
|
||||||
return repr(name)
|
return repr(name)
|
||||||
except (NullPyObjectPtr, RuntimeError):
|
except (NullPyObjectPtr, RuntimeError, UnicodeDecodeError):
|
||||||
return '<unknown name>'
|
return '<unknown name>'
|
||||||
|
|
||||||
def safe_tp_name(self):
|
def safe_tp_name(self):
|
||||||
try:
|
try:
|
||||||
return self.field('self')['ob_type']['tp_name'].string()
|
return self.field('self')['ob_type']['tp_name'].string()
|
||||||
except (NullPyObjectPtr, RuntimeError):
|
except (NullPyObjectPtr, RuntimeError, UnicodeDecodeError):
|
||||||
return '<unknown tp_name>'
|
return '<unknown tp_name>'
|
||||||
|
|
||||||
def safe_self_addresss(self):
|
def safe_self_addresss(self):
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue