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.
> 
> 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     }
> 

Reply via email to