Skip to content

Skip encrypted pdfs#431

Open
JorjMcKie wants to merge 2 commits into
mainfrom
skip-encrypted-pdfs
Open

Skip encrypted pdfs#431
JorjMcKie wants to merge 2 commits into
mainfrom
skip-encrypted-pdfs

Conversation

@JorjMcKie

Copy link
Copy Markdown
Collaborator

No description provided.

According to benchmark results, this change will have a negligible effect on OCR quality.
On the upside are significantly reduced runtime memory loads and a roughly doubled execution speed.
Add a new "password" parameter and authenticate PDFs with it.
Raise exception if authentication fails.
@JorjMcKie JorjMcKie force-pushed the skip-encrypted-pdfs branch from b2ae60d to 990985f Compare June 28, 2026 10:28

@julian-smith-artifex-com julian-smith-artifex-com left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Could we put password-checking somewhere more central so that we don't need 6 separate call sites of verify_password()?

Comment thread src/helpers/utils.py
Comment on lines +70 to +80
def verify_password(doc: pymupdf.Document, password: str) -> bool:
"""Verify password correctness for a PDF document. Returns True if the password is correct or not needed, False otherwise."""
if not doc.is_pdf or not doc.needs_pass:
return True # Not a PDF or no password required
if not password or not (isinstance(password, str) and len(password) < 40):
# Password required but is missing or invalid
return False
rc = doc.authenticate(password)
if not rc:
return False # Incorrect password
return True

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

All 6 calls of this new function raise an exception if it returns false.
Could we instead make this fn raise an exception itself? This would simplify calling code.

It would also allow us to give a more useful exception message - it think it would be useful for users to distinguish the separate failure modes:

  • no password specified.
  • password too long.
  • incorrect password.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants