From a90e9ec5e7fbe5ae08ff0ddd4c8c11c8a01d8e13 Mon Sep 17 00:00:00 2001 From: Jehan Date: Fri, 20 Sep 2013 01:54:02 +1200 Subject: [PATCH] app: disallow a theoretical infinite loop if we run out of ids. In practice, that's likely impossible to ever happen. This was just itching my perfectionist self, who enjoys flawless design. (cherry picked from commit 951393b34e6a33f862c91d38e5ca387d7c76b158) --- app/core/gimpidtable.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/app/core/gimpidtable.c b/app/core/gimpidtable.c index be5bc5b36a..afa1d6f2a6 100644 --- a/app/core/gimpidtable.c +++ b/app/core/gimpidtable.c @@ -127,15 +127,27 @@ gint gimp_id_table_insert (GimpIdTable *id_table, gpointer data) { gint new_id; + gint start_id; g_return_val_if_fail (GIMP_IS_ID_TABLE (id_table), 0); + start_id = id_table->priv->next_id; + do { new_id = id_table->priv->next_id++; if (id_table->priv->next_id == GIMP_ID_TABLE_END_ID) id_table->priv->next_id = GIMP_ID_TABLE_START_ID; + + if (start_id == id_table->priv->next_id) + { + /* We looped once over all used ids. Very unlikely to happen. + And if it does, there is probably not much to be done. + It is just good design not to allow a theoretical infinite loop. */ + g_error ("%s: out of ids!", G_STRFUNC); + break; + } } while (gimp_id_table_lookup (id_table, new_id));