Hi,

dwfl_addrsegment (), dwfl_addrmodule () and anything that uses them
don't set an error when the given address is out of range. Which means
that if they fail and you use dwfl_errmsg () to generate an error
message it will seem to indicate nothing was wrong. This affects such
things like dwfl_addrdie () and even dwfl_validate_address () (which
only sets an error if the addr + offset is invalid, but not if addr
itself is).

2009-07-16  Mark Wielaard  <[email protected]>

    * segment.c (dwfl_addrsegment): Set DWFL_E_ADDR_OUTOFRANGE on error.

Makes sense?

Thanks,

Mark
>From 60a79c87babdd1fbdcaea64754a6374352789461 Mon Sep 17 00:00:00 2001
From: Mark Wielaard <[email protected]>
Date: Thu, 16 Jul 2009 17:57:22 +0200
Subject: [PATCH] dwfl_addrsegment set DWFL_E_ADDR_OUTOFRANGE on error.

---
 libdwfl/ChangeLog |    4 ++++
 libdwfl/segment.c |    2 ++
 2 files changed, 6 insertions(+), 0 deletions(-)

diff --git a/libdwfl/ChangeLog b/libdwfl/ChangeLog
index 624f59b..56c3ab4 100644
--- a/libdwfl/ChangeLog
+++ b/libdwfl/ChangeLog
@@ -1,3 +1,7 @@
+2009-07-16  Mark Wielaard  <[email protected]>
+
+	* segment.c (dwfl_addrsegment): Set DWFL_E_ADDR_OUTOFRANGE on error.
+
 2009-07-08  Roland McGrath  <[email protected]>
 
 	* dwfl_module_dwarf_cfi.c: New file.
diff --git a/libdwfl/segment.c b/libdwfl/segment.c
index 36c850f..d69e60a 100644
--- a/libdwfl/segment.c
+++ b/libdwfl/segment.c
@@ -264,6 +264,8 @@ dwfl_addrsegment (Dwfl *dwfl, Dwarf_Addr address, Dwfl_Module **mod)
   if (likely (idx >= 0))
     /* Translate internal segment table index to user segment index.  */
     idx = dwfl->lookup_segndx[idx];
+  else
+    __libdwfl_seterrno (DWFL_E_ADDR_OUTOFRANGE);
 
   return idx;
 }
-- 
1.6.3.3

_______________________________________________
elfutils-devel mailing list
[email protected]
https://fedorahosted.org/mailman/listinfo/elfutils-devel

Reply via email to