# HG changeset patch # User Timo Sirainen # Date 1103134007 -7200 # Node ID 1f7bcbb09f90d935416bf0a374dca386f802d22a # Parent e2876940968e6b10989823f71487d7a9562bbed9 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. diff -r e2876940968e -r 1f7bcbb09f90 src/auth/auth-cache.c --- 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; } } }