diff --git a/ChangeLog b/ChangeLog index 51a52bd00f176cb268ac1605c156fea4afeeff77..09ec82e25fd3b19f944378bbe7800dc614f667ec 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2006-10-01 Per Cederqvist + + Check that conferences read from the database are the expected + size. (Bug 168). + * src/server/simple-cache.c (read_person): Sanitycheck the + supplied size. + 2006-09-29 Per Cederqvist Check that conferences read from the database are the expected diff --git a/src/server/simple-cache.c b/src/server/simple-cache.c index e2b6713528dcf70a5af561d41a9d44c16000729c..b8ff5ca8e5a710c59404d309ac623528d6e32074 100644 --- a/src/server/simple-cache.c +++ b/src/server/simple-cache.c @@ -252,21 +252,33 @@ static Matching_info *find_matching_info(Conf_no conf_no); static Person * read_person(FILE *fp, long pos, - long UNUSED(size)) /* FIXME (bug 168): sanity-check the size */ + long size) { Person *p; - long dummy; + long pers_no; + long new_pos; p = alloc_person(); fseek(fp, pos+1, SEEK_SET); /* Skip 'P' */ - dummy = fparse_long(fp); + pers_no = fparse_long(fp); if ( fparse_person(fp, p) != OK ) { free_person(p); return NULL; } - else - return p; + + 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: Person %ld at %ld should be %ld bytes, " + "but %ld bytes was read\n", + pers_no, pos, size, new_pos - pos); + } + return p; }