From ef7dfcd5a3d4099459545473b7b761c17b626384 Mon Sep 17 00:00:00 2001 From: Chris Lamb Date: Thu, 21 Oct 2021 10:41:41 +0100 Subject: [PATCH] Make util.typing.restify sanitise unreproducible output (eg. memory addresses) Whilst working on the Reproducible Builds effort [0] I noticed that sphinx generates output that is not reproducible, causing a number of packages in Debian to unreproducible. Specifically, when Sphinx locates an alias of an instance when generating 'autodoc' documentation, it uses the raw Python repr(...) of the object and does not sanitise it for memory addresses (etc.) like elsewhere in Sphinx. This can result in documentation like this: -

alias of <webob.client.SendRequest object at 0x7fd769189df0>

+

alias of <webob.client.SendRequest object at 0x7f0f02233df0>

Patch attached that uses the object_description method, which was added to fix precisely this kind of issue. I originally filed this in Debian as bug #996948 [1]. [0] https://reproducible-builds.org/ [1] https://bugs.debian.org/996948 --- sphinx/util/typing.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sphinx/util/typing.py b/sphinx/util/typing.py index 87707d48f48..a2ab5f93102 100644 --- a/sphinx/util/typing.py +++ b/sphinx/util/typing.py @@ -144,7 +144,7 @@ def restify(cls: Optional[Type]) -> str: else: return _restify_py36(cls) except (AttributeError, TypeError): - return repr(cls) + return inspect.object_description(cls) def _restify_py37(cls: Optional[Type]) -> str: