Forward port of 51850 from release25-maint branch.

As mentioned on python-dev, reverting patch #1504333 because it introduced
an infinite loop in rev 47154.

This patch also adds a test to prevent the regression.
4 files changed