bug#75440: dejagnu does not like java.io.Console of OpenJDK >= 22
Chris Nospam via Bug-dejagnu via <[email protected]> Tue, 14 Jan 2025 11:12:01 +0000
| Newsgroups | gmane.comp.sysutils.dejagnu.bugs |
|---|---|
| Message-ID | <trinity-e7e965ee-266d-4ed1-8da4-f3f6bfb162c1-1736853121135@trinity-msg-rest-gmx-gmx-live-bbc95d94c-lv4zd> |
--refeik-4b82c5a3-1c44-4e21-8eb9-9215abd13c61 Content-Type: text/html; charset=UTF-8 <div style="font-family: 'verdana'; font-size: 12px; color: #000;"> <div>Dear Jacob,</div> <div style="font-family: verdana; font-size: 12px; color: rgb(0, 0, 0);"> </div> <div style="font-family: verdana; font-size: 12px; color: rgb(0, 0, 0);">sorry for my late reply and thanks for your rapid and detailed answer. Also I am sorry for the faulty default.exp, it was a quick & dirty version to trigger the bug and only a short snipped of my real project. It should only show the problem with the first echo. However, I have enhanced it somehow now, see the attachement.</div> <div style="font-family: verdana; font-size: 12px; color: rgb(0, 0, 0);"> </div> <div>> Tcl interpolates backslash escapes in double-quoted strings</div> <div>I changed now \r\n to \\r\\n in all regular expressions.</div> <div style="font-family: verdana; font-size: 12px; color: rgb(0, 0, 0);"> </div> <div>Please forgive me, I am not an expert in expect script but I try to do my best. I would be happy if you could give me some (direct) advices.</div> <div>I will open a corresponding issue at https://bugreport.java.com and report back a link. Hopefully, they will look into/fix it and not only dismiss that using dejagnu is an edge case.</div> <div style="font-family: verdana; font-size: 12px; color: rgb(0, 0, 0);"> </div> <div>Many thanks again,<br>Chris</div> <br><br><br></div> <div id="sub-body-container" style="margin: 10px 5px 5px 10px; padding: 10px 0px 10px 10px; border-left: 2px solid rgb(195, 217, 229);"> <div style="margin: 0px 0px 10px;"> <div><strong>Gesendet: </strong>Donnerstag, 9. Januar 2025 um 02:55</div> <div><strong>Von: </strong>"Jacob Bachmeyer" <[email protected]></div> <div><strong>An: </strong>"Chris Nospam" <[email protected]>, [email protected]</div> <div><strong>Betreff: </strong>Re: bug#75440: dejagnu does not like java.io.Console of OpenJDK >= 22</div> </div> <div class="moz-cite-prefix">On 1/8/25 10:44, Chris Nospam via Bug-dejagnu via wrote:</div> <blockquote> <pre class="moz-quote-pre">Dear maintainers, starting with OpenJDK Java 22 java programs using java.io.Console cannot be testet with dejagnu any more. With JDK 21 it works like a charm.</pre> </blockquote> <p>This is a JVM bug or misfeature. We have recently had similar problems with MinGW GCC tested under Wine. In that case, it was a consequence of Wine's new support for Windows quasi-ptys.</p> <blockquote> <pre class="moz-quote-pre">I belive it has to do with excape sequences that are not filtered out correctly or similar. I am using dejagnu 1.6.3-1, debain package under Ubuntu 24.04.</pre> </blockquote> <p>DejaGnu does not and cannot filter escape sequences. Expect matches the patterns it is given. You can write patterns in your testsuite that accommodate or even verify escape sequences from the program under test.</p> <blockquote> <pre class="moz-quote-pre">For an easy reproduction of the bug I have attached a simple example simple.zip. Just unpack it and execute exectest.sh. Be sure to update JAVA_HOME in this script to a jdk 22 or 23 installation. In testsuite/simple.log some escape sequences are shown were no one are expected: ^[[?1h^[=^[[?2004hhello ^[[?1l^[>^[[?1000l^[[?2004lhello</pre> </blockquote> <p>The JVM IO facilities are inserting escape sequences without your program calling for them. This is a JVM bug or misfeature that Expect (on which DejaGnu is built) exposes.</p> <blockquote> <pre class="moz-quote-pre">The attached simple echo example works after simply commenting the lines 13-14 (using Console) and uncommenting lines 16-17 (using BufferedReader) in testsuite/simple.sh. Alternatively it also works by passing -Djdk.console=java.base to the jvm (1st line in exectest.sh), to trigger the old implementation in JDK. #!/usr/bin/env -S java --source 23 // #!/usr/local/java/jdk-23.0.1/bin/java --source 23 -Djdk.console=java.base import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class ConsoleTest { public static void main(String[] args) throws IOException { System.out.print("prompt> "); java.io.Console c = System.console(); String input = c.readLine(); // BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); // String input = in.readLine(); System.out.println(input); System.out.println("prompt> "); } } </pre> </blockquote> <p>First, think about what your program actually does compared to what your testsuite code expects it to do. Examine the message produced at the end of the test run in simple.log. In fact, that message is produced *after* echo.exp has completed. Where does that message come from?</p> <p>(You will benefit far more from the lesson if you find it for yourself than if I tell you. There is only one place in your testsuite that can emit that message.)</p> <p>Second, the inability to send text to the program under test is not a failure: it is an error and probably an UNRESOLVED test. A block that is executed as a result of catching a Tcl error probably should be invoking "error" or possibly "unresolved", not "fail" or even "pass" (unless you are testing an error condition).</p> <p>Third, Tcl interpolates backslash escapes in double-quoted strings. You will need to double (some of) the backslashes and/or review re_syntax(n) for Tcl regexp syntax.</p> <p>Fourth, think about simple_test could actually fail. That depends on what you are trying to do, but any "pass" should have a corresponding "fail" somewhere.</p> <p>(Most of the above refers to Expect code in your testsuite/config/default.exp file.)</p> <blockquote> <pre class="moz-quote-pre">It has something to do with the change of the Java default Console provider to JLine in Java 22. <a class="moz-txt-link-freetext" href="https://bugs.openjdk.org/browse/JDK-8309141is" target="_blank" rel="noopener noreferrer">https://bugs.openjdk.org/browse/JDK-8309141is</a> is not special with DejaGnu; we have recently had similar issues with Wine, encountered while testing mingw32 builds on *nix hosts However, as Java Console works everywhere else (windows/linux console/bash/EclipseIDE internal "console"/IntelliJ internal "console") as far I can see, it seems to be something special with dejagnu.</pre> </blockquote> <p>No, the problem is with the JVM and/or your programs and scripts. It appears to work everywhere else because those escape sequences either perform terminal control functions or are ignored. You can write regexps that will optionally match and discard the escape sequences. Expect exposes this issue because it is strict about matching exactly what you tell it to match.</p> <p> </p> <p>-- Jacob</p> <p> </p> </div> --refeik-4b82c5a3-1c44-4e21-8eb9-9215abd13c61 Content-Type: application/x-zip-compressed Content-Disposition: attachment; filename=simple.zip Content-Transfer-Encoding: base64 X-UI-Content-Hash: c6f53b317bbddf4e2373eaf1a8cf9e546a49b612ff031e93f74dea63f82e15e UEsDBBQAAAAIAGyCJ1qQ0RLGiAAAAJ8AAAALABwAZXhlY3Rlc3Quc2hVVAkAA/tFfWek+H9ndXgL AAEE8VYAAATxVgAAU1bULy0u0k/KzNMvzuDiSq0oyC8qUfByDHOM9/D3dbUFy+bkJyfm6GclliXq Z6Vk6xoZ6xnoGcLUBjiGeNiqVMO11IIMs1KpBonXcnElpyiUpBaXFJdmlqRyFeUq6KYpaOnl5KcD yeLSXK6i0jyQtIKubkl+fo5CcWZuQU6qQmpyRr4e0HwuAFBLAwQKAAAAAACDiylaAAAAAAAAAAAA AAAACgAcAHRlc3RzdWl0ZS9VVAkAAxX5f2cW+X9ndXgLAAEE8VYAAATxVgAAUEsDBBQAAAAIADuH KVqDcqh8eQEAADcDAAATABwAdGVzdHN1aXRlL3NpbXBsZS5zaFVUCQADAfJ/Zwbyf2d1eAsAAQTx VgAABPFWAABtUctOwzAQvPsrlnBxVMXhcSMqBygHJCQkyg04OMmmdUns4EcLQv13nMRFJHQviXZ2 ZnbHpyepMzrNhUxRbiFZwoZvOSSJUU4XCBeXJE3hdJiqVcHrtBtIN+V7cnHJzth5z52SIFn4CVYo aVSN8w5mOTdIiGhapW3vwoRiN66qUGP5hLxEnU3h+8e7zwJbK5T8j8nW2aXVyJsDm7Qur0UBRc2N gdvB/RmNhW9CwFfAjeXWf7ZKlNBwIamXEXL18gZcr0wMdq3VzsAfdy8AoXLlRbmEDycszKHitcHs F92tRY1ATzo0/sPqavllLDZMOcta72dp1GrVtPYaojgjo9HDkeEGENJbBX5IlcbZiOLfaZzmQJK4 m/Rp1/qXHg3qQsbTZYZ0vJyneEUhmaeVD0Ie22F6ZC1p9Cpf5QJzt7qCCGZBaAZ9P5pIiApoP8Dw w/lsadRFGcXTMLsKT2C1w7HIHtC/yhHGke16szgL62OxVmMpMv7bE7InP1BLAwQUAAAACACDiyla DX1zO4kCAACzBQAAFAAcAHRlc3RzdWl0ZS9zaW1wbGUubG9nVVQJAAMW+X9nGPl/Z3V4CwABBPFW AAAE8VYAAK1UTWsbMRA9R5BfkMsgfIgP+xGTOInBKaVQaCk9tOkpBSNrZ71q1tJWH45DyH/vrHY3 jfMFheqy7NO890YzI12i82CDhuUtyMoqB0bDZRXgs9AA53B0OpuczfITmOSTE/ZVeLVBkEaXahUs /VE0cbZn08X0OGlkUisdtslKB8b29ubzOTi1bmoETz4OCGDsu6ywCISZEjbCqqjiZgxoBa22jH0L Wiu9Ai/sCn0H/nAtkgVnM1cJi1mBvwT5ZEvhcGmELVzWBqa4bUA4iBAU6KRVTcyzVORZGtvLpq9L dufbkVuhRqskKO3RlkLiq3JEMNZn5Cu8rLJY1OwDndDUmHXVyGI1gvI4WBVYilD7wc0bUydCF0mn nbgGpSqf2afMNeJGQ9rrpq7aZ40168ZfwFDEf0yoV4pAhrIyMac0TVmFdW322cHVu6PqYE6fSZ4f Vx3awfXBRfvJ87zut+ueNCTFPr7/9GUGEYVDUkbpsQAeAT4G1vpK6uj/SVuaFm0dlIYcHFK5C/f0 CL9J4fUTdEnOoCu1KoCAKWjjwTSo49TeVO0s4BZl8FRyxjsO3MXddiHNervuoBHOAR/hVvmFXBcc 7h+CEovAU/6I1i6HulgEhxb4T813tkqh6kdajwpKnMSUiQm+CX7MIdKoiR3/kNoh6Q62fl3hFq0G B7q9SDd9HKOU3phr0iqpd3CjfKU046O7djbvu/hnYrJGoUOz6MZ2URlz3YsevSX6Ag1GMliL2vdg 78XpwqGQFaf7Xdz2+U6P39DuCbArB6Peq1Zu6NMG7dLQ5PE+hN61F5NwtLeLL7RY49Pgh1gfPa5c Uys/BP1tRXxG+AuPED3K7TS3czzU8PR8Ot5nfwBQSwMECgAAAAAAoWUpWgAAAAAAAAAAAAAAABcA HAB0ZXN0c3VpdGUvc2ltcGxlLnRlc3RzL1VUCQADvbZ/Z762f2d1eAsAAQTxVgAABPFWAABQSwME FAAAAAgAoWUpWskxBUcXAAAAHAAAAB8AHAB0ZXN0c3VpdGUvc2ltcGxlLnRlc3RzL2VjaG8uZXhw VVQJAAO9tn9nwbZ/Z3V4CwABBPFWAAAE8VYAACvOzC3ISY0vSS0uUajOSM3Jya+F0VwAUEsDBBQA AAAIAIOLKVpJxXWy0AAAABoBAAAUABwAdGVzdHN1aXRlL3NpbXBsZS5zdW1VVAkAAxb5f2cg+X9n dXgLAAEE8VYAAATxVgAANY5NSwMxEIbPnV/x0pMeNqmLrXVhDyIIinjQ3mVNp5vAmiz5KOu/d0jp 3OZh3veZA6eMWDx+/mBsdAnB42AL3gYPPOLuoWv33WaLdtNu6WPI7swwwZ/cWKJsci2ZZb/73t03 s2km58vSjL4QrVZ93yO533liZPEkCCD6MpaPRVg44TxEV1tSR5Ap3i1En8V750fkIY6cL/DKNC9z iFknI3pjdX1aP0tDmFhfbLraistXoCrQbGxQkodSil6eXt87WJ6mgBuBbDIfsa5gfQv6B1BLAwQK AAAAAACAiylaAAAAAAAAAAAAAAAAEQAcAHRlc3RzdWl0ZS9jb25maWcvVVQJAAMP+X9nD/l/Z3V4 CwABBPFWAAAE8VYAAFBLAwQUAAAACABuZylafxmiSY4CAAAKCgAAHAAcAHRlc3RzdWl0ZS9jb25m aWcvZGVmYXVsdC5leHBVVAkAAx+6f2dWun9ndXgLAAEE8VYAAATxVgAAtVZNj5swEL3zK6ZeVCXZ he4eetmVuuqlUqX+A0wRASdBAsPaRolE+e81NuYrJKWRwgVl7Hnvzfh5CCcCuAhpHLI4EElG8lLA y1eL6zgTZdGFdbRgeVYIQPr9DZCKhpQfCQOkf5FTIoIoiwF9lIlAlgoaGHvKN4ANCGM5g2fLkr8j 4ElWpCRQQqCqobJAPvs034bpmezJ2lD6cGkmpLlH+UV4pEESn+/SCi21MK3qjFLBgPtF1+Hyg84j p4JEoq2meZCtwRFUUHdRA11BFzKso269TJZpHJS8OQxMf3z/+etVd0Me1IVtK0N0TMQBaN6iP7U6 SQzYCMRojSl66wX1akm+G1R0H6ELtE2l1bMnNTZOPbZb494ztxlLX3dEsgN7VHLfEUZEyWiryWz2 olBEB6iaIqULDImso/YHuaNW9e3ZhUkKKMrLNJbHJtQ2EOQk25NwEAfSKNyzMANWUprQ/Tu6Iqd1 5UAFM2QPI8c+KACHEUDuptvtbtq99QWTNwZpngqKkPMBDxq4SKOiMyfN1t/3oMOCVWcMmePkO0ce cFGK9YwxJscuCJdyZTqTzeFlKowDBuuBoioYkm+9CTUzbwYpiEZYEOVZRuhiTOzZbQb25/Gvwl8c bHpO39HEjtOWczcPg+nMNTMzsuflFpwwTaHyfNf+vVpvHt//eH4NbZehwvhzDR9lLt3y7yTVbZ3S jIF5jyv72s3d8bC8PpgC9h/t9uO4sTUX9kAvNmv94B/ZursikrSrd27sKkbsvWLf3RjSK7j9fZHA q71s+JHldN/6YjxWdZvkWF2k4NNCBUvustGm7PcE21LcJIychl/Wm1TcQHvxs72M8b8+xr2StzFb N8xN+XPTb/j3yvoLUEsDBAoAAAAAAJlNKVoAAAAAAAAAAAAAAAAOABwAdGVzdHN1aXRlL2xpYi9V VAkAA4KMf2eCjH9ndXgLAAEE8VYAAATxVgAAUEsDBAoAAAAAAEd8J1oAAAAAAAAAAAAAAAAYABwA dGVzdHN1aXRlL2xpYi9zaW1wbGUuZXhwVVQJAANmO31nhox/Z3V4CwABBPFWAAAE8VYAAFBLAQIe AxQAAAAIAGyCJ1qQ0RLGiAAAAJ8AAAALABgAAAAAAAEAAAD9gQAAAABleGVjdGVzdC5zaFVUBQAD +0V9Z3V4CwABBPFWAAAE8VYAAFBLAQIeAwoAAAAAAIOLKVoAAAAAAAAAAAAAAAAKABgAAAAAAAAA EAD9Qc0AAAB0ZXN0c3VpdGUvVVQFAAMV+X9ndXgLAAEE8VYAAATxVgAAUEsBAh4DFAAAAAgAO4cp WoNyqHx5AQAANwMAABMAGAAAAAAAAQAAAMmBEQEAAHRlc3RzdWl0ZS9zaW1wbGUuc2hVVAUAAwHy f2d1eAsAAQTxVgAABPFWAABQSwECHgMUAAAACACDiylaDX1zO4kCAACzBQAAFAAYAAAAAAABAAAA tIHXAgAAdGVzdHN1aXRlL3NpbXBsZS5sb2dVVAUAAxb5f2d1eAsAAQTxVgAABPFWAABQSwECHgMK AAAAAAChZSlaAAAAAAAAAAAAAAAAFwAYAAAAAAAAABAA/UGuBQAAdGVzdHN1aXRlL3NpbXBsZS50 ZXN0cy9VVAUAA722f2d1eAsAAQTxVgAABPFWAABQSwECHgMUAAAACAChZSlayTEFRxcAAAAcAAAA HwAYAAAAAAABAAAAtIH/BQAAdGVzdHN1aXRlL3NpbXBsZS50ZXN0cy9lY2hvLmV4cFVUBQADvbZ/ Z3V4CwABBPFWAAAE8VYAAFBLAQIeAxQAAAAIAIOLKVpJxXWy0AAAABoBAAAUABgAAAAAAAEAAAC0 gW8GAAB0ZXN0c3VpdGUvc2ltcGxlLnN1bVVUBQADFvl/Z3V4CwABBPFWAAAE8VYAAFBLAQIeAwoA AAAAAICLKVoAAAAAAAAAAAAAAAARABgAAAAAAAAAEAD9QY0HAAB0ZXN0c3VpdGUvY29uZmlnL1VU BQADD/l/Z3V4CwABBPFWAAAE8VYAAFBLAQIeAxQAAAAIAG5nKVp/GaJJjgIAAAoKAAAcABgAAAAA AAEAAAC0gdgHAAB0ZXN0c3VpdGUvY29uZmlnL2RlZmF1bHQuZXhwVVQFAAMfun9ndXgLAAEE8VYA AATxVgAAUEsBAh4DCgAAAAAAmU0pWgAAAAAAAAAAAAAAAA4AGAAAAAAAAAAQAP1BvAoAAHRlc3Rz dWl0ZS9saWIvVVQFAAOCjH9ndXgLAAEE8VYAAATxVgAAUEsBAh4DCgAAAAAAR3wnWgAAAAAAAAAA AAAAABgAGAAAAAAAAAAAALSBBAsAAHRlc3RzdWl0ZS9saWIvc2ltcGxlLmV4cFVUBQADZjt9Z3V4 CwABBPFWAAAE8VYAAFBLBQYAAAAACwALANsDAABWCwAAAAA= --refeik-4b82c5a3-1c44-4e21-8eb9-9215abd13c61 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 Content-Disposition: inline X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQnVnLWRlamFn bnUgbWFpbGluZyBsaXN0CkJ1Zy1kZWphZ251QGdudS5vcmcKaHR0cHM6Ly9saXN0cy5nbnUub3Jn L21haWxtYW4vbGlzdGluZm8vYnVnLWRlamFnbnUK --refeik-4b82c5a3-1c44-4e21-8eb9-9215abd13c61--