aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKen Raeburn <raeburn@cygnus>1993-06-22 03:00:43 +0000
committerKen Raeburn <raeburn@cygnus>1993-06-22 03:00:43 +0000
commitc48ff89fe1eab6e6ff137892873374443cda818c (patch)
tree33d4ff484a4f3a739f8f8cd93352718f5e82d651
parent2c3b9e4714233549f7569782bc464bb85b3ecd5a (diff)
downloadgdb-c48ff89fe1eab6e6ff137892873374443cda818c.zip
gdb-c48ff89fe1eab6e6ff137892873374443cda818c.tar.gz
gdb-c48ff89fe1eab6e6ff137892873374443cda818c.tar.bz2
Before casting a pointer into an integer field, verify that the field is
wide enough to hold it.
-rw-r--r--bfd/aoutx.h14
1 files changed, 14 insertions, 0 deletions
diff --git a/bfd/aoutx.h b/bfd/aoutx.h
index 996fa99..c6613ee 100644
--- a/bfd/aoutx.h
+++ b/bfd/aoutx.h
@@ -1111,7 +1111,14 @@ DEFUN (translate_from_native_sym_flags, (sym_pointer, cache_ptr, abfd, statep),
/* This symbol is the text of a warning message, the next symbol
is the symbol to associate the warning with */
cache_ptr->symbol.flags = BSF_DEBUGGING | BSF_WARNING;
+
+ /* @@ Stuffing pointers into integers is a no-no.
+ We can usually get away with it if the integer is
+ large enough though. */
+ if (sizeof (cache_ptr + 1) > sizeof (bfd_vma))
+ abort ();
cache_ptr->symbol.value = (bfd_vma) ((cache_ptr + 1));
+
/* We furgle with the next symbol in place.
We don't want it to be undefined, we'll trample the type */
(sym_pointer + 1)->e_type[0] = 0xff;
@@ -1125,6 +1132,13 @@ DEFUN (translate_from_native_sym_flags, (sym_pointer, cache_ptr, abfd, statep),
us undefined. This is good, since we want to pull in any files
which define it */
cache_ptr->symbol.flags = BSF_DEBUGGING | BSF_INDIRECT;
+
+ /* @@ Stuffing pointers into integers is a no-no.
+ We can usually get away with it if the integer is
+ large enough though. */
+ if (sizeof (cache_ptr + 1) > sizeof (bfd_vma))
+ abort ();
+
cache_ptr->symbol.value = (bfd_vma) ((cache_ptr + 1));
cache_ptr->symbol.section = &bfd_ind_section;
*statep = 1;