authorgravatar for literallyvoid@gmail.comLiterally Void <literallyvoid@gmail.com> 2020-09-09 20:49:49-07:00
committergravatar for git@vexu.euVeikka Tuominen <git@vexu.eu> 2020-09-10 12:00:53+03:00
log78baa16da020ec9ad741b8f3f9c6168ec77ef58d
treee04b2a1763c3aa3b62ba0b9ccd2327011e53ea59
parent749417a1f3060f0695bbfe72d929f06b0be42535

Fix issue #6303: iterating empty PriorityQueue crashes


1 files changed, 10 insertions(+), 1 deletions(-)

lib/std/priority_queue.zig+10-1
...@@ -195,7 +195,7 @@ pub fn PriorityQueue(comptime T: type) type {...@@ -195,7 +195,7 @@ pub fn PriorityQueue(comptime T: type) type {
195 count: usize,195 count: usize,
196196
197 pub fn next(it: *Iterator) ?T {197 pub fn next(it: *Iterator) ?T {
198 if (it.count > it.queue.len - 1) return null;198 if (it.count >= it.queue.len) return null;
199 const out = it.count;199 const out = it.count;
200 it.count += 1;200 it.count += 1;
201 return it.queue.items[out];201 return it.queue.items[out];
...@@ -428,3 +428,12 @@ test "std.PriorityQueue: remove at index" {...@@ -428,3 +428,12 @@ test "std.PriorityQueue: remove at index" {
428 expectEqual(queue.remove(), 3);428 expectEqual(queue.remove(), 3);
429 expectEqual(queue.removeOrNull(), null);429 expectEqual(queue.removeOrNull(), null);
430}430}
431
432test "std.PriorityQueue: iterator while empty" {
433 var queue = PQ.init(testing.allocator, lessThan);
434 defer queue.deinit();
435
436 var it = queue.iterator();
437
438 expectEqual(it.next(), null);
439}