On 1/29/18 4:22 PM, Weijun Wang wrote:
Ping again.
On Jan 22, 2018, at 1:12 PM, Weijun Wang <weijun.w...@oracle.com> wrote:
src/java.base/share/classes/java/util/jar/Attributes.java:
329 @SuppressWarnings("deprecation")
330 void writeMain(DataOutputStream out) throws IOException
331 {
332 // write out the *-Version header first, if it exists
333 String vername = Name.MANIFEST_VERSION.toString();
334 String version = getValue(vername);
335 if (version == null) {
336 vername = Name.SIGNATURE_VERSION.toString();
337 version = getValue(vername);
338 }
339
340 if (version != null) {
341 out.writeBytes(vername+": "+version+"\r\n");
342 }
343
344 // write out all attributes except for the version
345 // we wrote out earlier
346 for (Entry<Object, Object> e : entrySet()) {
347 String name = ((Name) e.getKey()).toString();
348 if ((version != null) && !(name.equalsIgnoreCase(vername)))
{
So, if there is no existing MANIFEST_VERSION or SIGNATURE_VERSION, then version
is null and the check above will be false for ever and any other attribute
cannot be written out.
Is this intended? If so, we can exit with an else block after line 342.
From code inspection, I agree that this method is a nop if there is no
Manifest-Version attribute or Signature-Attribute. This can return
quickly without iterating the entry set. I don't see any issue to make
it an else block.
This method is only called from Manifest::write method which does not
mention Signature-Version but I don't have the history to tell if this
is intended or not.
Mandy