This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

c/2574: sprintf(..) can not correctly handle "%%"



>Number:         2574
>Category:       c
>Synopsis:       sprintf(..) can not correctly handle "%%"
>Confidential:   no
>Severity:       critical
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Tue Apr 17 16:36:00 PDT 2001
>Closed-Date:
>Last-Modified:
>Originator:     gcc/g++
>Release:        version 2.95.2 19991024 (release)
>Organization:
>Environment:
solaris, SunOS 5.6 5.7
>Description:
The sprintf(...) could not handle "%%" correctly.

sprintf(buf, "%%") does not produce "%" in buffer, instead,
"%%" is handled as "%". This does not happen in printf(..)
>How-To-Repeat:
Just compile it and run the binary. It happens everytime.
>Fix:

>Release-Note:
>Audit-Trail:
>Unformatted:
----gnatsweb-attachment----
Content-Type: text/plain; name="test_sprintf.i"
Content-Disposition: inline; filename="test_sprintf.i"

# 1 "test_sprintf.c"
# 1 "/usr/local/lib/gcc-lib/i386-unknown-solaris2.5.1/2.7.2.1-repo/incl5.6/stdio.h" 1 3
 
 

 
 
 

 






#pragma ident	"@(#)stdio.h	1.49	97/05/09 SMI"	

# 1 "/usr/include/sys/feature_tests.h" 1 3
 
 

 
 
 




#pragma ident	"@(#)feature_tests.h	1.13	97/06/26 SMI"





 











 







































 
















 

















 

























# 17 "/usr/local/lib/gcc-lib/i386-unknown-solaris2.5.1/2.7.2.1-repo/incl5.6/stdio.h" 2 3

# 1 "/usr/include/sys/va_list.h" 1 3
 







#pragma ident	"@(#)va_list.h	1.6	96/01/26 SMI"

 













# 41 "/usr/include/sys/va_list.h" 3



typedef void *__va_list;











# 18 "/usr/local/lib/gcc-lib/i386-unknown-solaris2.5.1/2.7.2.1-repo/incl5.6/stdio.h" 2 3


 













typedef unsigned int	size_t;


# 52 "/usr/local/lib/gcc-lib/i386-unknown-solaris2.5.1/2.7.2.1-repo/incl5.6/stdio.h" 3


# 66 "/usr/local/lib/gcc-lib/i386-unknown-solaris2.5.1/2.7.2.1-repo/incl5.6/stdio.h" 3



typedef long		fpos_t;


















 










 



















# 127 "/usr/local/lib/gcc-lib/i386-unknown-solaris2.5.1/2.7.2.1-repo/incl5.6/stdio.h" 3




















































typedef struct	 
{




	int		_cnt;	 
	unsigned char	*_ptr;	 

	unsigned char	*_base;	 
	unsigned char	_flag;	 
	unsigned char	_file;	 
} FILE;


extern FILE		__iob[60 ];



extern FILE		*_lastbuf;
extern unsigned char	*_bufendtab[];

extern unsigned char	 _sibuf[], _sobuf[];


 
# 227 "/usr/local/lib/gcc-lib/i386-unknown-solaris2.5.1/2.7.2.1-repo/incl5.6/stdio.h" 3




extern int	remove(const char *);
extern int	rename(const char *, const char *);
extern FILE	*tmpfile(void);
extern char	*tmpnam(char *);



extern int	fclose(FILE *);
extern int	fflush(FILE *);
extern FILE	*fopen(const char *, const char *);
extern FILE	*freopen(const char *, const char *, FILE *);
extern void	setbuf(FILE *, char *);


extern void setbuffer(FILE *, char *, size_t);
extern int setlinebuf(FILE *);

extern int	setvbuf(FILE *, char *, int, size_t);
 
extern int	fprintf(FILE *, const char *, ...);
 
extern int	fscanf(FILE *, const char *, ...);
 
extern int	printf(const char *, ...);
 
extern int	scanf(const char *, ...);


 
extern int	snprintf(char *, size_t, const char *, ...);

 
extern int	sprintf(char *, const char *, ...);
 
extern int	sscanf(const char *, const char *, ...);
extern int	vfprintf(FILE *, const char *, __va_list);
extern int	vprintf(const char *, __va_list);


extern int	vsnprintf(char *, size_t, const char *, __va_list);

extern int	vsprintf(char *, const char *, __va_list);
extern int	fgetc(FILE *);
extern char	*fgets(char *, int, FILE *);
extern int	fputc(int, FILE *);
extern int	fputs(const char *, FILE *);
extern int	getc(FILE *);
extern int	getchar(void);
extern char	*gets(char *);
extern int	putc(int, FILE *);
extern int	putchar(int);
extern int	puts(const char *);
extern int	ungetc(int, FILE *);
extern size_t	fread(void *, size_t, size_t, FILE *);
extern size_t	fwrite(const void *, size_t, size_t, FILE *);
extern int	fgetpos(FILE *, fpos_t *);
extern int	fseek(FILE *, long, int);
extern int	fsetpos(FILE *, const fpos_t *);
extern long	ftell(FILE *);
extern void	rewind(FILE *);
extern void	clearerr(FILE *);
extern int	feof(FILE *);
extern int	ferror(FILE *);
extern void	perror(const char *);

extern int	__filbuf(FILE *);
extern int	__flsbuf(int, FILE *);

 





extern FILE	*fdopen(int, const char *);
extern char	*ctermid(char *);
extern int	fileno(FILE *);



 


# 324 "/usr/local/lib/gcc-lib/i386-unknown-solaris2.5.1/2.7.2.1-repo/incl5.6/stdio.h" 3


 




extern FILE	*popen(const char *, const char *);
extern char	*cuserid(char *);
extern char	*tempnam(const char *, const char *);
extern int	getopt(int, char *const *, const char *);

extern int	getsubopt(char **, char *const *, char **);

extern char	*optarg;
extern int	optind, opterr, optopt;
extern int	getw(FILE *);
extern int	putw(int, FILE *);
extern int	pclose(FILE *);



 







 



# 367 "/usr/local/lib/gcc-lib/i386-unknown-solaris2.5.1/2.7.2.1-repo/incl5.6/stdio.h" 3


# 472 "/usr/local/lib/gcc-lib/i386-unknown-solaris2.5.1/2.7.2.1-repo/incl5.6/stdio.h" 3



























# 520 "/usr/local/lib/gcc-lib/i386-unknown-solaris2.5.1/2.7.2.1-repo/incl5.6/stdio.h" 3









# 1 "test_sprintf.c" 2



void main()
{
  char * PERCENT = "%%";
  char buffer[1024];
  float a = 1.23;
  printf("%.2f%% error\n", a);
  sprintf(buffer, "%.2f%% error\n", a);
  printf(buffer);
  
  sprintf(buffer, "%.2f%s error\n", a, PERCENT);
  printf(buffer);

}


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]