The MBR uses a 32-bit unsigned integer to store the size of a slice, but
fdisk(1) internally uses a signed int. Should a user attempt to specify a slice containing more than 2^31 - 1 sectors, an error will be reported on systems with sizeof(long) == 4 and the slice size will be silently truncated on systems with sizeof(long) > 4. Instead use an unsigned long to store the slice size in fdisk(1). This allows the user to specify a slice size up to the maximum permitted by the MBR on-disk format and does not have any problems with silent truncation should the use specify an slice size larger than 2^32 on systems with sizeof(long) > 4. Submitted by: Mark Johnston (markjdb AT gmail DOT com) MFC after: 2 weeks
This commit is contained in:
parent
c55f34f6d6
commit
cecff2d26e
@ -108,9 +108,9 @@ typedef struct cmd {
|
||||
char cmd;
|
||||
int n_args;
|
||||
struct arg {
|
||||
char argtype;
|
||||
int arg_val;
|
||||
char *arg_str;
|
||||
char argtype;
|
||||
unsigned long arg_val;
|
||||
char * arg_str;
|
||||
} args[MAX_ARGS];
|
||||
} CMD;
|
||||
|
||||
@ -990,7 +990,7 @@ parse_config_line(char *line, CMD *command)
|
||||
if (isalpha(*cp))
|
||||
command->args[command->n_args].argtype = *cp++;
|
||||
end = NULL;
|
||||
command->args[command->n_args].arg_val = strtol(cp, &end, 0);
|
||||
command->args[command->n_args].arg_val = strtoul(cp, &end, 0);
|
||||
if (cp == end || (!isspace(*end) && *end != '\0')) {
|
||||
char ch;
|
||||
end = cp;
|
||||
|
Loading…
Reference in New Issue
Block a user