From 05a402396831ea55761b9129bcd9e1e414d20a4e Mon Sep 17 00:00:00 2001 From: Yufeng He <40085740+he-yufeng@users.noreply.github.com> Date: Sun, 31 May 2026 00:23:21 +0800 Subject: [PATCH] fix: ignore missing exiftool binary Signed-off-by: Yufeng He <40085740+he-yufeng@users.noreply.github.com> --- .../src/markitdown/converters/_exiftool.py | 4 ++++ packages/markitdown/tests/test_module_misc.py | 16 ++++++++++++++++ 2 files changed, 20 insertions(+) diff --git a/packages/markitdown/src/markitdown/converters/_exiftool.py b/packages/markitdown/src/markitdown/converters/_exiftool.py index f605024fd..177288319 100644 --- a/packages/markitdown/src/markitdown/converters/_exiftool.py +++ b/packages/markitdown/src/markitdown/converters/_exiftool.py @@ -32,6 +32,8 @@ def exiftool_metadata( f"ExifTool version {version_output} is vulnerable to CVE-2021-22204. " "Please upgrade to version 12.24 or later." ) + except FileNotFoundError: + return {} except (subprocess.CalledProcessError, ValueError) as e: raise RuntimeError("Failed to verify ExifTool version.") from e @@ -48,5 +50,7 @@ def exiftool_metadata( return json.loads( output.decode(locale.getpreferredencoding(False)), )[0] + except FileNotFoundError: + return {} finally: file_stream.seek(cur_pos) diff --git a/packages/markitdown/tests/test_module_misc.py b/packages/markitdown/tests/test_module_misc.py index 4d62e4919..de7cd7ca2 100644 --- a/packages/markitdown/tests/test_module_misc.py +++ b/packages/markitdown/tests/test_module_misc.py @@ -7,6 +7,7 @@ from unittest.mock import MagicMock from markitdown._uri_utils import parse_data_uri, file_uri_to_path +from markitdown.converters._exiftool import exiftool_metadata from markitdown import ( MarkItDown, @@ -462,6 +463,21 @@ def test_markitdown_exiftool() -> None: assert target in result.text_content +def test_exiftool_metadata_ignores_missing_binary() -> None: + stream = io.BytesIO(b"not really an image") + + assert exiftool_metadata(stream, exiftool_path="missing-exiftool-binary") == {} + assert stream.tell() == 0 + + +def test_markitdown_missing_exiftool_path_keeps_image_conversion() -> None: + markitdown = MarkItDown(exiftool_path="missing-exiftool-binary") + + result = markitdown.convert(os.path.join(TEST_FILES_DIR, "test.jpg")) + + assert result.text_content == "" + + def test_markitdown_llm_parameters() -> None: """Test that LLM parameters are correctly passed to the client.""" mock_client = MagicMock()