From 5785e2202cec7818154f2ed1ed4ac02e8c21f26d Mon Sep 17 00:00:00 2001 From: Till Kamppeter Date: Thu, 22 Jun 2017 18:39:38 -0300 Subject: [PATCH] cups-browsed: Removing CUPS array element from within a loop going to this array is save, so do not break out of the loop in handle_cups_queues(). --- NEWS | 6 ------ utils/cups-browsed.c | 13 +++++++------ 2 files changed, 7 insertions(+), 12 deletions(-) diff --git a/utils/cups-browsed.c b/utils/cups-browsed.c index dd1aec97..8b83becc 100644 --- a/utils/cups-browsed.c +++ b/utils/cups-browsed.c @@ -3647,6 +3647,13 @@ gboolean handle_cups_queues(gpointer unused) { } /* CUPS queue removed, remove the list entry */ + /* Note that we do not need to break out of the loop passing through + all elements of a CUPS array when we remove an element via the + cupsArrayRemove() function, as the function decreases the array- + internal index by one and so the cupsArrayNext() call gives us + the element right after the deleted element. So no skipping + of an element and especially no reading beyond the end of the + array. */ cupsArrayRemove(remote_printers, p); if (p->name) free (p->name); if (p->uri) free (p->uri); @@ -4127,12 +4134,6 @@ gboolean handle_cups_queues(gpointer unused) { break; } - /* If we have removed a queue, break the loop. to avoid reading - non-existing array elements or past the end of the array. - If we are not yet done with our tasks the recheck_timer() call - will immediately call us again to do the rest. */ - if (p == NULL) - break; } if (in_shutdown == 0) -- 2.25.1