getcfi_scn_eh_frame: Don't crash and burn when .eh_frame bits aren't there.

Trying to read non-existing bits sometimes works and normally a sanity
check will fail. But it could also lead to an unexpected crash much later
when trying to use the non-existing data.

Signed-off-by: Mark Wielaard <mjw@redhat.com>
diff --git a/libdw/ChangeLog b/libdw/ChangeLog
index 700c166..22f8b0c 100644
--- a/libdw/ChangeLog
+++ b/libdw/ChangeLog
@@ -1,3 +1,7 @@
+2013-07-02  Mark Wielaard  <mjw@redhat.com>
+
+	* dwarf_getcfi_elf.c (getcfi_shdr): Check sh_type == SHT_PROGBITS.
+
 2013-06-26  Mark Wielaard  <mjw@redhat.com>
 
 	* libdw_visit_scopes.c (__libdw_visit_scopes): Don't reject root
diff --git a/libdw/dwarf_getcfi_elf.c b/libdw/dwarf_getcfi_elf.c
index ba00e05..a423ef3 100644
--- a/libdw/dwarf_getcfi_elf.c
+++ b/libdw/dwarf_getcfi_elf.c
@@ -280,8 +280,13 @@
 	      hdr_vaddr = shdr->sh_addr;
 	    }
 	  else if (!strcmp (name, ".eh_frame"))
-	    return getcfi_scn_eh_frame (elf, ehdr, scn, shdr,
-					hdr_scn, hdr_vaddr);
+	    {
+	      if (shdr->sh_type == SHT_PROGBITS)
+		return getcfi_scn_eh_frame (elf, ehdr, scn, shdr,
+					    hdr_scn, hdr_vaddr);
+	      else
+		return NULL;
+	    }
 	}
     }