From 9dfc8f573c44c5ba3993a53f926655091d799206 Mon Sep 17 00:00:00 2001 From: John Reiser Date: Thu, 23 Jul 2020 05:44:18 -0700 Subject: [PATCH] Avoid 0==nbucket https://github.com/upx/upx/issues/393 modified: p_lx_elf.cpp --- src/p_lx_elf.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/p_lx_elf.cpp b/src/p_lx_elf.cpp index d7d14426..0fec6066 100644 --- a/src/p_lx_elf.cpp +++ b/src/p_lx_elf.cpp @@ -5415,7 +5415,6 @@ Elf32_Sym const *PackLinuxElf32::elf_lookup(char const *name) const unsigned const nbucket = get_te32(&hashtab[0]); unsigned const *const buckets = &hashtab[2]; unsigned const *const chains = &buckets[nbucket]; - unsigned const m = elf_hash(name) % nbucket; if (!nbucket || (unsigned)(file_size - ((char const *)buckets - (char const *)(void const *)file_image)) <= sizeof(unsigned)*nbucket ) { @@ -5423,6 +5422,7 @@ Elf32_Sym const *PackLinuxElf32::elf_lookup(char const *name) const "bad nbucket %#x\n", nbucket); throwCantPack(msg); } + unsigned const m = elf_hash(name) % nbucket; unsigned si; for (si= get_te32(&buckets[m]); 0!=si; si= get_te32(&chains[si])) { char const *const p= get_dynsym_name(si, (unsigned)-1); @@ -5492,7 +5492,6 @@ Elf64_Sym const *PackLinuxElf64::elf_lookup(char const *name) const unsigned const nbucket = get_te32(&hashtab[0]); unsigned const *const buckets = &hashtab[2]; unsigned const *const chains = &buckets[nbucket]; - unsigned const m = elf_hash(name) % nbucket; if (!nbucket || (unsigned)(file_size - ((char const *)buckets - (char const *)(void const *)file_image)) <= sizeof(unsigned)*nbucket ) { @@ -5500,6 +5499,7 @@ Elf64_Sym const *PackLinuxElf64::elf_lookup(char const *name) const "bad nbucket %#x\n", nbucket); throwCantPack(msg); } + unsigned const m = elf_hash(name) % nbucket; unsigned si; for (si= get_te32(&buckets[m]); 0!=si; si= get_te32(&chains[si])) { char const *const p= get_dynsym_name(si, (unsigned)-1);