diff --git a/NEWS b/NEWS
index 962fddc740d2bc093c6107793fb4dc3b9178a752..8e500679a2df7b9a4f5377c2c0b86bb60fb696ca 100644
--- a/NEWS
+++ b/NEWS
@@ -134,6 +134,8 @@ documents those changes that are of interest to users and admins.
 
 * Changes in Slurm 2.6.5
 ========================
+ -- Correction to hostlist parsing bug introduced in v2.6.4 for hostlists with
+    more than one numeric range in brackets (e.g. rack[0-3]_blade[0-63]").
 
 * Changes in Slurm 2.6.4
 ========================
diff --git a/src/common/hostlist.c b/src/common/hostlist.c
index 2e887e36f436d8f450ef8306133c4b089788b90f..4fa6ed7afbc29c24713a9d5eeff5fea174c6244d 100644
--- a/src/common/hostlist.c
+++ b/src/common/hostlist.c
@@ -1829,7 +1829,7 @@ _push_range_list(hostlist_t hl, char *prefix, struct _range *range,
 	if (((p = strrchr(tmp_prefix, '[')) != NULL) &&
 	    ((q = strrchr(p, ']')) != NULL)) {
 		struct _range *prefix_range;
-		struct _range *saved_range = range, *pre_range = prefix_range;
+		struct _range *saved_range = range, *pre_range;
 		unsigned long j, prefix_cnt = 0;
 		*p++ = '\0';
 		*q++ = '\0';
@@ -1841,6 +1841,7 @@ _push_range_list(hostlist_t hl, char *prefix, struct _range *range,
 			xfree(prefix_range);
 			return -1;	/* bad numeric expression */
 		}
+		pre_range = prefix_range;
 		for (i = 0; i < nr; i++) {
 			prefix_cnt += pre_range->hi - pre_range->lo + 1;
 			if (prefix_cnt > MAX_PREFIX_CNT) {