I have encountered a problem on a non-US Windows XP (Russian in my case).
It can be reproduced with both TortoiseSVN and command-line client
built from TSVN distribution.
If error happens during network operation, Neon library tries to do
some processing
of error message. Alas, it uses plain char* datatype, which results in ASSERT
in debug mode or mangled message in release mode.
A part of typical stacktrace below:
msvcr90d.dll!_chvalidator_l(localeinfo_struct * plocinfo=0x024af46c,
int c=-57, int mask=32) Line 68 + 0x2b bytes C++
msvcr90d.dll!_iscntrl_l(int c=-57, localeinfo_struct *
plocinfo=0x00000000) Line 300 + 0x4f bytes C++
msvcr90d.dll!iscntrl(int c=-57) Line 313 + 0xb bytes C++
> TortoiseProc.exe!ne_strclean(char * str=0x020128a4) Line 354 + 0xd bytes C
TortoiseProc.exe!ne_get_error(ne_session_s * sess=0x020127e0) Line
280 + 0xe bytes C
TortoiseProc.exe!generate_error(svn_ra_neon__request_t *
req=0x022c1538, apr_pool_t * pool=0x022b6400) Line 582 + 0x10 bytes C
TortoiseProc.exe!svn_ra_neon__request_dispatch(int *
code_p=0x024af530, svn_ra_neon__request_t * req=0x022c1538, apr_hash_t
* extra_headers=0x00000000, const char * body=0x00000000, int
okay_1=200, int okay_2=0, apr_pool_t * pool=0x022b6400) Line 1448 +
0xd bytes C
The offending function in ne_strings.c look like this:
char *ne_strclean(char *str)
{
char *pnt;
for (pnt = str; *pnt; pnt++)
if (iscntrl(*pnt) || !isprint(*pnt)) *pnt = ' ';
return str;
}
And iscntrl() call fails trying to validate argument range.
I am not sure how to fix this correctly and who to approach with the fix.
Perhaps there is some compile-time configuration option for Neon to use
wide chars or at least unsigned chars?
--
Alexander S. Klenin
Insight Experts Ltd.
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe_at_tortoisesvn.tigris.org
For additional commands, e-mail: dev-help_at_tortoisesvn.tigris.org
Received on 2008-01-22 19:27:06 CET