diff --git a/ChangeLog b/ChangeLog index c48639fce4029e2c1fc6293d23859f5933e8e782..51a52bd00f176cb268ac1605c156fea4afeeff77 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2006-09-29 Per Cederqvist + + Check that conferences read from the database are the expected + size. (Bug 169). + * src/server/simple-cache.c (read_conference): Sanitycheck the + supplied size. + 2006-09-28 Per Cederqvist Renamed the error code illegal-aux-item to illegal-aux-item-tag. diff --git a/src/server/simple-cache.c b/src/server/simple-cache.c index 397afb3881b8913bad3c90b62048f3700f6275c6..e2b6713528dcf70a5af561d41a9d44c16000729c 100644 --- a/src/server/simple-cache.c +++ b/src/server/simple-cache.c @@ -274,21 +274,33 @@ read_person(FILE *fp, static Conference * read_conference(FILE *fp, long pos, - long UNUSED(size)) /* FIXME (bug 169): sanity-check the size */ + long size) { Conference *c; - long dummy; + long conf_no; + long new_pos; c = alloc_conference(); fseek(fp, pos+1, SEEK_SET); /* Skip 'C' */ - dummy = fparse_long(fp); + conf_no = fparse_long(fp); if ( fparse_conference(fp, c) != OK ) { free_conference(c); return NULL; } - else - return c; + + new_pos = ftell(fp); + if (new_pos < 0) + { + kom_log("ftell failed: %s. Ignored.\n", strerror(errno)); + } + else if (new_pos != pos + size) + { + kom_log("WARNING: Conference %ld at %ld should be %ld bytes, " + "but %ld bytes was read\n", + conf_no, pos, size, new_pos - pos); + } + return c; }