diff --git a/src/utils.c b/src/utils.c
index 7df013edc516a22f3fc1e5b08355d95640056610..77c5a966d66379657757cc9326457b0a141d69c0 100644
--- a/src/utils.c
+++ b/src/utils.c
@@ -81,28 +81,24 @@ bool parse_num(const char *str, ssize_t *val)
  * *line and *column.  Return FALSE on error, and TRUE otherwise. */
 bool parse_line_column(const char *str, ssize_t *line, ssize_t *column)
 {
-    bool retval = TRUE;
-    const char *comma;
-
-    assert(str != NULL);
+    bool retval;
+    char *firstpart;
+    const char *comma = strchr(str, ',');
 
-    comma = strchr(str, ',');
+    if (comma == NULL)
+	return parse_num(str, line);
 
-    if (comma != NULL) {
-	if (!parse_num(comma + 1, column))
-	    return FALSE;
-    }
+    if (!parse_num(comma + 1, column))
+	return FALSE;
 
-	if (comma != NULL) {
-	    char *str_line = mallocstrncpy(NULL, str, comma - str + 1);
-	    str_line[comma - str] = '\0';
+    if (comma == str)
+	return TRUE;
 
-	    if (str_line[0] != '\0' && !parse_num(str_line, line))
-		retval = FALSE;
+    firstpart = strdup(str);
+    firstpart[comma - str] = '\0';
 
-	    free(str_line);
-	} else
-	    return parse_num(str, line);
+    retval = parse_num(firstpart, line);
+    free(firstpart);
 
     return retval;
 }