SourceForge.net Logo

[Release b]
<t4m_bug_bfprintf>
Mon Jun  7 11:15:37 WEST 2004

The function bfprintf [../utility/buffer.c] suffers from a buffer overrun.
It tries to put characters into a buffer without testing whether there is space
for them. I have observed heap corruption while fixing other bugs (because of
long debugging messages), but this time I don't have any specific example,
since in normal circumstances error messages are relatively short.

The fix consists of just adding a call to the function stretch_buffer
[../utility/buffer.c] before inserting the character into the buffer. Here is
a diff, lines marked with '+' have been added,

*** buffer.c1 Sat Jan 17 15:55:40 1998
--- buffer.c Mon Jun  7 11:08:00 2004
***************
*** 222,227 ****
--- 222,228 ----
  		case 'c' : {
  		    /* '%c' -> character (passed as int) */
  		    int ac = va_arg ( args, int ) ;
+ 		    p = stretch_buffer ( bf, p, 1 ) ;
  		    *( p++ ) = ( character ) ac ;
  		    break ;
  		}
***************
*** 277,282 ****
--- 278,284 ----
  		}
  		case '%' : {
  		    /* '%%' -> percent */
+ 		    p = stretch_buffer ( bf, p, 1 ) ;
  		    *( p++ ) = ( character ) c ;
  		    break ;
  		}
***************
*** 288,293 ****
--- 290,296 ----
  		}
  	    }
  	} else {
+ 	    p = stretch_buffer ( bf, p, 1 ) ;
  	    *( p++ ) = ( character ) c ;
  	}
      }