Is this the intended behavior then? I don't get the rationale for that change.
There is no way to completely supress traceback information now; for sys.tracebacklimit to be of any significance, it must be >= 1; 0 and negative values behave the same as it not being set (that is, a full traceback is printed).

Either code or doc must change (with 'version changed' note). Doc: "The default is 1000. When set to 0 or less, all traceback information is suppressed and only the exception type and value are printed."
Christian's patch: "values <= 0 are replaced with a default value to avoid infinite recursion and other issues." Default is 1000.
I do not see the logic of changing 'nothing' to 'everything'. I am puzzled how printing nothing causes infinite recursion.

Do you mind to create a pull request on GitHub Anand?
Issue31949 fixes this and several other bugs in PyTraceBack_Print(), but it may be worth to fix this bug first, especially if the patch contains tests.