From ab0cdec9198ce857385da112a79bc34cbef07506 Mon Sep 17 00:00:00 2001 From: Taksh Date: Wed, 24 Jun 2026 21:45:17 +0530 Subject: [PATCH] fix: truncate cache filenames for eCryptfs filesystem limits Shorten URL and ETag hash segments in url_to_filename() to 16 hex chars so cached resource paths stay under encrypted filesystem name limits. Fixes #590 Co-authored-by: Cursor --- scispacy/file_cache.py | 4 ++-- tests/test_file_cache.py | 5 +++++ 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/scispacy/file_cache.py b/scispacy/file_cache.py index 9ff99180..42391643 100644 --- a/scispacy/file_cache.py +++ b/scispacy/file_cache.py @@ -60,12 +60,12 @@ def url_to_filename(url: str, etag: Optional[str] = None) -> str: last_part = url.split("/")[-1] url_bytes = url.encode("utf-8") url_hash = sha256(url_bytes) - filename = url_hash.hexdigest() + filename = url_hash.hexdigest()[:16] if etag: etag_bytes = etag.encode("utf-8") etag_hash = sha256(etag_bytes) - filename += "." + etag_hash.hexdigest() + filename += "." + etag_hash.hexdigest()[:16] filename += "." + last_part return filename diff --git a/tests/test_file_cache.py b/tests/test_file_cache.py index 9ca4a714..ffeb4648 100644 --- a/tests/test_file_cache.py +++ b/tests/test_file_cache.py @@ -48,6 +48,11 @@ def test_url_to_filename_with_etags(self): baseurl = 'http://allenai.org/' assert url_to_filename(baseurl + '1') != url_to_filename(baseurl, etag='1') + def test_url_to_filename_length_on_ecryptfs(self): + url = "https://example.com/" + "segment/" * 30 + "tfidf_vectors_sparse.npz" + filename = url_to_filename(url, etag='"etag-value"') + assert len(filename) <= 143 + def test_url_to_filename_with_etags_eliminates_quotes(self): for url in ['http://allenai.org', 'http://cool.org', 'https://www.google.com', 'http://pytorch.org']: