Don't pass shell loops' stdin to programs run on glibc's host

Joseph S. Myers joseph@codesourcery.com
Sat Oct 20 00:14:00 GMT 2012


One issue that arises in cross testing, when using a wrapper that runs
tests over ssh, is that ssh reads input without waiting for the remote
process to need input, which interferes with shell "while" loops
reading from stdin on the build system side.

Rather than requiring wrappers to read only the exact bytes required
by the process run on the remote side (if that is even possible), it
seems better for robustness to redirect input from /dev/null for
programs run on glibc's host within such loops (if input is not
already otherwise redirected or received from a pipe rather than from
the input to the "while" loop), so the tests do not depend on exactly
how cross-testing wrappers handle stdin.  This patch does that.

Tested x86_64.

2012-10-19  Jim Blandy  <jimb@codesourcery.com>
	    Joseph Myers  <joseph@codesourcery.com>

	* iconvdata/run-iconv-test.sh: Redirect iconv stdin in loops from
	/dev/null.
	* iconvdata/tst-tables.sh: Redirect tst-table.sh stdin in loop
	from /dev/null
	* localedata/tst-fmon.sh: Redirect test program stdin in loop from
	/dev/null.
	* localedata/tst-numeric.sh: Likewise.
	* localedata/tst-rpmatch.sh: Likewise.
	* posix/tst-getconf.sh: Redirect getconf stdin in loop from
	/dev/null.

diff --git a/iconvdata/run-iconv-test.sh b/iconvdata/run-iconv-test.sh
index 34c400d..cb9f5df 100755
--- a/iconvdata/run-iconv-test.sh
+++ b/iconvdata/run-iconv-test.sh
@@ -61,7 +61,7 @@ while read from to subset targets; do
     for t in $targets; do
       if test -f testdata/$from; then
 	echo $ac_n "   test data: $from -> $t $ac_c"
-	$PROG -f $from -t $t testdata/$from > $temp1 ||
+	$PROG -f $from -t $t testdata/$from < /dev/null > $temp1 ||
 	  { if test $? -gt 128; then exit 1; fi
 	    echo "FAILED"; failed=1; continue; }
 	echo $ac_n "OK$ac_c"
@@ -71,7 +71,7 @@ while read from to subset targets; do
 	  echo $ac_n "/OK$ac_c"
 	fi
 	echo $ac_n " -> $from $ac_c"
-	$PROG -f $t -t $to -o $temp2 $temp1 ||
+	$PROG -f $t -t $to -o $temp2 $temp1 < /dev/null ||
 	  { if test $? -gt 128; then exit 1; fi
 	    echo "FAILED"; failed=1; continue; }
 	echo $ac_n "OK$ac_c"
@@ -87,7 +87,7 @@ while read from to subset targets; do
       # set.  Otherwise we convert to all the TARGETS.
       if test $subset = Y; then
 	echo $ac_n "      suntzu: $from -> $t -> $to $ac_c"
-	$PROG -f $from -t $t testdata/suntzus |
+	$PROG -f $from -t $t testdata/suntzus < /dev/null |
 	$PROG -f $t -t $to > $temp1 ||
 	  { if test $? -gt 128; then exit 1; fi
 	    echo "FAILED"; failed=1; continue; }
@@ -106,7 +106,7 @@ while read from to subset targets; do
 	 ! grep '<U....><U....>' ../localedata/charmaps/$from > /dev/null; then
 	echo $ac_n "test charmap: $from -> $t $ac_c"
 	$PROG -f ../localedata/charmaps/$from -t ../localedata/charmaps/$tc \
-	      testdata/$from > $temp1 ||
+	      testdata/$from < /dev/null > $temp1 ||
 	  { if test $? -gt 128; then exit 1; fi
 	    echo "FAILED"; failed=1; continue; }
 	echo $ac_n "OK$ac_c"
@@ -117,7 +117,7 @@ while read from to subset targets; do
 	fi
 	echo $ac_n " -> $from $ac_c"
 	$PROG -t ../localedata/charmaps/$from -f ../localedata/charmaps/$tc \
-	      -o $temp2 $temp1 ||
+	      -o $temp2 $temp1 < /dev/null ||
 	  { if test $? -gt 128; then exit 1; fi
 	    echo "FAILED"; failed=1; continue; }
 	echo $ac_n "OK$ac_c"
@@ -132,7 +132,7 @@ while read from to subset targets; do
 
   if test "$subset" = N; then
     echo $ac_n "      suntzu: ASCII -> $to -> ASCII $ac_c"
