Package: onscripter
Version: 0.0.20070826a-1
Severity: normal
In ONScripterLabel_rmenu.cpp, in ONScripterLabel::executeSystemLoad(),
the following code has a buffer overflow when defined(ENABLE_1BYTE_CHAR)
&& defined(FORCE_1BYTE_CHAR):
char *buffer = new char[ strlen( save_item_name ) + 30 + 1 ];
for ( unsigned int i=1 ; i<=num_save_file ; i++ ){
searchSaveFile( save_file_info, i );
menu_font.setXY( (menu_font.num_xy[0] - (strlen( save_item_name ) /
2 + 15) ) / 2 );
if ( save_file_info.valid ){
sprintf( buffer, MESSAGE_SAVE_EXIST,
save_item_name,
save_file_info.sjis_no,
save_file_info.sjis_month,
save_file_info.sjis_day,
save_file_info.sjis_hour,
save_file_info.sjis_minute );
nofile_flag = false;
MESSAGE_SAVE_EXIST is 21 characters, not counting formatting strings and the
NUL terminator. Each of the sjis_* fields may be up to four characters,
making for 41, not 30 characters.
I have observed this behavior causing crashes in copies of onscripter that I
have built myself; I've also reported it to upstream (with a patch) but
it has evidently not been applied.
My patch is as follows; it's a bit brute force but allows enough space
for the sprintf to be safe:
---
onscripter-insani_20060724/build-tree/onscripter-20060724-insani/ONScripterLabel_rmenu.cpp
2006-06-22 00:16:52.000000000 -0400
+++
onscripter-insani_20060724.new/build-tree/onscripter-20060724-insani/ONScripterLabel_rmenu.cpp
2006-11-19 01:16:15.000000000 -0500
@@ -319,7 +319,7 @@
flush( refreshMode() );
bool nofile_flag;
- char *buffer = new char[ strlen( save_item_name ) + 30 + 1 ];
+ char *buffer = new char[ strlen( save_item_name ) + 256 ];
for ( unsigned int i=1 ; i<=num_save_file ; i++ ){
searchSaveFile( save_file_info, i );
@@ -401,7 +401,7 @@
flush( refreshMode() );
bool nofile_flag;
- char *buffer = new char[ strlen( save_item_name ) + 30 + 1 ];
+ char *buffer = new char[ strlen( save_item_name ) + 256 ];
for ( unsigned int i=1 ; i<=num_save_file ; i++ ){
SaveFileInfo save_file_info;
-- System Information:
Debian Release: lenny/sid
APT prefers unstable
APT policy: (500, 'unstable'), (500, 'testing'), (1, 'experimental')
Architecture: i386 (i686)
Kernel: Linux 2.6.21-2-k7 (SMP w/1 CPU core)
Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash
--
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]