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