{ LDNS_STATUS_SYNTAX_VERSION_ERR, "Syntax error, version mismatch" },
{ LDNS_STATUS_SYNTAX_ALG_ERR, "Syntax error, algorithm unknown or non parseable" },
{ LDNS_STATUS_SYNTAX_ERR, "Syntax error, could not parse the RR" },
+ { LDNS_STATUS_SYNTAX_EMPTY, "An empty line was returned" },
{ LDNS_STATUS_SYNTAX_TTL, "A $TTL directive was seen in a zone" },
{ 0, NULL }
};
LDNS_STATUS_SYNTAX_ALG_ERR,
LDNS_STATUS_SYNTAX_KEYWORD_ERR,
LDNS_STATUS_SYNTAX_TTL,
+ LDNS_STATUS_SYNTAX_EMPTY,
LDNS_STATUS_SYNTAX_ERR
};
typedef enum ldns_enum_status ldns_status;
/* check if we hit the delim */
for (d = del; *d; d++) {
- if (c == *d && i >= 1) {
+ if (c == *d && i > 0) {
goto tokenread;
}
}
return -1;
}
}
+ *t = '\0';
if (c == EOF) {
- return -1;
+ return 0;
}
- *t = '\0';
if (i == 0) {
/* nothing read */
return -1;
uint16_t ttl;
ldns_rdf *tmp;
ldns_status s;
+ ssize_t size;
s = LDNS_STATUS_ERR;
if (default_ttl) {
}
/* read an entire line in from the file */
- if (ldns_fget_token_l(fp, line, LDNS_PARSE_SKIP_SPACE, LDNS_MAX_LINELEN, line_nr) == -1) {
+ if ((size = ldns_fget_token_l(fp, line, LDNS_PARSE_SKIP_SPACE, LDNS_MAX_LINELEN, line_nr)) == -1) {
LDNS_FREE(line);
/* if last line was empty, we are now at feof, which is not
* always a parse error (happens when for instance last line
return LDNS_STATUS_SYNTAX_ERR;
}
+ /* we can have the situation, where we've read ok, but still got
+ * no bytes to play with, in this case size is 0
+ */
+ if (size == 0) {
+ return LDNS_STATUS_SYNTAX_EMPTY;
+ }
+
if ((keyword = strstr(line, "$ORIGIN "))) {
if (*origin) {
ldns_rdf_free(*origin);
/*my_origin = ldns_rr_owner(rr);*/
my_ttl = ldns_rr_ttl(rr);
my_class = ldns_rr_get_class(rr);
+ case LDNS_STATUS_SYNTAX_EMPTY:
case LDNS_STATUS_SYNTAX_TTL:
/* the function set the ttl */
break;