|
The problem is in filter_transliterate_text() doing isc_blob_filter_put_segment action.
/* How much space do we need to convert? */ result_length = aux->ctlaux_obj1.convertLength(len); result_length is USHORT, while CsConvert::convertLength() returns ULONG value since v2.0 (if i not mistaken). It may return 4 times more bytes than was passed in "len" and easy overflow USHORT value. Therefore small buffer allocated in aux->ctlaux_buffer1 and CsConvert::convert() overflow it corrupting memory. |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Run Firebird and open 2 command prompts.
1. isql <any database> -ch win1251 -user ... -pass ...
input core-2222.sql;
2. isql <same database> -ch win1251 -user ... -pass ...
select char_length(mon$sql_text) from mon$statements;
server crashed here