Hello All,
When I try to tokenize a large FCode source file, the tokenizer crashes with Segmentation Fault.
Debug messages:
tst.fth:6763: debug: tokenizing control word 'endof' tst.fth:6764: debug: read token 'endcase', length=7 tst.fth:6764: debug: matched internal opcode 0x0013 tst.fth:6764: debug: tokenizing control word 'endcase' tst.fth:6764: debug: endcase offset 0x8401 tst.fth:6764: debug: endcase offset 0xffff83f1 ?????????? Segmentation fault (core dumped)
When I looked at the code, the offending function was in emit.c :
s16 receive_offset(void) { s16 offs=0;
if (offs16) { offs= ((*opc)<<8)|(*(opc+1)); } else { offs=(*opc); } return offs; }
If the msb of *opc is set 1(Value >0 0x8yyy), the offs gets changed to ffff8yyy.
Changing offs to u16 and receive_offset returning value of u16 type would solve the problem. Change the prototype for receive_offset in emit.h as well.
Modified code:
u16 receive_offset(void) <----This line changed { u16 offs=0; <---- This line changed
if (offs16) { offs= ((*opc)<<8)|(*(opc+1)); } else { offs=(*opc); } return offs; }
Steps to reproduce the problem very simply: - Create a fcode source file with around 7000 variables. - Use the following simple test code:
: test ( -- ) 1 to temp1 2 to temp2 temp1 case 1 of ." One" cr endof 2 of temp2 ." Two" cr endof endcase ;
- Run tokenizer on the file. toke will core dump.
Regards, Prasanna
__________________________________ Yahoo! Mail - PC Magazine Editors' Choice 2005 http://mail.yahoo.com