From: Andrew Deason Date: Wed, 16 Mar 2011 19:44:56 +0000 (-0500) Subject: salvager: Fix volume parsing on 64-bit X-Git-Tag: upstream/1.8.0_pre1^2~4034 X-Git-Url: https://git.michaelhowe.org/gitweb/?a=commitdiff_plain;h=ce5e263b488f8cb85662031ee08eea448dab2d27;p=packages%2Fo%2Fopenafs.git salvager: Fix volume parsing on 64-bit When an unsigned long is wider than an afs_uint32, comparing the afs_uint32 vid to ULONG_MAX is always going to be false (which the compiler can warn us about). Fix this by storing to an unsigned long, and converting to a volume id after ensuring that the result is not too large. Change-Id: Ifbd724dabd988bc4b1ba6ee8f3dc7fa1a0afb226 Reviewed-on: http://gerrit.openafs.org/4244 Tested-by: BuildBot Reviewed-by: Simon Wilkinson Tested-by: Derrick Brashear Reviewed-by: Derrick Brashear --- diff --git a/src/vol/salvaged.c b/src/vol/salvaged.c index 091636cf3..6883849d6 100644 --- a/src/vol/salvaged.c +++ b/src/vol/salvaged.c @@ -274,12 +274,14 @@ handleit(struct cmd_syndesc *as, void *arock) } if ((ti = as->parms[1].items)) { /* -volumeid */ char *end; + unsigned long vid_l; seenvol = 1; - vid = strtoul(ti->data, &end, 10); - if (vid == ULONG_MAX || *end != '\0') { + vid_l = strtoul(ti->data, &end, 10); + if (vid_l >= MAX_AFS_UINT32 || vid_l == ULONG_MAX || *end != '\0') { printf("Invalid volume id specified; salvage aborted\n"); exit(-1); } + vid = (VolumeId)vid_l; } if (ShowLog) { diff --git a/src/vol/salvager.c b/src/vol/salvager.c index 88d0ec140..7da137386 100644 --- a/src/vol/salvager.c +++ b/src/vol/salvager.c @@ -181,17 +181,19 @@ handleit(struct cmd_syndesc *as, void *arock) } if ((ti = as->parms[1].items)) { /* -volumeid */ char *end; + unsigned long vid_l; if (!seenpart) { printf ("You must also specify '-partition' option with the '-volumeid' option\n"); exit(-1); } seenvol = 1; - vid = strtoul(ti->data, &end, 10); - if (vid == ULONG_MAX || *end != '\0') { + vid_l = strtoul(ti->data, &end, 10); + if (vid_l >= MAX_AFS_UINT32 || vid_l == ULONG_MAX || *end != '\0') { Log("salvage: invalid volume id specified; salvage aborted\n"); Exit(1); } + vid = (VolumeId)vid_l; } if (as->parms[2].items) /* -debug */ debug = 1;