changeset 22607:e09650135f04

Add a little safety... just in case someone imgstores 13 million or however many images
author Mark Doliner <mark@kingant.net>
date Fri, 04 Apr 2008 01:17:29 +0000
parents 76af23621e19
children ae436d5e42d5
files libpurple/imgstore.c
diffstat 1 files changed, 9 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/libpurple/imgstore.c	Thu Apr 03 23:51:19 2008 +0000
+++ b/libpurple/imgstore.c	Fri Apr 04 01:17:29 2008 +0000
@@ -34,7 +34,7 @@
 #include "util.h"
 
 static GHashTable *imgstore;
-static int nextid = 0;
+static unsigned int nextid = 0;
 
 /*
  * NOTE: purple_imgstore_add() creates these without zeroing the memory, so
@@ -73,7 +73,14 @@
 {
 	PurpleStoredImage *img = purple_imgstore_add(data, size, filename);
 	if (img) {
-		img->id = ++nextid;
+		/*
+		 * Use the next unused id number.  We do it in a loop on the
+		 * off chance that nextid wraps back around to 0 and the hash
+		 * table still contains entries from the first time around.
+		 */
+		do {
+			img->id = ++nextid;
+		} while (img->id == 0 || g_hash_table_lookup(imgstore, &(img->id)) != NULL);
 
 		g_hash_table_insert(imgstore, &(img->id), img);
 	}