[foreign-memaccess+abi] RFR: 8268230: Foreign Linker API & Windows user32/kernel32: String conversion seems broken

Duncan Gittins duncan.gittins at gmail.com
Fri Jun 11 16:41:46 UTC 2021


A better range of test strings for Windows <=> wide char conversions and
back using CLinker.toCString / CLinker.toJavaString might be:

   private static final String [] STRINGS = {
            "","X","12345","testing".repeat(5)
            ,"euro \u20AC"
            ,"yen \u00a5"
            ,"Small-Omega \u03C9"
            ,"umlaut \u00FC".repeat(2000)
    };

Kind regards

Duncan


On Fri, 11 Jun 2021 at 13:54, Duncan Gittins <duncan.gittins at gmail.com>
wrote:

> I've had problems with Windows String conversions to/from wide string
> using Clinker toCString / toJavaString so switched to using kernel32.dll
> MultiByteToWideChar / WideCharToMultiByte. Hopefully your fix will
> address the issue with toCString(s, UTF_16LE).
>
> I don't think reverse conversion works using Clinker.toJavaString. It
> may help to verify by changing
> "test/jdk/java/foreign/TestToCStringWide.java.testStrings()" to handled
> input array of strings:
>
>      for (String testString : new String[] {"", "x", "testing"} ) { ...
>
> .. and also checked the reverse operation returns the original:
>
>         String outString = CLinker.toJavaString(text, charset);
>         assertEquals(testString, outString);
>
> Kind regards
>
> Duncan
>
>
> On 10/06/2021 13:12, Jorn Vernee wrote:
> > The problem is that we only add a single 0 byte as a null terminator,
> regardless of the charset used. For wider char sets, more 0 bytes need to
> be added. For instance, for UTF_16LE two 0 bytes need to be added.
> >
> > This patch fixes the issue by adding the null terminator to the Java
> string, and only then encoding it as a `byte[]`.
> >
> > -------------
> >
> > Commit messages:
> >   - Fix toCString for wider character sets
> >
> > Changes: https://git.openjdk.java.net/panama-foreign/pull/554/files
> >   Webrev:
> https://webrevs.openjdk.java.net/?repo=panama-foreign&pr=554&range=00
> >    Issue: https://bugs.openjdk.java.net/browse/JDK-8268230
> >    Stats: 85 lines in 2 files changed: 75 ins; 6 del; 4 mod
> >    Patch: https://git.openjdk.java.net/panama-foreign/pull/554.diff
> >    Fetch: git fetch https://git.openjdk.java.net/panama-foreign
> pull/554/head:pull/554
> >
> > PR: https://git.openjdk.java.net/panama-foreign/pull/554
> > .
>
>
>


More information about the panama-dev mailing list