]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
dict-fs/memcached-ascii/redis: Consistently truncate value at NULs
authorTimo Sirainen <timo.sirainen@dovecot.fi>
Sat, 21 Apr 2018 12:50:08 +0000 (15:50 +0300)
committerTimo Sirainen <timo.sirainen@dovecot.fi>
Thu, 30 Aug 2018 08:12:29 +0000 (11:12 +0300)
The dict API currently doesn't support NULs in values, so they have to be
truncated. However, previously they were truncated at NULs, but more data
may have still been appended to the value. This could have produced
somewhat random results.

src/lib-dict-extra/dict-fs.c
src/lib-dict/dict-memcached-ascii.c
src/lib-dict/dict-redis.c

index 7967b4f2f0c222ce628867314ac95a761530a850..9d9f9cd976111554bc5116934c5128e97423d207 100644 (file)
@@ -98,7 +98,7 @@ static int fs_dict_lookup(struct dict *_dict, pool_t pool, const char *key,
 
        str = str_new(pool, i_stream_get_data_size(input)+1);
        while ((ret = i_stream_read_more(input, &data, &size)) > 0) {
-               str_append_n(str, data, size);
+               str_append_data(str, data, size);
                i_stream_skip(input, size);
        }
        i_assert(ret == -1);
index 4936fa868f41418b7c33c4673bb7444714986286..acb2653a0d40be9f9c22af44463aa915b1e7a71d 100644 (file)
@@ -122,7 +122,7 @@ static bool memcached_ascii_input_value(struct memcached_ascii_connection *conn)
                size = conn->reply_bytes_left;
        conn->reply_bytes_left -= size;
 
-       str_append_n(conn->reply_str, data, size);
+       str_append_data(conn->reply_str, data, size);
        i_stream_skip(conn->conn.input, size);
        if (conn->reply_bytes_left > 0)
                return FALSE;
index f554ee5e1e8eea6cb62998800f80ced952f0cf66..d1600dc5d34ac70c373fc5f83051711e3b6e5321 100644 (file)
@@ -186,7 +186,7 @@ static int redis_input_get(struct redis_connection *conn, const char **error_r)
        data = i_stream_get_data(conn->conn.input, &size);
        if (size > conn->bytes_left)
                size = conn->bytes_left;
-       str_append_n(conn->last_reply, data, size);
+       str_append_data(conn->last_reply, data, size);
 
        conn->bytes_left -= size;
        i_stream_skip(conn->conn.input, size);