[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

printf builtin doesn't handle stdout errors correctly

From: martin . wilck
Subject: printf builtin doesn't handle stdout errors correctly
Date: Wed, 5 Jul 2006 10:47:29 +0200 (CEST)

Configuration Information [Automatically generated, do not change]:
Machine: i586
OS: linux
Compiler: gcc -I/usr/src/packages/BUILD/bash-2.05b 
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 
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

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.

The following script demonstrates the problem:

printf x >&-
echo "printf: $PRINTF_STAT (should be 1), echo: $ECHO_STAT (should be 0)"

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)

reply via email to

[Prev in Thread] Current Thread [Next in Thread]