]> granicus.if.org Git - pgbouncer/commitdiff
log string truncation by strlcpy
authorMarko Kreen <markokr@gmail.com>
Thu, 24 Jan 2008 09:24:30 +0000 (09:24 +0000)
committerMarko Kreen <markokr@gmail.com>
Thu, 24 Jan 2008 09:24:30 +0000 (09:24 +0000)
include/util.h
src/admin.c
src/loader.c
src/objects.c
src/slab.c
src/varcache.c

index d7ff956fcdb66a3c74abafd028bdaf16c4abb3f2..1f4540fb22676bc34d712c790a30a7662ea00ee6 100644 (file)
@@ -111,3 +111,10 @@ void fill_local_addr(PgSocket *sk, int fd, bool is_unix);
 void rescue_timers(void);
 void safe_evtimer_add(struct event *ev, struct timeval *tv);
 
+/* log truncated strings */
+#define safe_strcpy(dst, src, dstlen) do { \
+       size_t needed = strlcpy(dst, src, dstlen); \
+       if (unlikely(needed >= (dstlen))) \
+               log_warning("bug in %s:%d - string truncated", __FILE__, __LINE__); \
+} while (0)
+
index d9431ad9c9a4d47090c639c5d50979391702c853..ce249cec9afef42333b4b5bf18f373244e73fc54 100644 (file)
@@ -489,13 +489,13 @@ static void socket_header(PktBuf *buf, bool debug)
                                    "pkt_avail", "send_avail");
 }
 
-static void adr2txt(const PgAddr *adr, char *dst, int dstlen)
+static void adr2txt(const PgAddr *adr, char *dst, unsigned dstlen)
 {
        if (adr->is_unix) {
-               strlcpy(dst, "unix", dstlen);
+               safe_strcpy(dst, "unix", dstlen);
        } else {
                char *tmp = inet_ntoa(adr->ip_addr);
-               strlcpy(dst, tmp, dstlen);
+               safe_strcpy(dst, tmp, dstlen);
        }
 }
 
index 5ff6acf3158f857227cc20a10969f25054f71592..6092bc009083e98aea1dc1abdd6f0e0fe45353d9 100644 (file)
@@ -268,7 +268,7 @@ void parse_database(char *name, char *connstr)
        db->addr.port = v_port;
        db->addr.ip_addr.s_addr = v_addr;
        db->addr.is_unix = host ? 0 : 1;
-       strlcpy(db->unix_socket_dir, unix_dir, sizeof(db->unix_socket_dir));
+       safe_strcpy(db->unix_socket_dir, unix_dir, sizeof(db->unix_socket_dir));
 
        if (host)
                log_debug("%s: host=%s/%s", name, host, inet_ntoa(db->addr.ip_addr));
index 853abfe43e39b5ab19d98d6398cc12489639bf3f..89c5b1c419f719b2e50d9b82f1920ab050dc36b0 100644 (file)
@@ -297,7 +297,7 @@ PgDatabase *add_database(const char *name)
                        return NULL;
 
                list_init(&db->head);
-               strlcpy(db->name, name, sizeof(db->name));
+               safe_strcpy(db->name, name, sizeof(db->name));
                put_in_order(&db->head, &database_list, cmp_database);
        }
 
@@ -316,12 +316,12 @@ PgUser *add_user(const char *name, const char *passwd)
 
                list_init(&user->head);
                list_init(&user->pool_list);
-               strlcpy(user->name, name, sizeof(user->name));
+               safe_strcpy(user->name, name, sizeof(user->name));
                put_in_order(&user->head, &user_list, cmp_user);
 
                tree_insert(&user_tree, (long)user->name, &user->tree_node);
        }
-       strlcpy(user->passwd, passwd, sizeof(user->passwd));
+       safe_strcpy(user->passwd, passwd, sizeof(user->passwd));
        return user;
 }
 
@@ -336,8 +336,8 @@ PgUser *force_user(PgDatabase *db, const char *name, const char *passwd)
                list_init(&user->head);
                list_init(&user->pool_list);
        }
-       strlcpy(user->name, name, sizeof(user->name));
-       strlcpy(user->passwd, passwd, sizeof(user->passwd));
+       safe_strcpy(user->name, name, sizeof(user->name));
+       safe_strcpy(user->passwd, passwd, sizeof(user->passwd));
        db->forced_user = user;
        return user;
 }
index 27d4d8d14609d99b44f2d880a0a42c1442fbe157..d54f88c1341b4fd39a3cbea37f8a6926a0e80184 100644 (file)
@@ -69,7 +69,7 @@ static void init_objcache(ObjectCache *cache,
        list_init(&cache->head);
        statlist_init(&cache->freelist, name);
        statlist_init(&cache->slablist, name);
-       strlcpy(cache->name, name, sizeof(cache->name));
+       safe_strcpy(cache->name, name, sizeof(cache->name));
        cache->total_count = 0;
        cache->init_func = init_func;
        statlist_append(&cache->head, &objcache_list);
index 1dde16ce43c0138aec6e6a05f44d17cab78b9076..1f112eafdc8de9be0d0b00d7e4ed114c1e09c7c9 100644 (file)
@@ -169,7 +169,7 @@ void varcache_fill_unset(VarCache *src, PgSocket *dst)
                srcval = get_value(src, lk);
                dstval = get_value(&dst->vars, lk);
                if (!*dstval)
-                       strlcpy(dstval, srcval, lk->len);
+                       memcpy(dstval, srcval, lk->len);
        }
 }