Handle XML errors #18

This commit is contained in:
simon 2020-02-07 10:07:35 -05:00
parent d1fa4febc4
commit ed1ce8ab5e
4 changed files with 32 additions and 17 deletions

View File

@ -6,7 +6,7 @@
#define EPILOG "Made by simon987 <me@simon987.net>. Released under GPL-3.0" #define EPILOG "Made by simon987 <me@simon987.net>. Released under GPL-3.0"
static const char *const Version = "1.2.6"; static const char *const Version = "1.2.7";
static const char *const usage[] = { static const char *const usage[] = {
"sist2 scan [OPTION]... PATH", "sist2 scan [OPTION]... PATH",
"sist2 index [OPTION]... INDEX", "sist2 index [OPTION]... INDEX",

View File

@ -1,10 +1,20 @@
#include "doc.h" #include "doc.h"
#include "src/ctx.h" #include "src/ctx.h"
void dump_text(mceTextReader_t *reader, dyn_buffer_t *buf) { int dump_text(mceTextReader_t *reader, dyn_buffer_t *buf) {
mce_skip_attributes(reader); mce_skip_attributes(reader);
xmlErrorPtr err = xmlGetLastError();
if (err != NULL) {
if (err->level == XML_ERR_FATAL) {
LOG_ERRORF("doc.c", "Got fatal XML error while parsing document: %s", err->message)
return -1;
} else {
LOG_ERRORF("doc.c", "Got recoverable XML error while parsing document: %s", err->message)
}
}
mce_start_children(reader) { mce_start_children(reader) {
mce_start_element(reader, NULL, _X("t")) { mce_start_element(reader, NULL, _X("t")) {
mce_skip_attributes(reader); mce_skip_attributes(reader);
@ -18,10 +28,14 @@ void dump_text(mceTextReader_t *reader, dyn_buffer_t *buf) {
} mce_end_element(reader); } mce_end_element(reader);
mce_start_element(reader, NULL, NULL) { mce_start_element(reader, NULL, NULL) {
dump_text(reader, buf); int ret = dump_text(reader, buf);
if (ret != 0) {
return ret;
}
} mce_end_element(reader); } mce_end_element(reader);
} mce_end_children(reader) } mce_end_children(reader)
return 0;
} }
__always_inline __always_inline
@ -52,30 +66,28 @@ int should_read_part(opcPart part) {
} }
__always_inline __always_inline
void read_part(opcContainer *c, dyn_buffer_t *buf, opcPart part, document_t *doc) { int read_part(opcContainer *c, dyn_buffer_t *buf, opcPart part, document_t *doc) {
mceTextReader_t reader; mceTextReader_t reader;
int options; int ret = opcXmlReaderOpen(c, &reader, part, NULL, "UTF-8", XML_PARSE_NOWARNING | XML_PARSE_NOERROR | XML_PARSE_NONET);
if (LogCtx.very_verbose) {
options = XML_PARSE_NONET;
} else {
options = XML_PARSE_NOWARNING | XML_PARSE_NOERROR | XML_PARSE_NONET;
}
int ret = opcXmlReaderOpen(c, &reader, part, NULL, "UTF-8", options);
if (ret != OPC_ERROR_NONE) { if (ret != OPC_ERROR_NONE) {
LOG_ERRORF(doc->filepath, "(doc.c) opcXmlReaderOpen() returned error code %d", ret); LOG_ERRORF(doc->filepath, "(doc.c) opcXmlReaderOpen() returned error code %d", ret);
return; return -1;
} }
mce_start_document(&reader) { mce_start_document(&reader) {
mce_start_element(&reader, NULL, NULL) { mce_start_element(&reader, NULL, NULL) {
dump_text(&reader, buf); ret = dump_text(&reader, buf);
if (ret != 0) {
mceTextReaderCleanup(&reader);
return -1;
}
} mce_end_element(&reader); } mce_end_element(&reader);
} mce_end_document(&reader); } mce_end_document(&reader);
mceTextReaderCleanup(&reader); mceTextReaderCleanup(&reader);
return 0;
} }
void parse_doc(void *mem, size_t mem_len, document_t *doc) { void parse_doc(void *mem, size_t mem_len, document_t *doc) {
@ -95,7 +107,10 @@ void parse_doc(void *mem, size_t mem_len, document_t *doc) {
opcPart part = opcPartGetFirst(c); opcPart part = opcPartGetFirst(c);
do { do {
if (should_read_part(part)) { if (should_read_part(part)) {
read_part(c, &buf, part, doc); int ret = read_part(c, &buf, part, doc);
if (ret != 0) {
break;
}
} }
} while ((part = opcPartGetNext(c, part))); } while ((part = opcPartGetNext(c, part)));

File diff suppressed because one or more lines are too long

View File

@ -11,7 +11,7 @@
<nav class="navbar navbar-expand-lg"> <nav class="navbar navbar-expand-lg">
<a class="navbar-brand" href="/">sist2</a> <a class="navbar-brand" href="/">sist2</a>
<span class="badge badge-pill version">v1.2.6</span> <span class="badge badge-pill version">v1.2.7</span>
<span class="tagline">Lightning-fast file system indexer and search tool </span> <span class="tagline">Lightning-fast file system indexer and search tool </span>
<a style="margin-left: auto" id="theme" class="btn" title="Toggle theme" href="/">Theme</a> <a style="margin-left: auto" id="theme" class="btn" title="Toggle theme" href="/">Theme</a>
</nav> </nav>