| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
1 parent 019d33b commit d22fc0b
2 files changed
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -0,0 +1,2 @@ | |||
| 1 | + python-gdb now catchs ``UnicodeDecodeError`` exceptions when calling | ||
| 2 | + ``string()``. | ||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -270,12 +270,13 @@ def is_optimized_out(self): | |||
| 270 | 270 | ||
| 271 | 271 | def safe_tp_name(self): | |
| 272 | 272 | 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): | ||
| 279 | 280 | return 'unknown' | |
| 280 | 281 | ||
| 281 | 282 | def proxyval(self, visited): | |
@@ -349,7 +350,9 @@ def subclass_from_type(cls, t): | |||
| 349 | 350 | try: | |
| 350 | 351 | tp_name = t.field('tp_name').string() | |
| 351 | 352 | 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): | ||
| 353 | 356 | # Handle any kind of error e.g. NULL ptrs by simply using the base | |
| 354 | 357 | # class | |
| 355 | 358 | return cls | |
@@ -617,7 +620,10 @@ class PyCFunctionObjectPtr(PyObjectPtr): | |||
| 617 | 620 | ||
| 618 | 621 | def proxyval(self, visited): | |
| 619 | 622 | 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>' | ||
| 621 | 627 | ||
| 622 | 628 | pyop_m_self = self.pyop_field('m_self') | |
| 623 | 629 | if pyop_m_self.is_null(): | |
@@ -1340,13 +1346,13 @@ def safe_name(self): | |||
| 1340 | 1346 | try: | |
| 1341 | 1347 | name = self.field('descr')['d_base']['name'].string() | |
| 1342 | 1348 | return repr(name) | |
| 1343 | - except (NullPyObjectPtr, RuntimeError): | ||
| 1349 | + except (NullPyObjectPtr, RuntimeError, UnicodeDecodeError): | ||
| 1344 | 1350 | return '<unknown name>' | |
| 1345 | 1351 | ||
| 1346 | 1352 | def safe_tp_name(self): | |
| 1347 | 1353 | try: | |
| 1348 | 1354 | return self.field('self')['ob_type']['tp_name'].string() | |
| 1349 | - except (NullPyObjectPtr, RuntimeError): | ||
| 1355 | + except (NullPyObjectPtr, RuntimeError, UnicodeDecodeError): | ||
| 1350 | 1356 | return '<unknown tp_name>' | |
| 1351 | 1357 | ||
| 1352 | 1358 | def safe_self_addresss(self): | |
| Back | FazBrowse Home | New Git URL |
0 commit comments