From c81794df21d0baec9d55184a3432679dd3600c69 Mon Sep 17 00:00:00 2001
From: Andreas Ziegler <andreas.ziegler@fau.de>
Date: Mon, 25 Feb 2019 10:11:22 +0100
Subject: [PATCH] library: take maximum size for conflicting ranges

When parsing the .symtab of a binary/library we can have
multiple entries for the same address but some entries could
have a size of 0 which would override a bigger value read
from a valid entry earlier.

Let's always take the maximum of all read values for the size
of a function.
---
 librarytrader/library.py | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/librarytrader/library.py b/librarytrader/library.py
index 5cd2517..b9d4301 100644
--- a/librarytrader/library.py
+++ b/librarytrader/library.py
@@ -258,9 +258,10 @@ class Library:
                     self.exported_addrs[start].append(name)
                     size = symbol['st_size']
                     if start in self.ranges and self.ranges[start] != size:
-                        logging.warning("differing range %s:%x:(%x <-> %x",
+                        logging.warning("differing range %s:%x:(%x <-> %x)",
                                         self.fullname, start,
                                         self.ranges[start], size)
+                        size = max(self.ranges[start], size)
                     self.ranges[start] = size
 
     def parse_dynamic(self):
-- 
GitLab