pFad - Phone/Frame/Anonymizer/Declutterfier! Saves Data!


--- a PPN by Garber Painting Akron. With Image Size Reduction included!

URL: http://github.com/python/cpython/commit/d22fc0bc7de7882da204abe50884bbde2da4f9e7

bpo-32962: python-gdb catchs UnicodeDecodeError (GH-7693) · python/cpython@d22fc0b · GitHub
Skip to content

Commit d22fc0b

Browse files
authored
bpo-32962: python-gdb catchs UnicodeDecodeError (GH-7693)
python-gdb now catchs UnicodeDecodeError exceptions when calling string().
1 parent 019d33b commit d22fc0b

2 files changed

Lines changed: 18 additions & 10 deletions

File tree

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
python-gdb now catchs ``UnicodeDecodeError`` exceptions when calling
2+
``string()``.

Tools/gdb/libpython.py

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -270,12 +270,13 @@ def is_optimized_out(self):
270270

271271
def safe_tp_name(self):
272272
try:
273-
return self.type().field('tp_name').string()
274-
except NullPyObjectPtr:
275-
# NULL tp_name?
276-
return 'unknown'
277-
except RuntimeError:
278-
# Can't even read the object at all?
273+
ob_type = self.type()
274+
tp_name = ob_type.field('tp_name')
275+
return tp_name.string()
276+
# NullPyObjectPtr: NULL tp_name?
277+
# RuntimeError: Can't even read the object at all?
278+
# UnicodeDecodeError: Failed to decode tp_name bytestring
279+
except (NullPyObjectPtr, RuntimeError, UnicodeDecodeError):
279280
return 'unknown'
280281

281282
def proxyval(self, visited):
@@ -349,7 +350,9 @@ def subclass_from_type(cls, t):
349350
try:
350351
tp_name = t.field('tp_name').string()
351352
tp_flags = int(t.field('tp_flags'))
352-
except RuntimeError:
353+
# RuntimeError: NULL pointers
354+
# UnicodeDecodeError: string() fails to decode the bytestring
355+
except (RuntimeError, UnicodeDecodeError):
353356
# Handle any kind of error e.g. NULL ptrs by simply using the base
354357
# class
355358
return cls
@@ -617,7 +620,10 @@ class PyCFunctionObjectPtr(PyObjectPtr):
617620

618621
def proxyval(self, visited):
619622
m_ml = self.field('m_ml') # m_ml is a (PyMethodDef*)
620-
ml_name = m_ml['ml_name'].string()
623+
try:
624+
ml_name = m_ml['ml_name'].string()
625+
except UnicodeDecodeError:
626+
ml_name = '<ml_name:UnicodeDecodeError>'
621627

622628
pyop_m_self = self.pyop_field('m_self')
623629
if pyop_m_self.is_null():
@@ -1340,13 +1346,13 @@ def safe_name(self):
13401346
try:
13411347
name = self.field('descr')['d_base']['name'].string()
13421348
return repr(name)
1343-
except (NullPyObjectPtr, RuntimeError):
1349+
except (NullPyObjectPtr, RuntimeError, UnicodeDecodeError):
13441350
return '<unknown name>'
13451351

13461352
def safe_tp_name(self):
13471353
try:
13481354
return self.field('self')['ob_type']['tp_name'].string()
1349-
except (NullPyObjectPtr, RuntimeError):
1355+
except (NullPyObjectPtr, RuntimeError, UnicodeDecodeError):
13501356
return '<unknown tp_name>'
13511357

13521358
def safe_self_addresss(self):

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad © 2024 Your Company Name. All rights reserved.





Check this box to remove all script contents from the fetched content.



Check this box to remove all images from the fetched content.


Check this box to remove all CSS styles from the fetched content.


Check this box to keep images inefficiently compressed and original size.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy