summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVictor Kareh <[email protected]>2026-05-29 13:40:47 -0400
committerlukefromdc <[email protected]>2026-06-03 21:44:46 -0400
commit5006f00639532168375a5546074094cd8d406dfb (patch)
tree453bf5f579634d2acf54a1e7e7399a43c51c5baa
parent30c1911c2c06947c56a72a896fae54c5a92e42bc (diff)
downloadatril-1.26.tar.bz2
atril-1.26.tar.xz
epub: validate epub content before parsingv1.26.41.26
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.c23
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);