|
@@ -63,12 +63,11 @@ static void parse_init(ParseIterator *it, FILE *fh)
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
-// Parser interface. Required because Lemon doesn't export these in the header
|
|
|
|
-// automatically.
|
|
|
|
|
|
+// Parser interface. Required here to silence linters.
|
|
void *NTParseAlloc();
|
|
void *NTParseAlloc();
|
|
void NTParse();
|
|
void NTParse();
|
|
void NTParseFree();
|
|
void NTParseFree();
|
|
-
|
|
|
|
|
|
+void NTParseTrace();
|
|
|
|
|
|
// Lexer.
|
|
// Lexer.
|
|
|
|
|
|
@@ -126,20 +125,21 @@ loop:
|
|
}
|
|
}
|
|
|
|
|
|
IRIREF {
|
|
IRIREF {
|
|
- YYCTYPE *data = unescape_unicode (it->tok + 1);
|
|
|
|
|
|
+ YYCTYPE *data = unescape_unicode (it->tok + 1, YYCURSOR - it->tok - 2);
|
|
|
|
|
|
log_debug ("URI data: %s", data);
|
|
log_debug ("URI data: %s", data);
|
|
|
|
|
|
*term = LSUP_iriref_new ((char*)data, NULL);
|
|
*term = LSUP_iriref_new ((char*)data, NULL);
|
|
free (data);
|
|
free (data);
|
|
|
|
|
|
|
|
+ if (!UNLIKELY (term)) return -1;
|
|
return T_IRIREF;
|
|
return T_IRIREF;
|
|
}
|
|
}
|
|
|
|
|
|
LITERAL {
|
|
LITERAL {
|
|
// Only unescape Unicode from data.
|
|
// Only unescape Unicode from data.
|
|
size_t size = lit_data_e - it->tok - 2;
|
|
size_t size = lit_data_e - it->tok - 2;
|
|
- YYCTYPE *data = unescape_unicode (it->tok + 1);
|
|
|
|
|
|
+ YYCTYPE *data = unescape_unicode (it->tok + 1, size);
|
|
log_trace ("Literal data: %s", data);
|
|
log_trace ("Literal data: %s", data);
|
|
|
|
|
|
char *metadata = NULL;
|
|
char *metadata = NULL;
|
|
@@ -174,17 +174,19 @@ loop:
|
|
free (data);
|
|
free (data);
|
|
free (metadata);
|
|
free (metadata);
|
|
|
|
|
|
|
|
+ if (!UNLIKELY (term)) return -1;
|
|
return T_LITERAL;
|
|
return T_LITERAL;
|
|
}
|
|
}
|
|
|
|
|
|
BNODE {
|
|
BNODE {
|
|
- YYCTYPE *data = unescape_unicode (it->tok + 2);
|
|
|
|
|
|
+ YYCTYPE *data = unescape_unicode (it->tok + 2, YYCURSOR - it->tok - 2);
|
|
|
|
|
|
log_debug ("BNode data: %s", data);
|
|
log_debug ("BNode data: %s", data);
|
|
|
|
|
|
*term = LSUP_term_new (LSUP_TERM_BNODE, (char*)data, NULL);
|
|
*term = LSUP_term_new (LSUP_TERM_BNODE, (char*)data, NULL);
|
|
free (data);
|
|
free (data);
|
|
|
|
|
|
|
|
+ if (!UNLIKELY (term)) return -1;
|
|
return T_BNODE;
|
|
return T_BNODE;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -255,6 +257,10 @@ LSUP_nt_parse_doc (FILE *fh, LSUP_Graph **gr_p, size_t *ct, char **err_p)
|
|
ParseIterator parse_it;
|
|
ParseIterator parse_it;
|
|
parse_init (&parse_it, fh);
|
|
parse_init (&parse_it, fh);
|
|
|
|
|
|
|
|
+#ifdef DEBUG
|
|
|
|
+ NTParseTrace (stdout, "NT Parser > ");
|
|
|
|
+#endif
|
|
|
|
+
|
|
void *parser = NTParseAlloc (malloc);
|
|
void *parser = NTParseAlloc (malloc);
|
|
|
|
|
|
LSUP_rc rc;
|
|
LSUP_rc rc;
|