Bug in SVR2V2 doprnt.c, FIX
Bruce Robertson
bruce at stride.UUCP
Wed Mar 26 15:47:44 AEST 1986
Description:
There is a bug in the doprnt() function for System V, Release 2,
Version 2. doprnt() does its own interfacing to the stdio
data structures, rather than using fwrite() and/or putc(). When
writing to a FILE stream, it is the responsibility of whoever
is going to manipulate the data structures to use the _WRTCHK
macro to insure that an I/O buffer is allocated on the stream.
doprnt() fails to do this.
Repeat-By:
Occasionally, redirecting output of a program that does nothing
but printf()'s to a file will cause the program to core dump.
Fix:
*** /usr/src/lib/libc/port/print/doprnt.c-old Tue Mar 25 21:26:22 1986
--- /usr/src/lib/libc/port/print/doprnt.c Tue Mar 25 21:26:25 1986
***************
*** 9,14
#include <varargs.h>
#include <values.h>
#include "print.h" /* parameters & macros for doprnt */
#define PUT(p, n) { register unsigned char *newbufptr; \
if ((newbufptr = bufptr + n) > bufferend) { \
--- 9,15 -----
#include <varargs.h>
#include <values.h>
#include "print.h" /* parameters & macros for doprnt */
+ #include "../stdio/stdiom.h"
#define PUT(p, n) { register unsigned char *newbufptr; \
if ((newbufptr = bufptr + n) > bufferend) { \
***************
*** 153,158
/* initialize buffer pointer and buffer end pointer */
{ register int fno = iop->_file;
bufptr = iop->_ptr;
bufferend = (fno == _NFILE) ?
(unsigned char *)((long) bufptr | (-1L & ~HIBITL))
--- 154,161 -----
/* initialize buffer pointer and buffer end pointer */
{ register int fno = iop->_file;
+ if (_WRTCHK(iop))
+ return EOF;
bufptr = iop->_ptr;
bufferend = (fno == _NFILE) ?
(unsigned char *)((long) bufptr | (-1L & ~HIBITL))
--
Bruce Robertson
UUCP: cbosgd!utah-cs!utah-gr!stride!bruce
ARPA: stride!bruce at utah-gr.arpa
More information about the Net.bugs.usg
mailing list