diff -up bash-4.2/execute_cmd.c.coverity bash-4.2/execute_cmd.c --- bash-4.2/execute_cmd.c.coverity 2011-02-24 13:04:35.000000000 +0100 +++ bash-4.2/execute_cmd.c 2011-02-24 13:49:13.000000000 +0100 @@ -5036,7 +5036,7 @@ shell_execve (command, args, env) Elf32_Ehdr ehdr; Elf32_Phdr *phdr; Elf32_Shdr *shdr; - int nphdr, nshdr; + Elf32_Half nphdr, nshdr; /* We have to copy the data since the sample buffer might not be aligned correctly to be accessed as @@ -5044,12 +5044,12 @@ shell_execve (command, args, env) memcpy (&ehdr, sample, sizeof (Elf32_Ehdr)); nshdr = ehdr.e_shnum; - shdr = (Elf32_Shdr *) malloc (nshdr * ehdr.e_shentsize); + shdr = (Elf32_Shdr *) malloc ((size_t)nshdr * (size_t)ehdr.e_shentsize); if (shdr != NULL) { #ifdef HAVE_PREAD - sample_len = pread (fd, shdr, nshdr * ehdr.e_shentsize, + sample_len = pread (fd, shdr, (size_t)nshdr * (size_t)ehdr.e_shentsize, ehdr.e_shoff); #else if (lseek (fd, ehdr.e_shoff, SEEK_SET) != -1) @@ -5091,11 +5091,11 @@ shell_execve (command, args, env) } nphdr = ehdr.e_phnum; - phdr = (Elf32_Phdr *) malloc (nphdr * ehdr.e_phentsize); + phdr = (Elf32_Phdr *) malloc ((size_t)nphdr * (size_t)ehdr.e_phentsize); if (phdr != NULL) { #ifdef HAVE_PREAD - sample_len = pread (fd, phdr, nphdr * ehdr.e_phentsize, + sample_len = pread (fd, phdr, (size_t)nphdr * (size_t)ehdr.e_phentsize, ehdr.e_phoff); #else if (lseek (fd, ehdr.e_phoff, SEEK_SET) != -1) @@ -5120,7 +5120,7 @@ shell_execve (command, args, env) Elf64_Ehdr ehdr; Elf64_Phdr *phdr; Elf64_Shdr *shdr; - int nphdr, nshdr; + Elf32_Half nphdr, nshdr; /* We have to copy the data since the sample buffer might not be aligned correctly to be accessed as @@ -5128,11 +5128,11 @@ shell_execve (command, args, env) memcpy (&ehdr, sample, sizeof (Elf64_Ehdr)); nshdr = ehdr.e_shnum; - shdr = (Elf64_Shdr *) malloc (nshdr * ehdr.e_shentsize); + shdr = (Elf64_Shdr *) malloc ((size_t)nshdr * (size_t)ehdr.e_shentsize); if (shdr != NULL) { #ifdef HAVE_PREAD - sample_len = pread (fd, shdr, nshdr * ehdr.e_shentsize, + sample_len = pread (fd, shdr, (size_t)nshdr * (size_t)ehdr.e_shentsize, ehdr.e_shoff); #else if (lseek (fd, ehdr.e_shoff, SEEK_SET) != -1) @@ -5174,11 +5174,11 @@ shell_execve (command, args, env) } nphdr = ehdr.e_phnum; - phdr = (Elf64_Phdr *) malloc (nphdr * ehdr.e_phentsize); + phdr = (Elf64_Phdr *) malloc ((size_t)nphdr * (size_t)ehdr.e_phentsize); if (phdr != NULL) { #ifdef HAVE_PREAD - sample_len = pread (fd, phdr, nphdr * ehdr.e_phentsize, + sample_len = pread (fd, phdr, (size_t)nphdr * (size_t)ehdr.e_phentsize, ehdr.e_phoff); #else if (lseek (fd, ehdr.e_phoff, SEEK_SET) != -1) @@ -5200,8 +5200,8 @@ shell_execve (command, args, env) if (offset != -1) { - size_t maxlen = 0; - size_t actlen = 0; + ssize_t maxlen = 0; + ssize_t actlen = 0; char *interp = NULL; do @@ -5250,7 +5250,8 @@ shell_execve (command, args, env) } #endif #if defined (HAVE_HASH_BANG_EXEC) || defined (HAVE_ELF_H) - close (fd); + if (fd >= 0) + close (fd); #endif errno = i; file_error (command);