From: Theodore Ts'o Date: Mon, 4 Jul 2016 14:09:48 +0000 (-0400) Subject: quota: fix generic/244 on 32-bit platforms X-Git-Tag: v2022.05.01~2451 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=76eb2b1f6e57e3bb4ab3019528d4c87b2317b060;p=xfstests-dev.git quota: fix generic/244 on 32-bit platforms The test program src/test-nextquota.c relies on atoi() to convert a string to an *unsigned* int. If the string represents an integer which is greater than INT_MAX, it is undefined how atoi(3) works, and it turns out that: uint id = atoi("2147483649"); results in id == 2147483649 on x86_64, and id == 2147483647 on a 32-bit x86 platform. So use strtoul(3) instead, which is portable and technically correct Signed-off-by: Theodore Ts'o Reviewed-by: Eric Sandeen Signed-off-by: Eryu Guan --- diff --git a/src/test-nextquota.c b/src/test-nextquota.c index a2bbad97..3baa296e 100644 --- a/src/test-nextquota.c +++ b/src/test-nextquota.c @@ -74,6 +74,7 @@ int main(int argc, char *argv[]) int verbose = 0; uint id = 0, idflag = 0; char *device = NULL; + char *tmp; struct nextdqblk dqb; struct fs_disk_quota xqb; @@ -92,7 +93,11 @@ int main(int argc, char *argv[]) typeflag++; break; case 'i': - id = atoi(optarg); + id = (uint) strtoul(optarg, &tmp, 0); + if (*tmp) { + fprintf(stderr, "Bad id: %s\n", optarg); + exit(1); + } idflag++; break; case 'd':