diff --git a/NEWS b/NEWS
index 311f5ac0a3d3f35cac8b43cebff0bc908acbfd44..1a02ea18fe20c1e77071660215bfaca8e8a6cba6 100644
--- a/NEWS
+++ b/NEWS
@@ -12,6 +12,7 @@ Bugfixes
 - policy.FORWARD and STUB: use RTT tracking to choose servers (#125, #208)
 - dns64: fix CNAME problems (#203)  It still won't work with query policies.
 - hints: better interpretation of hosts-like files (#204)
+         also, error out if a bad entry is encountered in the file
 
 Improvements
 ------------
diff --git a/modules/hints/hints.c b/modules/hints/hints.c
index c061af16f01e86a09cf77167a0e002bfb77a2af8..c1aa9252d8e8b9107381749ebebf9d4734d30e8e 100644
--- a/modules/hints/hints.c
+++ b/modules/hints/hints.c
@@ -342,6 +342,7 @@ static int load_file(struct kr_module *module, const char *path)
 	size_t count = 0;
 	size_t line_count = 0;
 	auto_free char *line = NULL;
+	int ret = kr_ok();
 
 	while (getline(&line, &line_len, fp) > 0) {
 		++line_count;
@@ -352,26 +353,40 @@ static int load_file(struct kr_module *module, const char *path)
 		}
 		const char *canonical_name = strtok_r(NULL, " \t\n", &saveptr);
 		if (canonical_name == NULL) {
-			ERR_MSG("%s:%zu: invalid syntax\n", path, line_count);
-			continue;
+			ret = -1;
+			goto error;
 		}
 		/* Since the last added PTR records takes preference,
 		 * we add canonical name as the last one. */
 		const char *name_tok;
 		while ((name_tok = strtok_r(NULL, " \t\n", &saveptr)) != NULL) {
-			if (add_pair(&data->hints, name_tok, addr) == 0) {
-				count += 1;
+			ret = add_pair(&data->hints, name_tok, addr);
+			if (!ret) {
+				ret = add_reverse_pair(&data->reverse_hints, name_tok, addr);
+			}
+			if (ret) {
+				ret = -1;
+				goto error;
 			}
-			add_reverse_pair(&data->reverse_hints, name_tok, addr);
-		}
-		if (add_pair(&data->hints, canonical_name, addr) == 0) {
 			count += 1;
 		}
-		add_reverse_pair(&data->reverse_hints, canonical_name, addr);
+		ret = add_pair(&data->hints, canonical_name, addr);
+		if (!ret) {
+			ret = add_reverse_pair(&data->reverse_hints, canonical_name, addr);
+		}
+		if (ret) {
+			ret = -1;
+			goto error;
+		}
+		count += 1;
+	}
+error:
+	if (ret) {
+		ret = kr_error(ret);
+		ERR_MSG("%s:%zu: invalid syntax\n", path, line_count);
 	}
-
 	VERBOSE_MSG(NULL, "loaded %zu hints\n", count);
-	return kr_ok();
+	return ret;
 }
 
 static char* hint_add_hosts(void *env, struct kr_module *module, const char *args)