aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--bfd/ChangeLog5
-rw-r--r--bfd/vms-alpha.c19
2 files changed, 16 insertions, 8 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index 70944d3..84caf0b 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,5 +1,10 @@
2020-01-13 Alan Modra <amodra@gmail.com>
+ * vms-alpha.c (_bfd_vms_slurp_egsd): Ensure minimum size even
+ for "ignored" records.
+
+2020-01-13 Alan Modra <amodra@gmail.com>
+
* wasm-module.c (wasm_scan_name_function_section): Formatting.
Delete asect name check. Move asect NULL check to wasm_object_p.
Correct bounds check of sizes against end. Replace uses of
diff --git a/bfd/vms-alpha.c b/bfd/vms-alpha.c
index 73e7285..32f4e68 100644
--- a/bfd/vms-alpha.c
+++ b/bfd/vms-alpha.c
@@ -1217,6 +1217,16 @@ _bfd_vms_slurp_egsd (bfd *abfd)
return FALSE;
}
+ if (gsd_size < 4)
+ {
+ too_small:
+ _bfd_error_handler (_("corrupt EGSD record type %d: size (%#x) "
+ "is too small"),
+ gsd_type, gsd_size);
+ bfd_set_error (bfd_error_bad_value);
+ return FALSE;
+ }
+
switch (gsd_type)
{
case EGSD__C_PSC:
@@ -1227,14 +1237,7 @@ _bfd_vms_slurp_egsd (bfd *abfd)
asection *section;
if (offsetof (struct vms_egps, flags) + 2 > gsd_size)
- {
- too_small:
- _bfd_error_handler (_("corrupt EGSD record type %d: size (%#x) "
- "is too small"),
- gsd_type, gsd_size);
- bfd_set_error (bfd_error_bad_value);
- return FALSE;
- }
+ goto too_small;
vms_flags = bfd_getl16 (egps->flags);
if ((vms_flags & EGPS__V_REL) == 0)