You are viewing a plain text version of this content. The canonical link for it is here.
Posted to c-dev@xerces.apache.org by "Boris Kolpackov (JIRA)" <xe...@xml.apache.org> on 2009/11/18 06:18:39 UTC

[jira] Closed: (XERCESC-1727) On Linux "Input data transcoding error" message does not contain invalid character if no proper locale is set

     [ https://issues.apache.org/jira/browse/XERCESC-1727?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Boris Kolpackov closed XERCESC-1727.
------------------------------------

       Resolution: Fixed
    Fix Version/s: 3.0.1

This seems to be a problem with libc mblen, not with Xerces-C++. Furthermore, I did a search in the 3.1.0 code base and the only place which uses mblen is the Iconv transcoder. Since on Linux we use IconvGNU, I am marking this bug as fixed.

> On Linux "Input data transcoding error" message does not contain invalid character if no proper locale is set
> -------------------------------------------------------------------------------------------------------------
>
>                 Key: XERCESC-1727
>                 URL: https://issues.apache.org/jira/browse/XERCESC-1727
>             Project: Xerces-C++
>          Issue Type: Bug
>          Components: Utilities
>    Affects Versions: 2.7.0
>         Environment: Linux, both 32- and 64-bit Red Hats, probably others
>            Reporter: Sergey Melnikov
>             Fix For: 3.0.1
>
>
> The test case involved russian letter put into XML file. Transcoding crashed with "Input data transcoding error..." message but no symbol displayed. I've traced the problem to memory allocation for a single character being transcoded. The size of a character in Linux implementation is determined through 'mblen' in calcRequiredSize(..) but it seems nothing more than plain 7-bit ASCII is acceptable. 
> Here is a source code snippet based on original calcRequiredSize fed with a character I used:
> 	
> 	char sExp[2]={'\192','\0'};
> // the line below "fixes" the case: the character (russian 'A') is shown within exception message
> //	setlocale(LC_ALL,"Russian");
> 	int iLen=std::mblen(&sExp[0],MB_CUR_MAX);
> 	if(-1 == iLen)
> 	{
> 		// ERROR! we should not be here, since no allocation will be done -- and that's what I get
> 		throw 1;
> 	}
> Other platforms (Win32, Solaris etc) worked out fine.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


---------------------------------------------------------------------
To unsubscribe, e-mail: c-dev-unsubscribe@xerces.apache.org
For additional commands, e-mail: c-dev-help@xerces.apache.org