From 44461d5af23dc00bf31604fa07e191b0d4c5cb67 Mon Sep 17 00:00:00 2001 From: Vladimir Serbinenko Date: Tue, 20 Jan 2015 14:11:32 +0100 Subject: [PATCH] grub_cmd_play: Avoid division by zero. --- ChangeLog | 5 +++++ grub-core/commands/i386/pc/play.c | 15 +++++++++++++++ 2 files changed, 20 insertions(+) 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]); -- 2.47.2