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