Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-8286287

Reading file as UTF-16 causes Error which "shouldn't happen"

    XMLWordPrintable

    Details

    • Subcomponent:
    • Introduced In Build:
      b07
    • Introduced In Version:
      17
    • Resolved In Build:
      b23
    • CPU:
      generic
    • OS:
      generic

      Description

      A DESCRIPTION OF THE PROBLEM :
      If a text file is UTF-8 and has an odd number of characters, trying to read it as UTF-16 throws an Error caused by MalformedInputException:

      Files.readString(Paths.get("text.txt"), StandardCharsets.UTF_16);

      A comment in the java.lang.String method which causes the Error says "// Substitution is always enabled, // so this shouldn't happen". Clearly the intent is that only the MalformedInputException should be thrown.

      STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
      Create a UTF-8 file text.txt containing an odd number of characters. Create, compile and run Test.java with the provided source code.

      EXPECTED VERSUS ACTUAL BEHAVIOR :
      EXPECTED -
      Exception caught, no output.
      ACTUAL -
      Exception in thread "main" java.lang.Error: java.nio.charset.MalformedInputException: Input length = 1
              at java.base/java.lang.String.decodeWithDecoder(String.java:1220)
              at java.base/java.lang.String.newStringNoRepl1(String.java:796)
              at java.base/java.lang.String.newStringNoRepl(String.java:748)
              at java.base/java.lang.System$2.newStringNoRepl(System.java:2439)
              at java.base/java.nio.file.Files.readString(Files.java:3370)
              at Test.main(Test.java:8)
      Caused by: java.nio.charset.MalformedInputException: Input length = 1
              at java.base/java.nio.charset.CoderResult.throwException(CoderResult.java:274)
              at java.base/java.lang.String.decodeWithDecoder(String.java:1213)
              ... 5 more

      ---------- BEGIN SOURCE ----------
      import java.nio.charset.StandardCharsets;
      import java.nio.file.Files;
      import java.nio.file.Paths;

      public class Test {
          public static void main(String[] args) {
              try {
                  Files.readString(Paths.get("text.txt"), StandardCharsets.UTF_16);
              } catch (Exception e) {}
          }
      }
      ---------- END SOURCE ----------

      FREQUENCY : always


        Attachments

        1. Test.java
          0.3 kB
        2. test.txt
          0.0 kB

          Issue Links

            Activity

              People

              Assignee:
              naoto Naoto Sato
              Reporter:
              webbuggrp Webbug Group
              Votes:
              0 Vote for this issue
              Watchers:
              6 Start watching this issue

                Dates

                Created:
                Updated:
                Resolved: