duplicate of https://bugs.openjdk.java.net/browse/JDK-6910466?


On 30.01.2018 02:44, Weijun Wang wrote:

On Jan 30, 2018, at 8:57 AM, mandy chung <mandy.ch...@oracle.com> wrote:



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.
On the other hand, if this is not intended we should fix line 348 and remove 
the version != null check. I cannot find a place saying a MANIFEST_VERSION or 
SIGNATURE_VERSION must be provided. Even if so, this should be an error and 
it's not a good idea to silently drop all other attributes in the main section.

Anyway, I filed https://bugs.openjdk.java.net/browse/JDK-8196371.

--Max

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



Reply via email to