--- a/lib/lwres/lwconfig.c
+++ b/lib/lwres/lwconfig.c
@@ -175,13 +175,8 @@
 	REQUIRE(buffer != NULL);
 	REQUIRE(size > 0U);
 
-	*p = '\0';
-
 	ch = eatwhite(fp);
 
-	if (ch == EOF)
-		return (EOF);
-
 	do {
 		*p = '\0';
 
@@ -592,23 +587,37 @@
 		if (strlen(word) == 0U)
 			rval = LWRES_R_SUCCESS;
 		else if (strcmp(word, "nameserver") == 0)
-			rval = lwres_conf_parsenameserver(ctx, fp);
+			rval = (stopchar != '\n')? /* fail instantly if EOL is reached */
+				lwres_conf_parsenameserver(ctx, fp)
+				: LWRES_R_FAILURE;
 		else if (strcmp(word, "lwserver") == 0)
-			rval = lwres_conf_parselwserver(ctx, fp);
+			rval = (stopchar != '\n')?
+				lwres_conf_parselwserver(ctx, fp)
+				: LWRES_R_FAILURE;
 		else if (strcmp(word, "domain") == 0)
-			rval = lwres_conf_parsedomain(ctx, fp);
+			rval = (stopchar != '\n')?
+				lwres_conf_parsedomain(ctx, fp)
+				: LWRES_R_FAILURE;
 		else if (strcmp(word, "search") == 0)
-			rval = lwres_conf_parsesearch(ctx, fp);
+			rval = (stopchar != '\n')?
+				lwres_conf_parsesearch(ctx, fp)
+				: LWRES_R_FAILURE;
 		else if (strcmp(word, "sortlist") == 0)
-			rval = lwres_conf_parsesortlist(ctx, fp);
+			rval = (stopchar != '\n')?
+				lwres_conf_parsesortlist(ctx, fp)
+				: LWRES_R_FAILURE;
 		else if (strcmp(word, "options") == 0)
-			rval = lwres_conf_parseoption(ctx, fp);
+			rval = (stopchar != '\n')?
+				lwres_conf_parseoption(ctx, fp)
+				: LWRES_R_FAILURE;
 		else {
 			/* unrecognised word. Ignore entire line */
 			rval = LWRES_R_SUCCESS;
-			stopchar = eatline(fp);
-			if (stopchar == EOF) {
-				break;
+			if (stopchar != '\n') { /* do not eat the next line */
+				stopchar = eatline(fp);
+				if (stopchar == EOF) {
+					break;
+				}
 			}
 		}
 		if (ret == LWRES_R_SUCCESS && rval != LWRES_R_SUCCESS)
