Проблема есть, есть и решение. Интересно, что вылезло это только на конкретной конфигурации - получается во всех остальных системных библиотеках используется реализация memcpy, которой не принциально пересечение областей. Но потенциально может вылезти где угодно и когда угодно. :( На остальные memcpy в коде тоже посмотрим.
man memcpy:
The memcpy() function copies n bytes from memory area src to memory area dest. The memory areas should not overlap. Use memmove(3) if the memory areas do overlap.
>cvs diff -u pa_common.C Index: pa_common.C =================================================================== RCS file: /parser3project/parser3/src/main/pa_common.C,v retrieving revision 1.259 diff -u -r1.259 pa_common.C --- pa_common.C 25 May 2010 09:30:30 -0000 1.259 +++ pa_common.C 1 Jun 2010 13:18:16 -0000 @@ -102,7 +102,7 @@ while(char* eol=(char*)memchr(bol, '\r', eob -bol)) { size_t len=eol-bol; if(dest!=bol) - memcpy(dest, bol, len); + memmove(dest, bol, len); dest+=len; *dest++='\n';
@@ -114,7 +114,7 @@ } // last piece without \r if(dest!=bol) - memcpy(dest, bol, eob-bol); + memmove(dest, bol, eob-bol); str[length]=0; // terminating }
P.S. Вызов fix_line_breaks идет из VForm::AppendFormEntry. |