From 896ce0385e08cc6a76b1c592c36d4ecef466e89e Mon Sep 17 00:00:00 2001 From: Jacob Chapman <7908073+chapmanjacobd@users.noreply.github.com> Date: Sat, 7 Nov 2026 01:25:33 -0600 Subject: [PATCH 1/2] Translate SearchIterator exceptions in Python bindings Declare all SearchIterator getters with Cython exception translation so stale full-text references become Python errors instead of aborting the interpreter. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- libzim/zim.pxd | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/libzim/zim.pxd b/libzim/zim.pxd index 73a6420d..de522dce 100644 --- a/libzim/zim.pxd +++ b/libzim/zim.pxd @@ -104,10 +104,10 @@ cdef extern from "zim/search_iterator.h" namespace "zim": SearchIterator operator++() bint operator==(SearchIterator) bint operator!=(SearchIterator) - string getPath() - string getTitle() - string getSnippet() - int getFileIndex() + string getPath() except + + string getTitle() except + + string getSnippet() except + + int getFileIndex() except + # Import the python wrappers (ObjWrapper) from libwrapper. From e6b23683137dc5ef3452b9cdb74eeab5b78c9c3c Mon Sep 17 00:00:00 2001 From: Jacob Chapman <7908073+chapmanjacobd@users.noreply.github.com> Date: Mon, 9 Nov 2026 07:43:41 -0600 Subject: [PATCH 2/2] Translate C++ exceptions at iteration boundaries Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- CHANGELOG.md | 4 +++ libzim/zim.pxd | 76 +++++++++++++++++++++++++------------------------- 2 files changed, 42 insertions(+), 38 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3c66f75f..261f61a2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +### Fixed + +- Translate C++ exceptions raised during entry, search, and suggestion iteration and query parsing; omit exception translation from simple Blob accessors + ## [4.1.0] - 2026-11-05 ### Added diff --git a/libzim/zim.pxd b/libzim/zim.pxd index de522dce..80865f9f 100644 --- a/libzim/zim.pxd +++ b/libzim/zim.pxd @@ -94,16 +94,16 @@ cdef extern from "writer_headers.h" namespace "zim::writer": cdef extern from "zim/search.h" namespace "zim": cdef cppclass Query: Query() - Query& setQuery(string query) - Query& setGeorange(float latitude, float longitude, float distance) + Query& setQuery(string query) except + + Query& setGeorange(float latitude, float longitude, float distance) except + cdef extern from "zim/search_iterator.h" namespace "zim": cdef cppclass SearchIterator: SearchIterator() - SearchIterator operator++() - bint operator==(SearchIterator) - bint operator!=(SearchIterator) + SearchIterator operator++() except + + bint operator==(SearchIterator) except + + bint operator!=(SearchIterator) except + string getPath() except + string getTitle() except + string getSnippet() except + @@ -130,15 +130,15 @@ cdef extern from "libwrapper.h" namespace "wrapper": cdef cppclass Blob: Blob() except + Blob(const char* data, uint64_t size) except + - const char* data() except + - const char* end() except + - uint64_t size() except + + const char* data() + const char* end() + uint64_t size() cdef cppclass Entry: - string getTitle() + string getTitle() except + string getPath() except + - bint isRedirect() + bint isRedirect() except + Item getItem(bint follow) except + Item getRedirect() except + Entry getRedirectEntry() except + @@ -147,41 +147,41 @@ cdef extern from "libwrapper.h" namespace "wrapper": cdef cppclass PathEntryIterator: PathEntryIterator() - PathEntryIterator operator++() - bint operator==(PathEntryIterator) - bint operator!=(PathEntryIterator) + PathEntryIterator operator++() except + + bint operator==(PathEntryIterator) except + + bint operator!=(PathEntryIterator) except + Entry getEntry() except + cdef cppclass PathEntryRange: PathEntryRange() - PathEntryIterator begin() - PathEntryIterator end() + PathEntryIterator begin() except + + PathEntryIterator end() except + int size() cdef cppclass TitleEntryIterator: TitleEntryIterator() - TitleEntryIterator operator++() - bint operator==(TitleEntryIterator) - bint operator!=(TitleEntryIterator) + TitleEntryIterator operator++() except + + bint operator==(TitleEntryIterator) except + + bint operator!=(TitleEntryIterator) except + Entry getEntry() except + cdef cppclass TitleEntryRange: TitleEntryRange() - TitleEntryIterator begin() - TitleEntryIterator end() + TitleEntryIterator begin() except + + TitleEntryIterator end() except + int size() cdef cppclass EfficientEntryIterator: EfficientEntryIterator() - EfficientEntryIterator operator++() - bint operator==(EfficientEntryIterator) - bint operator!=(EfficientEntryIterator) + EfficientEntryIterator operator++() except + + bint operator==(EfficientEntryIterator) except + + bint operator!=(EfficientEntryIterator) except + Entry getEntry() except + cdef cppclass EfficientEntryRange: EfficientEntryRange() - EfficientEntryIterator begin() - EfficientEntryIterator end() + EfficientEntryIterator begin() except + + EfficientEntryIterator end() except + int size() cdef cppclass Item: @@ -262,23 +262,23 @@ cdef extern from "libwrapper.h" namespace "wrapper": SearchResultSet getResults(int start, int count) except + cdef cppclass SearchResultSet: - SearchIterator begin() - SearchIterator end() + SearchIterator begin() except + + SearchIterator end() except + int size() cdef cppclass SuggestionItem: - string getPath() - string getTitle() - string getSnippet() - bool hasSnippet() + string getPath() except + + string getTitle() except + + string getSnippet() except + + bool hasSnippet() except + cdef cppclass SuggestionIterator: SuggestionIterator() - SuggestionIterator operator++() - bint operator==(SuggestionIterator) - bint operator!=(SuggestionIterator) - SuggestionItem getSuggestionItem() - Entry getEntry() + SuggestionIterator operator++() except + + bint operator==(SuggestionIterator) except + + bint operator!=(SuggestionIterator) except + + SuggestionItem getSuggestionItem() except + + Entry getEntry() except + cdef cppclass SuggestionSearcher: SuggestionSearcher() @@ -291,8 +291,8 @@ cdef extern from "libwrapper.h" namespace "wrapper": SuggestionResultSet getResults(int start, int count) except + cdef cppclass SuggestionResultSet: - SuggestionIterator begin() - SuggestionIterator end() + SuggestionIterator begin() except + + SuggestionIterator end() except + int size() cdef extern from "zim/version.h" namespace "zim":