Skip to content

Commit

Permalink
Handle XML errors #18
Browse files Browse the repository at this point in the history
  • Loading branch information
simon987 committed Feb 7, 2020
1 parent d1fa4fe commit ed1ce8a
Show file tree
Hide file tree
Showing 4 changed files with 32 additions and 17 deletions.
2 changes: 1 addition & 1 deletion src/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
#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[] = {
"sist2 scan [OPTION]... PATH",
"sist2 index [OPTION]... INDEX",
Expand Down
43 changes: 29 additions & 14 deletions src/parsing/doc.c
Original file line number Diff line number Diff line change
@@ -1,10 +1,20 @@
#include "doc.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);

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_element(reader, NULL, _X("t")) {
mce_skip_attributes(reader);
Expand All @@ -18,10 +28,14 @@ void dump_text(mceTextReader_t *reader, dyn_buffer_t *buf) {
} mce_end_element(reader);

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_children(reader)
return 0;
}

__always_inline
Expand Down Expand Up @@ -52,30 +66,28 @@ int should_read_part(opcPart part) {
}

__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;
int options;
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);
int ret = opcXmlReaderOpen(c, &reader, part, NULL, "UTF-8", XML_PARSE_NOWARNING | XML_PARSE_NOERROR | XML_PARSE_NONET);

if (ret != OPC_ERROR_NONE) {
LOG_ERRORF(doc->filepath, "(doc.c) opcXmlReaderOpen() returned error code %d", ret);
return;
return -1;
}

mce_start_document(&reader) {
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_document(&reader);

mceTextReaderCleanup(&reader);
return 0;
}

void parse_doc(void *mem, size_t mem_len, document_t *doc) {
Expand All @@ -95,7 +107,10 @@ void parse_doc(void *mem, size_t mem_len, document_t *doc) {
opcPart part = opcPartGetFirst(c);
do {
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)));

Expand Down
2 changes: 1 addition & 1 deletion src/web/static_generated.c

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion web/search.html
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@

<nav class="navbar navbar-expand-lg">
<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>
<a style="margin-left: auto" id="theme" class="btn" title="Toggle theme" href="/">Theme</a>
</nav>
Expand Down

0 comments on commit ed1ce8a

Please sign in to comment.