aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDenys Vlasenko <vda.linux@googlemail.com>2018-07-25 12:08:26 +0200
committerDenys Vlasenko <vda.linux@googlemail.com>2018-07-30 18:02:27 +0200
commit096ccd6a691f3c5e5cdae1a67fd45b9340b14f27 (patch)
treed13e09d43ee04b9652271ea085b4d20897ff3dcd
parentd674b2e2aeb10f0755a197084f962287740fbc50 (diff)
downloadbusybox-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.c9
-rw-r--r--util-linux/fdisk_sun.c2
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 */
171typedef uint32_t sector_t; 171typedef 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) {