Здравствуйте.
Вчера у человека не ставился Xilinx ISE 13/14 - вылет всего, начиная с инсталлятора, с buffer overflow exception (BEX / BEX64), попросили разобраться.
В этом конкретном случае проблема была в системной переменной PATH, которая оканчивалась как-то так: "...mingw32\bin; ;".
Виновник - какая-то библиотечная функция обрезания leading/trailing пробелов при разборе этой самой PATH, которая в их софте повсеместно встречается. Для примера, xwebtalk.exe (x32):
int __cdecl sub_401110(char *src, char *dst)
{
char *tmp; // eax@1
int cnt; // edi@1
char *src_plus_one; // esi@1
char v5; // dl@2
int len; // edx@3
int result; // eax@3
int v8; // esi@8
tmp = src;
cnt = 0;
src_plus_one = src + 1;
do
v5 = *tmp++;
while ( v5 );
len = tmp - src_plus_one;
result = tmp - src_plus_one - 1;
if ( len )
{
if ( *src == 0x20 )
{
do
++i;
while ( src[cnt] == 0x20 );
}
for ( ; src[result] == 0x20; --result )
;
v8 = result - cnt;
result = (int)strncpy(dst, &src[cnt], result - cnt + 1);
dst[v8 + 1] = 0;
}
return result;
}
Если присмотреться, то в случае, если вся строка состоит из пробелов, в качестве size для strncpy передаётся что-то вроде -strlen(src). Там и вываливался в дебаггер.
Почистил PATH, убрав "; ;" - работает.
Гуглем не нашёл подобного на форуме, может кому пригодится.