Bug 316 - Compile error in argp-fmtstream.c due to bad macro in stdio.h
Summary: Compile error in argp-fmtstream.c due to bad macro in stdio.h
Status: RESOLVED FIXED
Alias: None
Product: glibc
Classification: Unclassified
Component: libc (show other bugs)
Version: unspecified
: P2 critical
Target Milestone: ---
Assignee: GOTO Masanori
URL:
Keywords:
: 318 (view as bug list)
Depends on:
Blocks:
 
Reported: 2004-08-10 10:09 UTC by Jan D.
Modified: 2019-04-10 11:25 UTC (History)
2 users (show)

See Also:
Host: i686-pc-linux-gnu
Target: i686-pc-linux-gnu
Build: i686-pc-linux-gnu
Last reconfirmed:
fweimer: security-


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Jan D. 2004-08-10 10:09:31 UTC
Glibc CVS checked out at 12:02, 10 Aug, 2004.

Configure command:
% ../glibc-2.3.3/configure --prefix=/usr --enable-add-ons=nptl --with-tls

% gcc -v
Reading specs from /usr/lib/gcc/i686-pc-linux-gnu/3.4.1/specs
Configured with: ../gcc-3.4.1/configure --prefix=/usr --enable-shared
--with-gnu-as --with-gnu-ld --enable-threads
Thread model: posix
gcc version 3.4.1

% ld -v
GNU ld version 2.15.90.0.1.1 20040303
Host type: i686-pc-linux-gnu
System: Linux gaffa 2.6.7 #11 Sat Jul 24 00:06:03 CEST 2004 i686 unknown unknown
GNU/Linux
Architecture: i686

% as -v
GNU assembler version 2.15.90.0.1.1 (i386-redhat-linux-gnu) using BFD version
2.15.90.0.1.1 20040303

% /lib/libc.so.6 
GNU C Library stable release version 2.3.2, by Roland McGrath et al.
Copyright (C) 2003 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.
Compiled by GNU CC version 3.2.2.
Compiled on a Linux 2.4.19 system on 2003-03-29.
Available extensions:
        GNU libio by Per Bothner
        crypt add-on version 2.1 by Michael Glad and others
        linuxthreads-0.10 by Xavier Leroy
        BIND-8.2.3-T5B
        libthread_db work sponsored by Alpha Processor Inc
        NIS(YP)/NIS+ NSS modules 0.19 by Thorsten Kukuk
Report bugs using the `glibcbug' script to <bugs@gnu.org>.

Description:
	When compiling I get these errors:

gcc argp-fmtstream.c -c -std=gnu99 -O2 -Wall -Winline -Wstrict-prototypes -Wwrit
e-strings -g -mpreferred-stack-boundary=2  -fexceptions   -I../include -I. -I/ho
me/jhd/build/obj-cvs/argp -I.. -I../libio -I../nptl -I/home/jhd/build/obj-cvs -I
../sysdeps/i386/elf -I../nptl/sysdeps/unix/sysv/linux/i386/i686 -I../nptl/sysdep
s/unix/sysv/linux/i386 -I../nptl/sysdeps/unix/sysv/linux -I../nptl/sysdeps/pthre
ad -I../sysdeps/pthread -I../nptl/sysdeps/unix/sysv -I../nptl/sysdeps/unix -I../
nptl/sysdeps/i386/i686 -I../nptl/sysdeps/i386 -I../sysdeps/unix/sysv/linux/i386/
i686 -I../sysdeps/unix/sysv/linux/i386 -I../sysdeps/unix/sysv/linux -I../sysdeps
/gnu -I../sysdeps/unix/common -I../sysdeps/unix/mman -I../sysdeps/unix/inet -I..
/sysdeps/unix/sysv/i386/i686 -I../sysdeps/unix/sysv/i386 -I../sysdeps/unix/sysv 
-I../sysdeps/unix/i386/i686 -I../sysdeps/unix/i386 -I../sysdeps/unix -I../sysdep
s/posix -I../sysdeps/i386/i686/fpu -I../sysdeps/i386/i686 -I../sysdeps/i386/i486
 -I../nptl/sysdeps/i386/i486 -I../sysdeps/i386/fpu -I../sysdeps/i386 -I../sysdep
s/wordsize-32 -I../sysdeps/ieee754/ldbl-96 -I../sysdeps/ieee754/dbl-64 -I../sysd
eps/ieee754/flt-32 -I../sysdeps/ieee754 -I../sysdeps/generic/elf -I../sysdeps/ge
neric -I /lib/modules/2.6.7/build/include -D_LIBC_REENTRANT -D_LIBC_REENTRANT -i
nclude ../include/libc-symbols.h       -o /home/jhd/build/obj-cvs/argp/argp-fmts
tream.o -MD -MP -MF /home/jhd/build/obj-cvs/argp/argp-fmtstream.o.dt -MT /home/j
hd/build/obj-cvs/argp/argp-fmtstream.o
argp-fmtstream.c: In function `__argp_fmtstream_free':
argp-fmtstream.c:109: error: ogiltiga operander till binär -
argp-fmtstream.c: In function `__argp_fmtstream_update':
argp-fmtstream.c:302: error: ogiltiga operander till binär -
argp-fmtstream.c: In function `__argp_fmtstream_ensure':
argp-fmtstream.c:371: error: ogiltiga operander till binär -

The macro for fwrite_unlocked in libio/bits/stdio.h fails to put its argument n
within parantesis at the penultimate line:

...
                        /* Evaluate all parameters once.  */                  \
                     ? ((void) (ptr), (void) (stream), (void) (size),         \
                        (size_t) n)                                           \
                     : fwrite_unlocked (ptr, size, n, stream))))

so (size_t) n gets expanded to 
  (size_t) fs->p - fs->buf
which turns into a binary - with incompatible operands.
Comment 1 Jan D. 2004-08-10 10:18:35 UTC
Sorry for the swedish error messages, "ogiltiga operander till binär -" means
"illegal operands to binary -"

Comment 3 Jakub Jelinek 2004-08-10 17:24:05 UTC
*** Bug 318 has been marked as a duplicate of this bug. ***
Comment 4 Sourceware Commits 2004-08-10 18:01:32 UTC
Subject: Bug 316

CVSROOT:	/cvs/glibc
Module name:	libc
Changes by:	roland@sources.redhat.com	2004-08-10 18:01:29

Modified files:
	stdio-common   : Makefile 
	libio/bits     : stdio.h 
Added files:
	stdio-common   : tst-unlockedio.c 

Log message:
	2004-08-10  Jakub Jelinek  <jakub@redhat.com>
	
	* libio/bits/stdio.h (fread_unlocked): Cast 0 to (size_t).
	(fwrite_unlocked): When checking if size * n is <= 8, cast each
	argument to size_t individually.  Cast n to (void) instead of
	(size_t), surround with (), return (size_t) 0 if one of n or size
	is 0.  [BZ #316]
	* stdio-common/Makefile (tests): Add tst-unlockedio.
	* stdio-common/tst-unlockedio.c: New test.

Patches:
http://sources.redhat.com/cgi-bin/cvsweb.cgi/libc/stdio-common/tst-unlockedio.c.diff?cvsroot=glibc&r1=NONE&r2=1.1
http://sources.redhat.com/cgi-bin/cvsweb.cgi/libc/stdio-common/Makefile.diff?cvsroot=glibc&r1=1.89&r2=1.90
http://sources.redhat.com/cgi-bin/cvsweb.cgi/libc/libio/bits/stdio.h.diff?cvsroot=glibc&r1=1.10&r2=1.11

Comment 5 Jakub Jelinek 2004-08-11 06:07:32 UTC
Fixed in CVS.
Comment 6 Jakub Jelinek 2004-08-11 06:18:20 UTC
Argh, meant to close this right away.