summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorUlrich Drepper <[email protected]>2006-07-11 22:32:28 +0000
committerUlrich Drepper <[email protected]>2006-07-11 22:32:28 +0000
commitc87b6e76285a0f6da401a5de2aa7b096b9ec731a (patch)
treece12466219d5073f42779588295df091c6c274dc
parent28ed895fdc303b2a793506bb1fcdd35d5fd14e70 (diff)
Fix overflow in compare_modules return value.
-rw-r--r--config/elfutils.spec.in5
-rw-r--r--libdwfl/ChangeLog6
-rw-r--r--libdwfl/dwfl_module.c11
3 files changed, 15 insertions, 7 deletions
diff --git a/config/elfutils.spec.in b/config/elfutils.spec.in
index 32d87b49..6c5f7a5a 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 <[email protected]> 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 <[email protected]> 0.119-1
- elflint: more tests.
- libdwfl: New function dwfl_module_register_names.
diff --git a/libdwfl/ChangeLog b/libdwfl/ChangeLog
index 96fe56bc..bdfd12c2 100644
--- a/libdwfl/ChangeLog
+++ b/libdwfl/ChangeLog
@@ -1,3 +1,9 @@
+2006-07-11 Ulrich Drepper <[email protected]>
+
+ * dwfl_module.c (compare_modules): Don't return GElf_Sxword value,
+ it can overflow the return value type.
+ Patch by Tim Moore <[email protected]>.
+
2006-06-13 Roland McGrath <[email protected]>
* 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 022bfea1..6f3aa849 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;
}