]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
Make the Linux launcher more like the Darwin one in how it reads the
authorNicholas Nethercote <njn@valgrind.org>
Mon, 29 Jun 2009 06:57:30 +0000 (06:57 +0000)
committerNicholas Nethercote <njn@valgrind.org>
Mon, 29 Jun 2009 06:57:30 +0000 (06:57 +0000)
executable headers.  This means it no longer crashes on an empty executable.
Fixes bug 156065.

git-svn-id: svn://svn.valgrind.org/valgrind/trunk@10384

coregrind/launcher-linux.c
none/tests/empty-exe.stderr.exp [new file with mode: 0644]
none/tests/empty-exe.vgtest [new file with mode: 0644]

index 1713434e5157d5ae4bbae0e72b6edfadb336d410..34754d02a45edcfed51a712f49ffea3695057349 100644 (file)
@@ -112,7 +112,8 @@ static const char *find_client(const char *clientname)
 static const char *select_platform(const char *clientname)
 {
    int fd;
-   unsigned char *header;
+   uint8_t header[4096];
+   ssize_t bytes;
    const char *platform = NULL;
    long pagesize = sysconf(_SC_PAGESIZE);
 
@@ -123,11 +124,11 @@ static const char *select_platform(const char *clientname)
       return NULL;
    //   barf("open(%s): %s", clientname, strerror(errno));
 
-   if ((header = mmap(NULL, pagesize, PROT_READ|PROT_WRITE, MAP_PRIVATE, fd, 0)) == MAP_FAILED)
-      return NULL;
-   //   barf("mmap(%s): %s", clientname, strerror(errno));
-
+   bytes = read(fd, header, sizeof(header));
    close(fd);
+   if (bytes != sizeof(header)) {
+      return NULL;
+   }
 
    if (header[0] == '#' && header[1] == '!') {
       char *interp = (char *)header + 2;
diff --git a/none/tests/empty-exe.stderr.exp b/none/tests/empty-exe.stderr.exp
new file mode 100644 (file)
index 0000000..139597f
--- /dev/null
@@ -0,0 +1,2 @@
+
+
diff --git a/none/tests/empty-exe.vgtest b/none/tests/empty-exe.vgtest
new file mode 100644 (file)
index 0000000..71fef2e
--- /dev/null
@@ -0,0 +1,9 @@
+# Bug 162020: running an empty executable used to crash Valgrind.  Note that
+# the (old) crash message gets filtered out, so it's the presence of the
+# blank two lines in the .stderr.exp file that are important -- they
+# indicate it ran to completion.  If the crash occurs, the .stderr.out file
+# is empty.
+prereq: touch empty-exe && chmod u+x empty-exe
+prog: empty-exe
+vgopts:
+cleanup: rm -f empty-exe