diff --git a/CHANGES b/CHANGES index 6caf68fa6..fc31cc54c 100644 --- a/CHANGES +++ b/CHANGES @@ -28,6 +28,7 @@ Bugs fixed * #3772: 'str object' has no attribute 'filename' * #3763: got epubcheck validations error if epub_cover is set * #3779: 'ImportError' in sphinx.ext.autodoc due to broken 'sys.meta_path' +* #3796: env.resolve_references() crashes when non-document node given Testing -------- diff --git a/sphinx/environment/__init__.py b/sphinx/environment/__init__.py index b5d4314b6..fdd774908 100644 --- a/sphinx/environment/__init__.py +++ b/sphinx/environment/__init__.py @@ -943,10 +943,9 @@ class BuildEnvironment(object): try: # set env.docname during applying post-transforms self.temp_data['docname'] = docname - if hasattr(doctree, 'settings'): - doctree.settings.env = self transformer = SphinxTransformer(doctree) + transformer.set_environment(self) transformer.add_transforms(self.app.post_transforms) transformer.apply_transforms() finally: diff --git a/sphinx/transforms/__init__.py b/sphinx/transforms/__init__.py index a5e650c2b..aceffa329 100644 --- a/sphinx/transforms/__init__.py +++ b/sphinx/transforms/__init__.py @@ -85,6 +85,9 @@ class SphinxTransformer(Transformer): def apply_transforms(self): # type: () -> None if isinstance(self.document, nodes.document): + if hasattr(self.document.settings, 'env') and self.env: + self.document.settings.env = self.env + Transformer.apply_transforms(self) else: # wrap the target node by document node during transforming