@@ -32,16 +32,19 @@ extern int sourceline;
3232int nerrs ;
3333
3434static void
35- err_sprintf (buf , fmt , args )
35+ err_snprintf (buf , len , fmt , args )
3636 char * buf , * fmt ;
37+ int len ;
3738 va_list args ;
3839{
3940 if (!sourcefile ) {
40- vsprintf (buf , fmt , args );
41+ vsnprintf (buf , len , fmt , args );
4142 }
4243 else {
43- sprintf (buf , "%s:%d: " , sourcefile , sourceline );
44- vsprintf ((char * )buf + strlen (buf ), fmt , args );
44+ int n = snprintf (buf , len , "%s:%d: " , sourcefile , sourceline );
45+ if (len > n ) {
46+ vsnprintf ((char * )buf + n , len - n , fmt , args );
47+ }
4548 }
4649}
4750
@@ -53,7 +56,7 @@ err_print(fmt, args)
5356{
5457 char buf [BUFSIZ ];
5558
56- err_sprintf (buf , fmt , args );
59+ err_snprintf (buf , BUFSIZ , fmt , args );
5760 err_append (buf );
5861}
5962
@@ -87,7 +90,7 @@ Error_Append(fmt, va_alist)
8790 char buf [BUFSIZ ];
8891
8992 va_init_list (args , fmt );
90- vsprintf (buf , fmt , args );
93+ vsnprintf (buf , BUFSIZ , fmt , args );
9194 va_end (args );
9295 err_append (buf );
9396}
@@ -104,7 +107,7 @@ Warn(fmt, va_alist)
104107 char buf [BUFSIZ ];
105108 va_list args ;
106109
107- sprintf (buf , "warning: %s" , fmt );
110+ snprintf (buf , BUFSIZ , "warning: %s" , fmt );
108111
109112 va_init_list (args , fmt );
110113 err_print (buf , args );
@@ -126,7 +129,7 @@ Warning(fmt, va_alist)
126129
127130 if (!RTEST (verbose )) return ;
128131
129- sprintf (buf , "warning: %s" , fmt );
132+ snprintf (buf , BUFSIZ , "warning: %s" , fmt );
130133
131134 va_init_list (args , fmt );
132135 err_print (buf , args );
@@ -145,7 +148,7 @@ Bug(fmt, va_alist)
145148 char buf [BUFSIZ ];
146149 va_list args ;
147150
148- sprintf (buf , "[BUG] %s" , fmt );
151+ snprintf (buf , BUFSIZ , "[BUG] %s" , fmt );
149152 rb_in_eval = 0 ;
150153
151154 va_init_list (args , fmt );
@@ -566,7 +569,7 @@ Init_Exception()
566569 va_list args;\
567570 char buf[BUFSIZ];\
568571 va_init_list(args,fmt);\
569- vsprintf (buf, fmt, args);\
572+ vsnprintf (buf, BUFSIZ , fmt, args);\
570573 va_end(args);\
571574 rb_raise(exc_new2(klass, buf));\
572575}
@@ -677,7 +680,7 @@ Fatal(fmt, va_alist)
677680 char buf [BUFSIZ ];
678681
679682 va_init_list (args , fmt );
680- vsprintf (buf , fmt , args );
683+ vsnprintf (buf , BUFSIZ , fmt , args );
681684 va_end (args );
682685
683686 rb_in_eval = 0 ;
@@ -704,7 +707,7 @@ rb_sys_fail(mesg)
704707 }
705708 else {
706709 buf = ALLOCA_N (char , strlen (err )+ 1 );
707- sprintf (buf , "%s" , err );
710+ strcpy (buf , err );
708711 }
709712
710713 errno = 0 ;
0 commit comments