projects
/
citadel.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
| inline |
side by side
(parent:
c149381
)
* cdb_decompress_if_necessary(): memset 0 the buffer before accessing it
author
Wilfried Göesgens
<willi@citadel.org>
Thu, 25 Mar 2010 23:14:14 +0000
(23:14 +0000)
committer
Wilfried Göesgens
<willi@citadel.org>
Thu, 25 Mar 2010 23:14:14 +0000
(23:14 +0000)
* cdb_decompress_if_necessary(): don't lean on cdb being big enough to fill our header
citadel/database.c
patch
|
blob
|
history
diff --git
a/citadel/database.c
b/citadel/database.c
index caa0e3b46c6b71c52d66e654adb8eccc36984f36..957e0164992a5f0adda59bdf630d5cb90d4b2c8a 100644
(file)
--- a/
citadel/database.c
+++ b/
citadel/database.c
@@
-504,8
+504,13
@@
void cdb_decompress_if_necessary(struct cdbdata *cdb)
char *uncompressed_data;
char *compressed_data;
uLongf destLen, sourceLen;
+ size_t cplen;
- memcpy(&zheader, cdb->ptr, sizeof(struct CtdlCompressHeader));
+ memset(&zheader, 0, sizeof(struct CtdlCompressHeader));
+ cplen = sizeof(struct CtdlCompressHeader);
+ if (sizeof(struct CtdlCompressHeader) > cdb->len)
+ cplen = cdb->len;
+ memcpy(&zheader, cdb->ptr, cplen);
compressed_data = cdb->ptr;
compressed_data += sizeof(struct CtdlCompressHeader);