From owner-freebsd-bugs@FreeBSD.ORG Mon Jan 21 22:30:01 2013 Return-Path: Delivered-To: freebsd-bugs@smarthost.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.FreeBSD.org [8.8.178.115]) by hub.freebsd.org (Postfix) with ESMTP id 5AFCAAD5 for ; Mon, 21 Jan 2013 22:30:01 +0000 (UTC) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (freefall.freebsd.org [IPv6:2001:1900:2254:206c::16:87]) by mx1.freebsd.org (Postfix) with ESMTP id 3466A149 for ; Mon, 21 Jan 2013 22:30:01 +0000 (UTC) Received: from freefall.freebsd.org (localhost [127.0.0.1]) by freefall.freebsd.org (8.14.6/8.14.6) with ESMTP id r0LMU1G7089492 for ; Mon, 21 Jan 2013 22:30:01 GMT (envelope-from gnats@freefall.freebsd.org) Received: (from gnats@localhost) by freefall.freebsd.org (8.14.6/8.14.6/Submit) id r0LMU1ce089488; Mon, 21 Jan 2013 22:30:01 GMT (envelope-from gnats) Date: Mon, 21 Jan 2013 22:30:01 GMT Message-Id: <201301212230.r0LMU1ce089488@freefall.freebsd.org> To: freebsd-bugs@FreeBSD.org Cc: From: "Mikhail T." Subject: Re: bin/175491: elf_getdata may return NULL without setting error-message X-BeenThere: freebsd-bugs@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list Reply-To: "Mikhail T." List-Id: Bug reports List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 21 Jan 2013 22:30:01 -0000 The following reply was made to PR bin/175491; it has been noted by GNATS. From: "Mikhail T." To: bug-followup@FreeBSD.org, mi@aldan.algebra.com Cc: Subject: Re: bin/175491: elf_getdata may return NULL without setting error-message Date: Mon, 21 Jan 2013 17:23:27 -0500 This is a multi-part message in MIME format. --------------090000090100000008010002 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit The test-program... --------------090000090100000008010002 Content-Type: text/plain; charset=KOI8-U; name="libelftest.c" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="libelftest.c" #include #include #include #include #include #include int main(int argc, char *argv[]) { int fd; Elf *elf; Elf_Scn *scn; Elf_Data *data; unsigned int elfversion; elfversion = elf_version(EV_CURRENT); printf("elfversion returned %u\n", elfversion); fd = open(argv[argc-1], O_RDONLY); if (fd == -1) err(EX_NOINPUT, "%s", argv[argc-1]); elf = elf_begin(fd, ELF_C_READ, NULL); if (elf == NULL) errx(EX_DATAERR, "%s: %s: %s", argv[argc-1], "elf_begin", elf_errmsg(elf_errno())); /* * Section 0: */ scn = elf_getscn(elf, 0); if (scn == NULL) errx(EX_DATAERR, "%s: %s: %s", argv[argc-1], "elf_getscn", elf_errmsg(elf_errno())); data = elf_getdata(scn, NULL); if (data == NULL) warnx("%s: %s: %s", argv[argc-1], "elf_getscn", elf_errmsg(elf_errno())); /* * Enumerate through valid sections */ for (scn = elf_nextscn(elf, NULL); scn; scn = elf_nextscn(elf, scn)) { data = elf_getdata(scn, NULL); if (data == NULL) { int errnum; const char *msg; errnum = elf_errno(); msg = errnum ? elf_errmsg(errnum) : "errnum was zero"; if (errnum && msg) printf("Section %zd has no data: %s\n", elf_ndxscn(scn), msg); else warnx("Section %zd: elf_getdata() return NULL " "without explanation", elf_ndxscn(scn)); } else { printf("Section %zd has data %p\n", elf_ndxscn(scn), data); } } return EX_OK; } --------------090000090100000008010002--