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!
_______________________________________________
busybox mailing list
busybox@busybox.net
http://lists.busybox.net/mailman/listinfo/busybox

Reply via email to