From 93ebf942a90f9c95797838f9adab94bc0378671c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stefan=20Br=C3=BCns?= Date: Tue, 30 Apr 2019 16:36:09 +0200 Subject: [PATCH] Avoid crash on toc.ncx navPoint without navLabel Althoug at least one navLabel is required per navPoint, there is no guarantee it actually exists. Avoid crashes due to invalid accesses of a null label in case the toc is broken, and spew a warning. Fixes #8 epub_tit_next crashes on navPoint without navLabel. --- ebook-tools/src/libepub/epub.c | 5 +++-- ebook-tools/src/libepub/opf.c | 4 ++++ 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/ebook-tools/src/libepub/epub.c b/ebook-tools/src/libepub/epub.c index d085503..a259d9d 100644 --- a/ebook-tools/src/libepub/epub.c +++ b/ebook-tools/src/libepub/epub.c @@ -469,8 +469,9 @@ int epub_tit_next(struct titerator *tit) { case TITERATOR_NAVMAP: case TITERATOR_PAGES: ti = GetNodeData(curr); - tit->cache.label = - (char *)_opf_label_get_by_doc_lang(tit->epub->opf, ti->label); + if (ti->label) + tit->cache.label = + (char *)_opf_label_get_by_doc_lang(tit->epub->opf, ti->label); if (! tit->cache.label) tit->cache.label = (char *)ti->id; diff --git a/ebook-tools/src/libepub/opf.c b/ebook-tools/src/libepub/opf.c index 6851db2..09bce9e 100644 --- a/ebook-tools/src/libepub/opf.c +++ b/ebook-tools/src/libepub/opf.c @@ -398,6 +398,10 @@ void _opf_parse_navmap(struct opf *opf, xmlTextReaderPtr reader) { } else if (xmlTextReaderNodeType(reader) == 15) { if (item) { + if (! item->label) { + _epub_print_debug(opf->epub, DEBUG_WARNING, + "- missing navlabel for nav point element"); + } _epub_print_debug(opf->epub, DEBUG_INFO, "adding nav point item->%s %s (d:%d,p:%d)", item->id, item->src, item->depth, item->playOrder); -- 2.21.0