diff options
author | Denys Vlasenko <vda.linux@googlemail.com> | 2018-07-25 12:08:26 +0200 |
---|---|---|
committer | Denys Vlasenko <vda.linux@googlemail.com> | 2018-07-30 18:02:27 +0200 |
commit | 096ccd6a691f3c5e5cdae1a67fd45b9340b14f27 (patch) | |
tree | d13e09d43ee04b9652271ea085b4d20897ff3dcd | |
parent | d674b2e2aeb10f0755a197084f962287740fbc50 (diff) | |
download | busybox-w32-096ccd6a691f3c5e5cdae1a67fd45b9340b14f27.tar.gz busybox-w32-096ccd6a691f3c5e5cdae1a67fd45b9340b14f27.tar.bz2 busybox-w32-096ccd6a691f3c5e5cdae1a67fd45b9340b14f27.zip |
fdisk: use strtoul[l] instead of atoi, closes 11176
Couldn't create partitions bigger than 1TB (when using 512 bytes sectors,
on 32 bits architectures).
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
-rw-r--r-- | util-linux/fdisk.c | 9 | ||||
-rw-r--r-- | util-linux/fdisk_sun.c | 2 |
2 files changed, 7 insertions, 4 deletions
diff --git a/util-linux/fdisk.c b/util-linux/fdisk.c index cdcba0a03..e47bc7324 100644 --- a/util-linux/fdisk.c +++ b/util-linux/fdisk.c | |||
@@ -169,9 +169,9 @@ typedef unsigned long long ullong; | |||
169 | * do not support more than 2^32 sectors | 169 | * do not support more than 2^32 sectors |
170 | */ | 170 | */ |
171 | typedef uint32_t sector_t; | 171 | typedef uint32_t sector_t; |
172 | #if UINT_MAX == 4294967295 | 172 | #if UINT_MAX == 0xffffffff |
173 | # define SECT_FMT "" | 173 | # define SECT_FMT "" |
174 | #elif ULONG_MAX == 4294967295 | 174 | #elif ULONG_MAX == 0xffffffff |
175 | # define SECT_FMT "l" | 175 | # define SECT_FMT "l" |
176 | #else | 176 | #else |
177 | # error Cant detect sizeof(uint32_t) | 177 | # error Cant detect sizeof(uint32_t) |
@@ -1616,7 +1616,10 @@ read_int(sector_t low, sector_t dflt, sector_t high, sector_t base, const char * | |||
1616 | int minus = (*line_ptr == '-'); | 1616 | int minus = (*line_ptr == '-'); |
1617 | int absolute = 0; | 1617 | int absolute = 0; |
1618 | 1618 | ||
1619 | value = atoi(line_ptr + 1); | 1619 | if (sizeof(value) <= sizeof(long)) |
1620 | value = strtoul(line_ptr + 1, NULL, 10); | ||
1621 | else | ||
1622 | value = strtoull(line_ptr + 1, NULL, 10); | ||
1620 | 1623 | ||
1621 | /* (1) if 2nd char is digit, use_default = 0. | 1624 | /* (1) if 2nd char is digit, use_default = 0. |
1622 | * (2) move line_ptr to first non-digit. */ | 1625 | * (2) move line_ptr to first non-digit. */ |
diff --git a/util-linux/fdisk_sun.c b/util-linux/fdisk_sun.c index e32740dea..f62a53ac6 100644 --- a/util-linux/fdisk_sun.c +++ b/util-linux/fdisk_sun.c | |||
@@ -606,7 +606,7 @@ sun_change_sysid(int i, int sys) | |||
606 | "there may destroy your partition table and bootblock.\n" | 606 | "there may destroy your partition table and bootblock.\n" |
607 | "Type YES if you're very sure you would like that partition\n" | 607 | "Type YES if you're very sure you would like that partition\n" |
608 | "tagged with 82 (Linux swap): "); | 608 | "tagged with 82 (Linux swap): "); |
609 | if (strcmp (line_ptr, "YES\n")) | 609 | if (strcmp(line_ptr, "YES\n")) |
610 | return; | 610 | return; |
611 | } | 611 | } |
612 | switch (sys) { | 612 | switch (sys) { |