changeset 2971:1f7bcbb09f90 HEAD

When building cache key, use each %key only once, more wastes only memory. This was mostly needed for more complex SQL queries where same key could be used multiple times.
author Timo Sirainen <tss@iki.fi>
date Wed, 15 Dec 2004 20:06:47 +0200
parents e2876940968e
children 7c4238c78aee
files src/auth/auth-cache.c
diffstat 1 files changed, 7 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/src/auth/auth-cache.c	Wed Dec 15 19:52:17 2004 +0200
+++ b/src/auth/auth-cache.c	Wed Dec 15 20:06:47 2004 +0200
@@ -30,16 +30,22 @@
 char *auth_cache_parse_key(const char *query)
 {
 	string_t *str;
+	char key_seen[256];
+
+	memset(key_seen, 0, sizeof(key_seen));
 
 	str = str_new(default_pool, 32);
 	for (; *query != '\0'; query++) {
 		if (*query == '%' && query[1] != '\0') {
 			query++;
-			if (*query != '%') {
+			if (*query != '%' && !key_seen[(uint8_t)*query]) {
 				if (str_len(str) != 0)
 					str_append_c(str, '\t');
 				str_append_c(str, '%');
 				str_append_c(str, *query);
+
+				/* @UNSAFE */
+                                key_seen[(uint8_t)*query] = 1;
 			}
 		}
 	}