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

Weijun Wang weijun.wang at oracle.com
Tue Jan 30 00:22:50 UTC 2018


Ping again.

> On Jan 22, 2018, at 1:12 PM, Weijun Wang <weijun.wang at 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.
> 
> 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