Hi Philipp,

I just took a brief look at the new patch. Looks like the src change has no 
behavior change (even in JarSigner.java with so many line changes). This is 
good.

John and I have reviewed all the tests and we sent out some feedbacks in 
previous mails, and it's definitely a part of the whole review process. The 
single reason I integrated your changeset earlier this week is because RDP 2 
starts at July 18 and after the date only P1-P2 src change would be approved 
but we can still modify the tests. Before pushing the change, I ran all tests, 
modified 2 regex patterns, and added one to problem list to make sure it makes 
no (or, as little as possible) noise (esp for other people running the tests). 
I haven't made any big change to the tests (including removing those 
FIXED_xxxxxxx flags) myself because I was still waiting for your reply. Thanks 
for coming back, so that we can start enhancing the tests now. Some test (Ex: 
PreserveRawManifestEntryAndDigest.java) still spends a lot of time and could 
intermittently time out.

I'll file a new bug and post the interdiff between the integrated change and 
your new patch as the webrev.00 of it.

Thanks,
Max

> On Jul 21, 2019, at 4:49 AM, Philipp Kunz <philipp.k...@paratix.ch> wrote:
> 
> Hi Max and everyone,
> 
>       • Indeed, [^\"] does not work with quotes inside CN. I agree to your 
> change.
>       • I went through the patch again myself and tried to understand what I 
> did half a year ago and added and changed some comments and renamed a few 
> identifiers so that I hope it becomes clearer. Particularly 
> PreserveRawManifestEntryAndDigest is worth mentioning and had a bug in 
> lineWidth70. Noteworthy is the test case with emptyJarTrailingSeqAddFile 
> which is now better documented.
>       • I also renamed atts to attrs.
>       • It also still works without the Resources changes.
>       • I removed testNameEmptyTrusted from EmptyIndividualSectionName after 
> having convinced myself it is not necessary. Any other opinion on this 
> welcome.
>       • I moved some common functions used in many tests to Utils. 
> Utils.echoManifest now prints manifests with non-printable characters escaped 
> in Java style but that was in the previous patch already I think. It's used 
> in more tests now than before.
>       • I added a test testAddManifestMainAttributesFile in 
> MainAttributesConfused that shows where the problems were with a file named 
> Manifest-Main-Attributes inside a signed jar and that it works now.
>       • I increased the timeout of PreserveRawManifestEntryAndDigest after it 
> timed out on my machine a few times. The current timeout value is still 
> pretty much arbitrary.
>       • I defined KS_ARGS in various tests to be re-used with repeated 
> jarsigner command line arguments.
> 
> 
> 
> I'm sorry for recently not responding quickly. I admit that my personal 
> interest has not increased with the latest development of webstart and I also 
> have other duties or distractions. I welcome everyone to contribute missing 
> parts or a review or an opinion. As I currently see it, the following parts 
> are not yet complete.
> 
> 1. I suggest Compatibility test be run with different JDK versions configured 
> just like before with a focus on TSA now also with jar signinig compatibility 
> across JDK versions on a central and powerful test infrastructure which is 
> achieved by invoking Compatibility test again with different arguments. 
> SignTwice is an example for that with only one JDK version.
> 
> 2. Compatibility test should probably be thoroughly refactored. This can be 
> done well after the merge in my opinion if no seriously harmful changes are 
> revealed in a review.
> 
> 3. I still did not have time to pick up Max's idea to add a jar file in 
> binary form to the sources that would allow to test a current JDK version 
> against it by trying to reproduce it identically. That would at least make 
> incompatibilities detected earlier than with Compatibility test. How much 
> such a test would overlap with the current Compatibility test once integrated 
> in a build like before with TSA can be told only after it exists. In my 
> opinion this makes a lot of sense in any case.
> 
> 4. Somehow I still have not the feeling that someone has thoroughly reviewed 
> the whole patch. It was mentioned that the main source changes look good but 
> is that what a review takes? There are so many subtle changes mostly in 
> ManifestDigester that I doubt there is way around a close look into the 
> tests. It may be all right to check the details only after all the trivial 
> checks passed but that patch has accumulated so much effort until now I 
> really would appreciate some confirmation that everything looks somewhat 
> promising so far, however non-committal. I might have missed a hint and feel 
> still quite new as openjdk contributor.
> 
> 5. Remove all the FIXED_8217375 stuff. In my opinion this requires that after 
> the patch is more or less stable that someone verifies that all the test 
> cases that did not exist before the patch continue to pass unchanged and test 
> coverage is appropriate to calibrate existing behavior. Usually tests should 
> exist before but this here is certainly one and hopefully a rare exception. 
> It would be of no use if some tests were wrong claiming some behavior has not 
> changed and with signed jars and digesting manifests every single difference 
> invalidates the signatures without mercy. Actually removing the FIXED_8217375 
> stuff is then trivial.
> 
> 
> Lot of fuzzy talk written, please accept my apology for spamming this way. I 
> always appreciate any comment, hint, advice or anything.
> 
> Regards,
> Philipp
> 
> 
> 
> On Tue, 2019-07-16 at 21:29 +0800, Weijun Wang wrote:
>> I made another small change
>> 
>> diff -iu 
>> b/test/jdk/sun/security/tools/jarsigner/compatibility/Compatibility.java 
>> b/test/jdk/sun/security/tools/jarsigner/compatibility/Compatibility.java
>> --- b/test/jdk/sun/security/tools/jarsigner/compatibility/Compatibility.java
>> +++ b/test/jdk/sun/security/tools/jarsigner/compatibility/Compatibility.java
>> @@ -717,7 +717,7 @@
>>                      + "  Digest algorithm: " + signItem.expectedDigestAlg()
>>                      + (signItem.tsaIndex < 0 ? "" :
>>                        ")|("
>> -                    + "Timestamped by \"[^\"]+\" on .*"
>> +                    + "Timestamped by \".+\" on .*"
>>                      + ")|("
>>                      + "  Timestamp digest algorithm: "
>>                              + signItem.expectedTsaDigestAlg()
>> 
>> This is because there can be quotation marks inside CN. For example,
>> 
>>   Timestamped by "CN="Sectigo RSA Time Stamping Signer #1", O=Sectigo 
>> Limited, L=Salford, ST=Greater Manchester, C=GB" on Tue Jul 16 12:23:29 UTC 
>> 2019
>> 
>> Thanks,
>> Max
>> 
>> 
>> 
>>> 
>>> On Jul 16, 2019, at 2:13 PM, Weijun Wang <
>>> weijun.w...@oracle.com
>>> > wrote:
>>> 
>>> I'd also like to revert the changes to 
>>> src/jdk.jartool/share/classes/sun/security/tools/jarsigner/Resources.java. 
>>> Your change strips some trailing whitespaces but not all of them. This will 
>>> trigger a re-translation of all Resources files and I think that is 
>>> unnecessary.
>>> 
>>> Will any of your new tests fail because of the revert? I'll run all tests 
>>> soon.
>>> 
>>> Thanks,
>>> Max
>>> 
>>> 
>>> 
>>>> 
>>>> On Jul 16, 2019, at 11:34 AM, Weijun Wang <
>>>> weijun.w...@oracle.com
>>>> > wrote:
>>>> 
>>>> 7/18 is near. If there is no new webrev, I'll push webrev.02 with 
>>>> SignTwice.java disabled. We can still modify tests before 8/8.
>>>> 
>>>> Thanks,
>>>> Max
>>>> 
>>>> 
>>>>> 
>>>>> On Jul 10, 2019, at 10:34 AM, Weijun Wang <
>>>>> weijun.w...@oracle.com
>>>>> > wrote:
>>>>> 
>>>>> [off the list]
>>>>> 
>>>>> Hi Philipp,
>>>>> 
>>>>> Do you have a new patch? The RDP 2 [1] starts on 7/18 and after that we 
>>>>> will only be able to fix P1-P2 bugs after approvals.
>>>>> 
>>>>> Let's get the changeset integrated before RDP 2 once there is no problem 
>>>>> in src/. We can adjust the tests before RC (8/8).
>>>>> 
>>>>> Thanks,
>>>>> Max
>>>>> 
>>>>> [1] 
>>>>> https://openjdk.java.net/jeps/3#rdp-2
>>>>> 
>>>>> 
>>>>> 
>>>>>> 
>>>>>> On Jul 3, 2019, at 6:27 PM, Weijun Wang <
>>>>>> weijun.w...@oracle.com
>>>>>> > wrote:
>>>>>> 
>>>>>> 
>>>>>> 
>>>>>> 
>>>>>>> 
>>>>>>> On Jul 3, 2019, at 4:06 PM, Philipp Kunz <
>>>>>>> philipp.k...@paratix.ch
>>>>>>> > wrote:
>>>>>>> 
>>>>>>> Hi Max,
>>>>>>> 
>>>>>>> Do I understand correctly that your question refers to
>>>>>>>     if (e == null && MF_MAIN_ATTRS.equals(name)) {
>>>>>>>         e = getMainAttsEntry();
>>>>>>>     }
>>>>>>> ?
>>>>>>> 
>>>>>> 
>>>>>> 
>>>>>> Yes.
>>>>>> 
>>>>>> 
>>>>>>> 
>>>>>>> 
>>>>>>> If so, because this sticks closest to the previous behavior. According 
>>>>>>> to src/java.base/share/classes/module-info.java, ManifestDigester is 
>>>>>>> not publicly exported but how can it then be used then in JarVerifier 
>>>>>>> in java.util.jar? If you or someone can confirm that we can identify 
>>>>>>> all callers, I'd prefer to remove above three lines of code.
>>>>>>> 
>>>>>> 
>>>>>> 
>>>>>> It's not publicly exported therefore cannot be used by an application, 
>>>>>> but it's accessible by java.util.jar which is also in the java.base 
>>>>>> module.
>>>>>> 
>>>>>> It can also be accessed by JDK modules listed in the "exports 
>>>>>> sun.security.util to" block of java.base/share/classes/module-info.java.
>>>>>> 
>>>>>> Anyway any caller must be inside JDK. IntelliJ IDEA tells me its only 
>>>>>> SignatureFileVerifier and JarSigner. Hopefully whatever IDE you are 
>>>>>> using it gives the same result.
>>>>>> 
>>>>>> 
>>>>>>> 
>>>>>>> 
>>>>>>> Otherwise, with above three lines, main attributes and an entry with 
>>>>>>> name MF_MAIN_ATTRS will still be confused for all those code continuing 
>>>>>>> to call get as before the patch if an entry with such a name exists 
>>>>>>> just like before. However, with the patch, all (known) places that call 
>>>>>>> ManifestDigester.get* are lines 539 and 606 in SignatureFileVerifier 
>>>>>>> with the patch, 539 calling getMainAttsEntry without any ambiguity and 
>>>>>>> 606 calling get(String, b) always expecting the entry for a section 
>>>>>>> that is present and would otherwise not be known to pass as an argument 
>>>>>>> anyway, provided the signature file does not contain more entries than 
>>>>>>> the manifest or entries have not been removed from the manifest after 
>>>>>>> signing, should work correctly, I guess. If we cannot get rid of those 
>>>>>>> three lines, another test for those edge cases should probably be 
>>>>>>> added, shouldn't it, if not to support the previous confusion at least 
>>>>>>> to show it now works as expected?
>>>>>>> 
>>>>>>> What exactly did you mean with "coding error"?
>>>>>>> 
>>>>>> 
>>>>>> 
>>>>>> Not sure. I don't know if any bad thing would happen if a file named 
>>>>>> "Manifest-Main-Attributes" is out inside a jar file.
>>>>>> 
>>>>>> 
>>>>>>> 
>>>>>>> 
>>>>>>> Along with removing above three lines of code, two tests would have to 
>>>>>>> be adjusted. FindHeaderEndVsManifestDigesterFindFirstSection on lne 235 
>>>>>>> and DigestInput on line 270.
>>>>>>> 
>>>>>> 
>>>>>> 
>>>>>> That's OK. No real app should call methods in this class directly.
>>>>>> 
>>>>>> Thanks,
>>>>>> Max
>>>>>> 
>>>>>> 
>>>>>>> 
>>>>>>> 
>>>>>>> Regards,
>>>>>>> Philipp
>>>>>>> 
>>>>>>> 
>>>>>>> 
>>>>>>> 
>>>>>>> 
>>>>>>> 
>>>>>>> On Mon, 2019-07-01 at 15:41 +0800, Weijun Wang wrote:
>>>>>>> 
>>>>>>>> 
>>>>>>>> https://cr.openjdk.java.net/~weijun/8217375/webrev.02
>>>>>>>> 
>>>>>>>> uploaded. There are still several trailing spaces and I've removed 
>>>>>>>> them.
>>>>>>>> 
>>>>>>>> I just ran a test job: SignTwice.java failed on Windows with `failed 
>>>>>>>> to clean up files after test`. Most likely a file is not closed.
>>>>>>>> 
>>>>>>>> The src change looks good. In fact, I am wondering if we need to 
>>>>>>>> support ManifestDigester.get(MF_MAIN_ATTRS, b) at all. Is it possible 
>>>>>>>> we miss a coding error because of it?
>>>>>>>> 
>>>>>>>> I'll take a look at the tests.
>>>>>>>> 
>>>>>>>> Thanks,
>>>>>>>> Max
>>>>>>>> 
>>>>>>>> 
>>>>>>>> 
>>>>>>> 
>>>>>> 
>>>>>> 
>>>>>> 
>>>>> 
>>>>> 
>>>>> 
>>>> 
>>>> 
>>>> 
>>> 
>>> 
>>> 
>> 
>> 
>> 
> <8217375-jarsignerbreaksexistingsignatures-20190719.patch>

Reply via email to