From 8b5bf6ed9eb8404f8b9576c440d82a7691bcb77a Mon Sep 17 00:00:00 2001 From: Simon Wilkinson Date: Sat, 17 Jul 2010 18:06:39 +0100 Subject: [PATCH] budb: Add printf format checks to logging fns Add format checking to the Log, LogError and LogDebug functions. Fix the resulting type errors. One of these in particular is a signficant bug, where we would try to print a hash table pointer as a string. Change-Id: I02d7bcd7ce63583d24dda4da40288af51a516583 Reviewed-on: http://gerrit.openafs.org/2445 Reviewed-by: Derrick Brashear Tested-by: Derrick Brashear --- src/budb/budb_internal.h | 9 ++++++--- src/budb/database.c | 8 ++++---- src/budb/db_alloc.c | 4 ++-- src/budb/db_hash.c | 3 ++- src/budb/db_text.c | 4 ++-- src/budb/procs.c | 2 +- 6 files changed, 17 insertions(+), 13 deletions(-) diff --git a/src/budb/budb_internal.h b/src/budb/budb_internal.h index 450010f41..ba3e94141 100644 --- a/src/budb/budb_internal.h +++ b/src/budb/budb_internal.h @@ -54,9 +54,12 @@ afs_int32 InitRPC(struct ubik_trans **, int lock, int this_op); /* server.c */ -void Log(char *fmt, ... ); -void LogError(long code, char *fmt, ... ); -void LogDebug(int level, char *fmt, ... ); +void Log(char *fmt, ... ) + AFS_ATTRIBUTE_FORMAT(__printf__, 1, 2); +void LogError(long code, char *fmt, ... ) + AFS_ATTRIBUTE_FORMAT(__printf__, 2, 3); +void LogDebug(int level, char *fmt, ... ) + AFS_ATTRIBUTE_FORMAT(__printf__, 2, 3); /* struct_ops.c */ diff --git a/src/budb/database.c b/src/budb/database.c index 15c668f7e..f28493f50 100644 --- a/src/budb/database.c +++ b/src/budb/database.c @@ -113,8 +113,8 @@ dbread(struct ubik_trans *ut, afs_int32 pos, void *buff, afs_int32 len) } code = ubik_Read(ut, buff, len); if (code) { - LogError(code, "dbread: ubik_Read pos %d, buff %d, len %d\n", pos, - buff, len); + LogError(code, "dbread: ubik_Read pos %d, buff %"AFS_PTR_FMT + ", len %d\n", pos, buff, len); ERROR(code); } @@ -148,8 +148,8 @@ cdbread(struct ubik_trans *ut, int type, afs_int32 pos, void *buff, afs_int32 le } code = ubik_Read(ut, buff, len); if (code) { - LogError(code, "cdbread: ubik_Read pos 0x%x, buff %d, len %d\n", pos, - buff, len); + LogError(code, "cdbread: ubik_Read pos 0x%x, buff %"AFS_PTR_FMT + ", len %d\n", pos, buff, len); ERROR(code); } diff --git a/src/budb/db_alloc.c b/src/budb/db_alloc.c index 090df26fa..e8f83a582 100644 --- a/src/budb/db_alloc.c +++ b/src/budb/db_alloc.c @@ -206,8 +206,8 @@ AllocStructure(struct ubik_trans *ut, char type, dbadr related, dbadr *saP, void *(afs_int32 *) s = 1; /* make sure structure is not free */ *saP = a + ((char *)bs - (char *)&b); - LogDebug(3, "allocated at %d, block at %d, offset %d\n", *saP, a, - ((char *)bs - (char *)&b)); + LogDebug(3, "allocated at %d, block at %d, offset %ld\n", *saP, a, + (long int)((char *)bs - (char *)&b)); /* caller must write back at least first word of structure */ return 0; } diff --git a/src/budb/db_hash.c b/src/budb/db_hash.c index 9a3b62a3b..99a1239f9 100644 --- a/src/budb/db_hash.c +++ b/src/budb/db_hash.c @@ -942,7 +942,8 @@ ht_HashIn(struct ubik_trans *ut, htonl(ea)); if (code) return BUDB_IO; - LogDebug(5, "Hashin: set %d to %d\n", &block->b.bucket[bo], htonl(ea)); + LogDebug(5, "Hashin: set %"AFS_PTR_FMT" to %d\n", + &block->b.bucket[bo], htonl(ea)); code = set_word_addr(ut, 0, &db.h, &ht->entries, diff --git a/src/budb/db_text.c b/src/budb/db_text.c index a13481601..c4117f391 100644 --- a/src/budb/db_text.c +++ b/src/budb/db_text.c @@ -78,8 +78,8 @@ GetText(struct rx_call *call, afs_uint32 lockHandle, afs_int32 textType, char *textPtr; afs_int32 code; - LogDebug(5, "GetText: type %d, offset %d, nextOffset %d, maxLength %d\n", - textType, offset, nextOffset, maxLength); + LogDebug(5, "GetText: type %d, offset %d, nextOffset %"AFS_PTR_FMT + ", maxLength %d\n", textType, offset, nextOffset, maxLength); if (callPermitted(call) == 0) { code = BUDB_NOTPERMITTED; diff --git a/src/budb/procs.c b/src/budb/procs.c index 1ef235fae..927a0427b 100644 --- a/src/budb/procs.c +++ b/src/budb/procs.c @@ -757,7 +757,7 @@ GetVolInfo(struct ubik_trans *ut, struct budb_volumeEntry *volP, dbadr *viaP, if (eval) ERROR(eval); - LogDebug(4, "volume Info for %s placed at %d\n", db.volName, via); + LogDebug(4, "volume Info for %s placed at %d\n", volP->name, via); } else if (!VolInfoMatch(volP, viP)) { /* Not the head volinfo struct */ -- 2.39.5