[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Newsgroup Home]
[news.eclipse.dsdp.ercp] Display problem running on some VMs

Hi,

When I run the example programs (hello, demo, ...) on  VMs other than 
Hotspot I run into a problem displaying characters. The text strings are 
displayed with unprintable characters in the string (see 
http://twitpic.com/btl82 for an example). I have seen this sort of thing 
before when a non-null terminated string is retrieved via the jni call 
GetStringChars and used directly.

Section 10.8 of the JNI Programmers Manual and Specification states:

10.8 Terminating Unicode Strings
Unicode strings obtained from GetStringChars or GetStringCritical are not 
NULL-terminated. Call GetStringLength to find out the number of 16-bit 
Unicode characters in a string. Some operating systems, such as Windows NT, 
expect two trailing zero byte values to terminate Unicode strings. You 
cannot pass the result of GetStringChars to Windows NT APIs that expect a 
Unicode string. You must make another copy of the string and insert the two 
trailing zero byte values.

The jni code in eRCP incorrectly assumes that the string returned from 
GetStringChars is null terminted and that the value of GetStringLength 
includes the null byte at the end-

stringCharData = GetStringChars(env, javaString0);
if (ExceptionCheck(env)) return modifiedText;
stringLength = GetStringLength(env, javaString0);
modifiedText = convertToNativeString(stringCharData, stringLength, 
shouldFreeString);

convertToNativeString calls g_utf16_to_utf8 which adds a single 0 byte.

Apparently Hotspot does not follow the specification and returns a 
null-terminated string and a corresponding length. eRCP works with Hotspot 
but does not follow the JNI spec and therefore does not work with VMs which 
do follow the specification.

Do you agree with my analysis? Should I file a bug (against which 
component?). Any chance it will get fixed, seeing as how it already works 
with Hotspot?

Thanks

Tom GROSMAN