From: Vladimir Serbinenko Date: Tue, 20 Jan 2015 13:11:32 +0000 (+0100) Subject: grub_cmd_play: Avoid division by zero. X-Git-Tag: 2.02-beta3~581 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=44461d5af23dc00bf31604fa07e191b0d4c5cb67;p=thirdparty%2Fgrub.git grub_cmd_play: Avoid division by zero. --- diff --git a/ChangeLog b/ChangeLog index 14284774f..3ae00de22 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2015-01-20 Vladimir Serbinenko + + * grub-core/commands/i386/pc/play.c (grub_cmd_play): Avoid + division by zero. + 2015-01-20 Vladimir Serbinenko * grub-core/bus/usb/usbtrans.c (grub_usb_bulk_maxpacket): Avoid diff --git a/grub-core/commands/i386/pc/play.c b/grub-core/commands/i386/pc/play.c index 40798c96c..7712e2a36 100644 --- a/grub-core/commands/i386/pc/play.c +++ b/grub-core/commands/i386/pc/play.c @@ -107,6 +107,14 @@ grub_cmd_play (grub_command_t cmd __attribute__ ((unused)), return grub_errno; } + if (!tempo) + { + grub_file_close (file); + grub_error (GRUB_ERR_BAD_ARGUMENT, N_("Invalid tempo in %s"), + args[0]); + return grub_errno; + } + tempo = grub_le_to_cpu32 (tempo); grub_dprintf ("play","tempo = %d\n", tempo); @@ -131,6 +139,13 @@ grub_cmd_play (grub_command_t cmd __attribute__ ((unused)), tempo = grub_strtoul (args[0], &end, 0); + if (!tempo) + { + grub_error (GRUB_ERR_BAD_ARGUMENT, N_("Invalid tempo in %s"), + args[0]); + return grub_errno; + } + if (*end) /* Was not a number either, assume it was supposed to be a file name. */ return grub_error (GRUB_ERR_FILE_NOT_FOUND, N_("file `%s' not found"), args[0]);