diff --git a/mammoth/docx/body_xml.py b/mammoth/docx/body_xml.py index 2a1ffaf..2f7a38f 100644 --- a/mammoth/docx/body_xml.py +++ b/mammoth/docx/body_xml.py @@ -487,7 +487,7 @@ def create(**kwargs): **kwargs )) - if relationship_id is not None: + if relationship_id is not None and relationships.find_target_by_relationship_id(relationship_id) is not None: href = relationships.find_target_by_relationship_id(relationship_id) if anchor is not None: href = replace_fragment(href, anchor) @@ -578,9 +578,9 @@ def _read_image(image_file, alt_text): def _find_blip_image(element): embed_relationship_id = element.attributes.get("r:embed") link_relationship_id = element.attributes.get("r:link") - if embed_relationship_id is not None: + if embed_relationship_id is not None and relationships.find_target_by_relationship_id(embed_relationship_id) is not None: return _find_embedded_image(embed_relationship_id) - elif link_relationship_id is not None: + elif link_relationship_id is not None and relationships.find_target_by_relationship_id(link_relationship_id) is not None: return _find_linked_image(link_relationship_id) else: return None @@ -609,7 +609,7 @@ def open_image(): def read_imagedata(element): relationship_id = element.attributes.get("r:id") - if relationship_id is None: + if relationship_id is None or relationships.find_target_by_relationship_id(relationship_id) is None: warning = results.warning("A v:imagedata element without a relationship ID was ignored") return _empty_result_with_message(warning) else: diff --git a/mammoth/docx/relationships_xml.py b/mammoth/docx/relationships_xml.py index 555ba2d..8bdbb8b 100644 --- a/mammoth/docx/relationships_xml.py +++ b/mammoth/docx/relationships_xml.py @@ -12,10 +12,10 @@ def __init__(self, relationships): self._targets_by_type[relationship.type].append(relationship.target) def find_target_by_relationship_id(self, key): - return self._targets_by_id[key] + return self._targets_by_id.get(key, None) def find_targets_by_type(self, relationship_type): - return self._targets_by_type[relationship_type] + return self._targets_by_type.get(relationship_type, []) Relationships.EMPTY = Relationships([]) @@ -26,7 +26,7 @@ def find_targets_by_type(self, relationship_type): def read_relationships_xml_element(element): children = element.find_children("relationships:Relationship") - return Relationships(list(map(_read_relationship, children))) + return Relationships(list(filter(lambda x: x.target not in ('../NULL', 'NULL', 'word/../NULL'), map(_read_relationship, children)))) def _read_relationship(element):