mirror of
https://github.com/simon987/sist2.git
synced 2025-04-19 10:16:42 +00:00
Handle XML errors #18
This commit is contained in:
parent
d1fa4febc4
commit
ed1ce8ab5e
@ -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",
|
||||||
|
@ -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
@ -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>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user