diff options
| author | Victor Kareh <[email protected]> | 2026-05-29 13:40:47 -0400 |
|---|---|---|
| committer | lukefromdc <[email protected]> | 2026-06-03 21:44:46 -0400 |
| commit | 5006f00639532168375a5546074094cd8d406dfb (patch) | |
| tree | 453bf5f579634d2acf54a1e7e7399a43c51c5baa | |
| parent | 30c1911c2c06947c56a72a896fae54c5a92e42bc (diff) | |
| download | atril-1.26.tar.bz2 atril-1.26.tar.xz | |
Check that the content file exists before attempting to parse it, and
handle failures in document title extraction gracefully.
| -rw-r--r-- | backend/epub/epub-document.c | 23 |
1 files changed, 20 insertions, 3 deletions
diff --git a/backend/epub/epub-document.c b/backend/epub/epub-document.c index 49da8c1a..d1cd9095 100644 --- a/backend/epub/epub-document.c +++ b/backend/epub/epub-document.c @@ -1600,13 +1600,17 @@ epub_document_toggle_night_mode(EvDocument *document,gboolean night) static gchar* epub_document_set_document_title(gchar *containeruri) { - open_xml_document(containeruri); - gchar *doctitle; + if (open_xml_document(containeruri) == FALSE) + return NULL; + + gchar *doctitle = NULL; set_xml_root_node(NULL); xmlNodePtr title = xml_get_pointer_to_node((xmlChar*)"title",NULL,NULL); - doctitle = (gchar*)xml_get_data_from_node(title, XML_KEYWORD, NULL); + if (title != NULL) + doctitle = (gchar*)xml_get_data_from_node(title, XML_KEYWORD, NULL); + xml_free_doc(); return doctitle; @@ -1758,6 +1762,19 @@ epub_document_load (EvDocument* document, return FALSE; } + gchar *contentOpfPath = g_filename_from_uri(contentOpfUri,NULL,NULL); + if (contentOpfPath == NULL || !g_file_test(contentOpfPath, G_FILE_TEST_IS_REGULAR)) + { + g_free (contentOpfPath); + g_free (contentOpfUri); + g_set_error_literal(error, + EV_DOCUMENT_ERROR, + EV_DOCUMENT_ERROR_INVALID, + _("could not find epub content")); + return FALSE; + } + g_free (contentOpfPath); + epub_document->docTitle = epub_document_set_document_title(contentOpfUri); epub_document->index = setup_document_index(epub_document,contentOpfUri); |
