On Thu, Jul 6, 2017 at 8:04 AM, Denys Vlasenko <vda.li...@googlemail.com> wrote: > On Tue, Jun 27, 2017 at 3:20 PM, Kang-Che Sung <explore...@gmail.com> wrote: >> Hello. Can I suggest another way? >> How about modifying the `line` buffer so it can be used directly as the name, >> and avoid the malloc problem or STRINGIFY(PATH_MAX) altogether. >> >> My suggestion (warning, this code is not tested): >> >> --- a/miscutils/makedevs.c >> +++ b/miscutils/makedevs.c >> @@ -209,23 +209,27 @@ int makedevs_main(int argc UNUSED_PARAM, char **argv) >> unsigned increment = 0; >> unsigned start = 0; >> char name[41]; >> + int name_len; >> char user[41]; >> char group[41]; >> - char *full_name = name; >> + char *full_name; >> uid_t uid; >> gid_t gid; >> >> linenum = parser->lineno; >> >> - if ((2 > sscanf(line, "%40s %c %o %40s %40s %u %u %u %u %u", >> - name, &type, &mode, user, group, >> + if ((1 > sscanf(line, "%*s%n %c %o %40s %40s %u %u %u %u %u", >> + &name_len, &type, &mode, user, group, >> &major, &minor, &start, &increment, &count)) >> + || (PATH_MAX > name_len + 1) >> || ((unsigned)(major | minor | start | count | increment) > 255) >> ) { >> bb_error_msg("invalid line %d: '%s'", linenum, line); >> ret = EXIT_FAILURE; >> continue; >> } >> + line[name_len] = '\0'; >> + full_name = line; > > Good idea! > > Applied, thanks!
Wait. I was not expecting the patch be applied directly. I was expecting it be tested first. I think my code has a bug: If the line begins with whitespaces, the initial whitespaces will be included in `full_name` while the original code won't. Denys Vlasenko, are you willing to look at this problem? _______________________________________________ busybox mailing list busybox@busybox.net http://lists.busybox.net/mailman/listinfo/busybox