Configuration Information [Automatically generated, do not change]:
Machine: i586
OS: linux
Compiler: gcc -I/usr/src/packages/BUILD/bash-2.05b
-L/usr/src/packages/BUILD/bash-2.05b/../readline-4.3
Compilation CFLAGS: -DPROGRAM='bash' -DCONF_HOSTTYPE='i586'
-DCONF_OSTYPE='linux' -DCONF_MACHTYPE='i586-suse-linux' -DCONF_VENDOR='suse'
-DSHELL -DHAVE_CONFIG_H -I. -I. -I./include -I./lib -O2 -march=i586
-mcpu=i686 -fmessage-length=0 -Wall -D_GNU_SOURCE -Wall -pipe -g
-fbranch-probabilities
uname output: Linux biker 2.6.5-7.201-default #1 Thu Aug 25 06:20:45 UTC 2005
i686 i686 i386 GNU/Linux
Machine Type: i586-suse-linux
Bash Version: 2.05b
Patch Level: 0
Release Status: release
Description:
The printf builtin doesn't correctly handle errors generating from writing to
stdout, e.g. if the stdout file descriptor is closed. No error condition is
returned, and the fd error status isn't reset.
Repeat-By:
The following script demonstrates the problem:
printf x >&-
PRINTF_STAT=$?
echo
ECHO_STAT=$?
echo "printf: $PRINTF_STAT (should be 1), echo: $ECHO_STAT (should be 0)"
Fix:
The following patch adds echo's stdout error handling to printf.
Patch was tested successfully.
--- bash-2.05b/builtins/printf.def.orig 2002-05-13 20:36:04.000000000 +0200
+++ bash-2.05b/builtins/printf.def 2006-07-05 10:32:16.618545838 +0200
@@ -96,6 +96,11 @@ #define PRETURN(value) \
conv_buf = 0; \
} \
fflush (stdout); \
+ if (ferror (stdout)) \
+ { \
+ clearerr (stdout); \
+ return (EXECUTION_FAILURE); \
+ } \
return (value); \
} \
while (0)
_______________________________________________
Bug-bash mailing list
[email protected]
http://lists.gnu.org/mailman/listinfo/bug-bash