[8u] RFR 8236645: JDK 8u231 introduces a regression with incompatible handling of XML messages

Severin Gehwolf sgehwolf at redhat.com
Wed Aug 19 18:02:10 UTC 2020


Hi Elliott,

On Wed, 2020-08-19 at 12:54 -0400, Elliott Baron wrote:
> Hi,
> 
> I'd like to request a review of 8236645 for 8u. 8236645 is a bug fix for 
> Oracle JDK 8 that I have re-implemented for OpenJDK 8u.
> 
> Original fix:
> https://bugs.openjdk.java.net/browse/JDK-8236645
> CSR:
> https://bugs.openjdk.java.net/browse/JDK-8237765
> 
> This fixes a regression introduced by 8177334 and 8217878 by introducing 
> a new system property 
> "com.sun.org.apache.xml.internal.security.lineFeedOnly", which gives 
> Base64 encodings in XML digital signatures the same line-ending format 
> as before these changes were made. The CSR outlined the behaviour of 
> this system property and how it was originally implemented.
> 
> I added a new test file for this change, based on test cases in 
> javax/xml/crypto/dsig/GenerationTests. This allows us to run the test 
> with the property enabled and disabled, and also doesn't interfere with 
> future backports affecting GenerationTests.
> 
> 8u webrev:
> https://cr.openjdk.java.net/~ebaron/jdk8u/JDK-8236645/webrev.00/

The CSR states:
"""
This new property has no effect on default behavior nor when
com.sun.org.apache.xml.internal.security.ignoreLineBreaks property is
set.
"""

If I read your patch right, then it would not work as specified when
both com.sun.org.apache.xml.internal.security.ignoreLineBreaks *and* 
com.sun.org.apache.xml.internal.security.lineFeedOnly are both set:

 451     public static String encodeToString(byte[] bytes) {
 452         if (lineFeedOnly) {
 453             return LF_ENCODER.encodeToString(bytes);
 454         }
 455         if (ignoreLineBreaks) {
 456             return Base64.getEncoder().encodeToString(bytes);
 457         }
 458         return Base64.getMimeEncoder().encodeToString(bytes);
 459     }

Lines 452-454 should move after line 457.

test/javax/xml/crypto/dsig/LineFeedOnlyTest.java

  63 /* @test id=LF
  64  * @bug 8236645
  65  * @summary Test "lineFeedOnly" property prevents CR in Base64 encoded output
  66  * @run main/othervm/timeout=300 -Dcom.sun.org.apache.xml.internal.security.lineFeedOnly=true LineFeedOnlyTest
  67  */
  68 
  69 /* @test id=CRLF
  70  * @bug 8236645
  71  * @summary Test "lineFeedOnly" property prevents CR in Base64 encoded output
  72  * @run main/othervm/timeout=300 -Dcom.sun.org.apache.xml.internal.security.lineFeedOnly=false LineFeedOnlyTest
  73  */

Couldn't we simplify this by using just multiple @run tags?

How about this?

/* @test
 * @bug 8236645
 * @summary Test "lineFeedOnly" property prevents CR in Base64 encoded output
 * @run main/othervm/timeout=300 -Dcom.sun.org.apache.xml.internal.security.lineFeedOnly=false LineFeedOnlyTest
 * @run main/othervm/timeout=300 -Dcom.sun.org.apache.xml.internal.security.lineFeedOnly=true LineFeedOnlyTest
 */

Thanks,
Severin



More information about the jdk8u-dev mailing list