|
From: <sv...@va...> - 2015-07-23 13:25:03
|
Author: florian
Date: Tue Jul 21 22:37:23 2015
New Revision: 15429
Log:
Fix BZ #338606. Basically, the bug was that it was believed that
the interpreter following the #! has to be an absolute path name.
Not so; relative path works just fine.
Added:
trunk/none/tests/scripts/relative1 (with props)
trunk/none/tests/scripts/relative1.stderr.exp
trunk/none/tests/scripts/relative1.stdout.exp
trunk/none/tests/scripts/relative1.vgtest
trunk/none/tests/scripts/relative2 (with props)
trunk/none/tests/scripts/relative2.stderr.exp
trunk/none/tests/scripts/relative2.stdout.exp
trunk/none/tests/scripts/relative2.vgtest
trunk/none/tests/scripts/say-hello.helper (with props)
Modified:
trunk/NEWS
trunk/coregrind/m_ume/script.c
trunk/none/tests/scripts/Makefile.am
Modified: trunk/NEWS
==============================================================================
--- trunk/NEWS (original)
+++ trunk/NEWS Tue Jul 21 22:37:23 2015
@@ -128,6 +128,7 @@
== 343175
== 342740
335907 segfault when running wine's ddrawex/tests/surface.c under valgrind
+338606 Strange message for scripts with invalid interpreter
338731 ppc: Fix testuite build for toolchains not supporting -maltivec
338995 shmat with hugepages (SHM_HUGETLB) fails with EINVAL
339045 Getting valgrind to compile and run on OS X Yosemite (10.10)
Modified: trunk/coregrind/m_ume/script.c
==============================================================================
--- trunk/coregrind/m_ume/script.c (original)
+++ trunk/coregrind/m_ume/script.c Tue Jul 21 22:37:23 2015
@@ -1,3 +1,4 @@
+/* -*- mode: C; c-basic-offset: 3; -*- */
/*--------------------------------------------------------------------*/
/*--- User-mode execve() for #! scripts. m_ume_script.c ---*/
@@ -41,35 +42,27 @@
#include "priv_ume.h"
+/* Return true, if the first line begins with #! and contains an
+ interpreter. */
Bool VG_(match_script)(const void *hdr, SizeT len)
{
const HChar* script = hdr;
const HChar* end = script + len;
const HChar* interp = script + 2;
- // len < 4: need '#', '!', plus at least a '/' and one more char
- if (len < 4) return False;
+ if (len < 2) return False;
if (0 != VG_(memcmp)(hdr, "#!", 2)) return False;
- // Find interpreter name, make sure it's an absolute path (starts with
- // '/') and has at least one more char. First, skip over any space
- // between the #! and the start of the interpreter name
+ // Find interpreter name, which may be absolute or relative.
+ // First, skip over any space between the #! and the start of the
+ // interpreter name
while (interp < end && (*interp == ' ' || *interp == '\t')) interp++;
// overrun?
if (interp >= end) return False; // can't find start of interp name
- // interp should now point at the /
- if (*interp != '/') return False; // absolute path only for interpreter
-
- // check for something plausible after the /
- interp++;
- if (interp >= end) return False;
- if (VG_(isspace)(*interp)) return False;
-
- // Here we should get the full interpreter name and check it with
- // check_executable(). See the "EXEC FAILED" failure when running shell
- // for an example.
+ // No interpreter found.
+ if (*interp == '\n') return False;
return True; // looks like a #! script
}
@@ -103,8 +96,6 @@
while (interp < end && (*interp == ' ' || *interp == '\t'))
interp++;
- vg_assert(*interp == '/'); /* absolute path only for interpreter */
-
/* skip over interpreter name */
for (cp = interp; cp < end && !VG_(isspace)(*cp); cp++)
;
Modified: trunk/none/tests/scripts/Makefile.am
==============================================================================
--- trunk/none/tests/scripts/Makefile.am (original)
+++ trunk/none/tests/scripts/Makefile.am Tue Jul 21 22:37:23 2015
@@ -7,7 +7,9 @@
filter_stderr
EXTRA_DIST = \
+ say-hello.helper \
bug231357.vgtest bug231357.stderr.exp bug231357.stdout.exp \
+ bug338606.vgtest bug338606.stderr.exp \
shell shell.vgtest shell.stderr.exp shell.stderr.exp-dash \
shell.stdout.exp shell.stderr.exp-dash2 shell.stderr.exp-illumos \
shell.stderr.exp-solaris shell.stderr.exp-solaris-spawn \
@@ -22,6 +24,8 @@
shell_nointerp3.stdout.exp \
shell_nonexec.vgtest shell_nonexec.stderr.exp \
shell_nosuchfile.vgtest shell_nosuchfile.stderr.exp \
+ relative1 relative1.vgtest relative1.stderr.exp relative1.stdout.exp \
+ relative2 relative2.vgtest relative2.stderr.exp relative2.stdout.exp \
shell_valid1 shell_valid1.vgtest shell_valid1.stderr.exp \
shell_valid4 shell_valid4.vgtest shell_valid4.stderr.exp \
shell_valid4.stdout.exp \
Added: trunk/none/tests/scripts/relative1
==============================================================================
--- trunk/none/tests/scripts/relative1 (added)
+++ trunk/none/tests/scripts/relative1 Tue Jul 21 22:37:23 2015
@@ -0,0 +1 @@
+#!./say-hello.helper
Added: trunk/none/tests/scripts/relative1.stderr.exp
==============================================================================
(empty)
Added: trunk/none/tests/scripts/relative1.stdout.exp
==============================================================================
--- trunk/none/tests/scripts/relative1.stdout.exp (added)
+++ trunk/none/tests/scripts/relative1.stdout.exp Tue Jul 21 22:37:23 2015
@@ -0,0 +1 @@
+hello
Added: trunk/none/tests/scripts/relative1.vgtest
==============================================================================
--- trunk/none/tests/scripts/relative1.vgtest (added)
+++ trunk/none/tests/scripts/relative1.vgtest Tue Jul 21 22:37:23 2015
@@ -0,0 +1,2 @@
+prog: relative1
+vgopts: -q
Added: trunk/none/tests/scripts/relative2
==============================================================================
--- trunk/none/tests/scripts/relative2 (added)
+++ trunk/none/tests/scripts/relative2 Tue Jul 21 22:37:23 2015
@@ -0,0 +1 @@
+#! ../scripts/./say-hello.helper
Added: trunk/none/tests/scripts/relative2.stderr.exp
==============================================================================
(empty)
Added: trunk/none/tests/scripts/relative2.stdout.exp
==============================================================================
--- trunk/none/tests/scripts/relative2.stdout.exp (added)
+++ trunk/none/tests/scripts/relative2.stdout.exp Tue Jul 21 22:37:23 2015
@@ -0,0 +1 @@
+hello
Added: trunk/none/tests/scripts/relative2.vgtest
==============================================================================
--- trunk/none/tests/scripts/relative2.vgtest (added)
+++ trunk/none/tests/scripts/relative2.vgtest Tue Jul 21 22:37:23 2015
@@ -0,0 +1,2 @@
+prog: relative2
+vgopts: -q
Added: trunk/none/tests/scripts/say-hello.helper
==============================================================================
--- trunk/none/tests/scripts/say-hello.helper (added)
+++ trunk/none/tests/scripts/say-hello.helper Tue Jul 21 22:37:23 2015
@@ -0,0 +1,2 @@
+#!/bin/sh
+echo hello
|