From: Ulrich Drepper Date: Tue, 11 Jul 2006 22:32:28 +0000 (+0000) Subject: Fix overflow in compare_modules return value. X-Git-Tag: elfutils-0.122~10 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c87b6e76285a0f6da401a5de2aa7b096b9ec731a;p=thirdparty%2Felfutils.git Fix overflow in compare_modules return value. --- diff --git a/config/elfutils.spec.in b/config/elfutils.spec.in index 32d87b497..6c5f7a5aa 100644 --- a/config/elfutils.spec.in +++ b/config/elfutils.spec.in @@ -170,11 +170,6 @@ hes. - The license is now GPL for most files. The libelf, libebl, libdw,and libdwfl libraries have additional exceptions. Add reference toOIN. -* Thu Mar 30 2006 Roland McGrath 0.120-1 -- Bug fixes. -- dwarf.h updated for DWARF 3.0 final specification. -- libdwfl: New function dwfl_version. - * Thu Jan 12 2006 Roland McGrath 0.119-1 - elflint: more tests. - libdwfl: New function dwfl_module_register_names. diff --git a/libdwfl/ChangeLog b/libdwfl/ChangeLog index 96fe56bc6..bdfd12c24 100644 --- a/libdwfl/ChangeLog +++ b/libdwfl/ChangeLog @@ -1,3 +1,9 @@ +2006-07-11 Ulrich Drepper + + * dwfl_module.c (compare_modules): Don't return GElf_Sxword value, + it can overflow the return value type. + Patch by Tim Moore . + 2006-06-13 Roland McGrath * elf-from-memory.c (elf_from_remote_memory): Fix 32/64 typo. diff --git a/libdwfl/dwfl_module.c b/libdwfl/dwfl_module.c index 022bfea1c..6f3aa849c 100644 --- a/libdwfl/dwfl_module.c +++ b/libdwfl/dwfl_module.c @@ -1,5 +1,5 @@ /* Maintenance of module list in libdwfl. - Copyright (C) 2005 Red Hat, Inc. + Copyright (C) 2005, 2006 Red Hat, Inc. This file is part of Red Hat elfutils. Red Hat elfutils is free software; you can redistribute it and/or modify @@ -161,6 +161,7 @@ dwfl_report_module (Dwfl *dwfl, const char *name, } INTDEF (dwfl_report_module) + static int compare_modules (const void *a, const void *b) { @@ -170,7 +171,13 @@ compare_modules (const void *a, const void *b) return -1; if (m2 == NULL) return 1; - return (GElf_Sxword) (m1->low_addr - m2->low_addr); + + GElf_Sxword diff = m1->low_addr - m2->low_addr; + if (diff < 0) + return -1; + if (diff > 0) + return 1; + return 0; }