Cannot add attribute into main attributes of a jar if there is no version

Weijun Wang weijun.wang at oracle.com
Mon Jan 22 05:12:45 UTC 2018


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.

Thanks
Max

p.s. I am writing a test and notice this.

   349	
   350	                StringBuffer buffer = new StringBuffer(name);
   351	                buffer.append(": ");
   352	
   353	                String value = (String) e.getValue();
   354	                if (value != null) {
   355	                    byte[] vb = value.getBytes("UTF8");
   356	                    value = new String(vb, 0, 0, vb.length);
   357	                }
   358	                buffer.append(value);
   359	
   360	                buffer.append("\r\n");
   361	                Manifest.make72Safe(buffer);
   362	                out.writeBytes(buffer.toString());
   363	            }
   364	        }
   365	        out.writeBytes("\r\n");
   366	    }



More information about the core-libs-dev mailing list