-    $PROG -f ASCII -t $to testdata/suntzus |
+    $PROG -f ASCII -t $to testdata/suntzus < /dev/null |
     $PROG -f $to -t ASCII > $temp1 ||
       { if test $? -gt 128; then exit 1; fi
 	echo "FAILED"; failed=1; continue; }
diff --git a/iconvdata/tst-tables.sh b/iconvdata/tst-tables.sh
index f65b72d..eaf84dc 100755
--- a/iconvdata/tst-tables.sh
+++ b/iconvdata/tst-tables.sh
@@ -263,7 +263,7 @@ while read charset charmap; do
   case ${charset} in \#*) continue;; esac
   echo -n "Testing ${charset}" 1>&2
   if ${SHELL} tst-table.sh ${common_objpfx} ${objpfx} "${run_program_prefix}" \
-      ${charset} ${charmap}; then
+      ${charset} ${charmap} < /dev/null; then
     echo 1>&2
   else
     echo "failed: ./tst-table.sh ${common_objpfx} ${objpfx} ${charset} ${charmap}"
diff --git a/localedata/tst-fmon.sh b/localedata/tst-fmon.sh
index 3e3dba9..52d32d0 100755
--- a/localedata/tst-fmon.sh
+++ b/localedata/tst-fmon.sh
@@ -48,7 +48,7 @@ while IFS="	" read locale format value expect; do
 	LOCPATH=${common_objpfx}localedata \
 	GCONV_PATH=${common_objpfx}/iconvdata \
 	${run_program_prefix} ${common_objpfx}localedata/tst-fmon \
-	"$locale" "$format" "$value" "$expect" ||
+	"$locale" "$format" "$value" "$expect" < /dev/null ||
 	errcode=$?
     fi
 done < $datafile
diff --git a/localedata/tst-numeric.sh b/localedata/tst-numeric.sh
index 71a3058..70ddc40 100644
--- a/localedata/tst-numeric.sh
+++ b/localedata/tst-numeric.sh
@@ -33,7 +33,7 @@ while IFS="	" read locale format value expect; do
 	if LOCPATH=${common_objpfx}localedata \
 	    GCONV_PATH=${common_objpfx}/iconvdata \
 	    ${run_program_prefix} ${common_objpfx}localedata/tst-numeric \
-	    "$locale" "$format" "$value" "$expect"
+	    "$locale" "$format" "$value" "$expect" < /dev/null
 	then
 	    echo "Locale: \"${locale}\" Format: \"${format}\"" \
 		 "Value: \"${value}\" Expect: \"${expect}\"  passed"
diff --git a/localedata/tst-rpmatch.sh b/localedata/tst-rpmatch.sh
index 0fb0cdf..8788879 100755
--- a/localedata/tst-rpmatch.sh
+++ b/localedata/tst-rpmatch.sh
@@ -28,7 +28,7 @@ while IFS=\& read locale string result dummy; do
     if [ "$locale" != "#" ]; then
 	LOCPATH=${common_objpfx}localedata \
 	GCONV_PATH=${common_objpfx}/iconvdata \
-	${tst_rpmatch} $locale $string $result \
+	${tst_rpmatch} $locale $string $result < /dev/null \
 	|| { echo "$locale $string $result  FAILED"; exit 1; }
     fi
 done <<EOF
diff --git a/posix/tst-getconf.sh b/posix/tst-getconf.sh
index b602f3e..701164b 100644
--- a/posix/tst-getconf.sh
+++ b/posix/tst-getconf.sh
@@ -34,7 +34,7 @@ rm -f $logfile
 result=0
 while read name; do
   echo -n "getconf $name: " >> $logfile
-  ${run_getconf} "$name" 2>> $logfile >> $logfile
+  ${run_getconf} "$name" < /dev/null 2>> $logfile >> $logfile
   if test $? -ne 0; then
     echo "*** $name FAILED" >> $logfile
     result=1
@@ -212,7 +212,7 @@ EOF
 
 while read name; do
   echo -n "getconf $name /: " >> $logfile
-  ${run_getconf} "$name" / 2>> $logfile >> $logfile
+  ${run_getconf} "$name" / < /dev/null 2>> $logfile >> $logfile
   if test $? -ne 0; then
     echo "*** $name FAILED" >> $logfile
     result=1

-- 
Joseph S. Myers
joseph@codesourcery.com



More information about the Libc-alpha mailing list