Pickler enters infinite recursion with self-referential classes
- Dominant language
- Java
- Stars
- 8.7k
- Forks
- 4.7k
- Avg merge
- 1d 20h
- Merged PRs (30d)
- 196
Description
The pickler recurses infinitely and dies with maximum recursion limit exceeded when a module contains a self-referential class (or any class which is part of a cycle).
Here's a minimal example:
```
class RecursiveClass(object):
SELF_TYPE = None
def __init__(self, datum)
self.datum = 'RecursiveClass:%s'
% datum
RecursiveClass.SELF_TYPE = RecursiveClass
```
If this is in a module, then the pickler will enter the infinite recursion when trying to pickle any nested class in that module.
An actual example is with typing.Type, which is part of a cycle typing.Type -\> type -\> object -\> typing.Type. If a module contains an attribute that refers to typing.Type, such as a type alias, it will trigger this bug.
Imported from Jira [BEAM-4036](https://issues.apache.org/jira/browse/BEAM-4036). Original Jira may contain additional context.
Reported by: chuanyu.
Contributor guide
Assessment
This issue has not been assessed yet.