[jira] [Comment Edited] (FILEUPLOAD-309) Release version 2.0.0
[ https://issues.apache.org/jira/browse/FILEUPLOAD-309?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=17652022#comment-17652022 ] Andy Seaborne edited comment on FILEUPLOAD-309 at 1/1/23 10:09 PM: --- I tried the servlet 3.1 multipart support. Our (Jena) usage is * a servlet filter * deployed in any servlet container - normally bundled with Jetty; some users deploy a WAR file version in Tomcat et al. * `multipart/form-data` is just one possible content-type at the URL endpoint. * streaming (errors are handled by being inside a database transaction) Each servlet container needs custom configuration. ` {{@MultipartConfig}} only applies to servlets, not servlet filters. [https://github.com/jakartaee/servlet/issues/87] Jetty: the code can set request attribute {{__MULTIPART_CONFIG_ELEMENT}} during request processing. Tomcat needs a setting of a context XML attribute {{allowCasualMultipartParsing}}. e.g. set it in {{META-INF/context.xml}}. That does at least avoid users needing to specially change the configuration of their server. was (Author: andy.seaborne): I tried the servlet 3.1 multipart support. Our (Jena) usage is * a servlet filter * deployed in any servlet container - normally bundled with Jetty; some users deploy a WAR file version in Tomcat et al. * `multipart/form-data` is just one possible content-type at the URL endpoint. * streaming (errors are handled by being inside a database transaction) Each servlet container needs custom configuration. `@MultipartConfig` only applies to servlets, not servlet filters. https://github.com/jakartaee/servlet/issues/87 Jetty: the code can set request attribute `__MULTIPART_CONFIG_ELEMENT` during request processing. Tomcat needs a setting of a context XML attribute `allowCasualMultipartParsing`. Set in e.g. `META-INF/context.xml`. > Release version 2.0.0 > - > > Key: FILEUPLOAD-309 > URL: https://issues.apache.org/jira/browse/FILEUPLOAD-309 > Project: Commons FileUpload > Issue Type: Wish >Reporter: Thiago Henrique Hupner >Priority: Major > > At Piranha, we've migrated to use the new Jakarta namespace. > One of our dependencies is the Commons File Upload, but the latest version > available is 1.4. > Looking around at the source code, I've found that the code is already > prepared for the new Jakarta namespace. > So, I want to know if there's a plan to release a new version soon. Or at > least a 2.0.0 milestone. -- This message was sent by Atlassian Jira (v8.20.10#820010)
[jira] [Work logged] (POOL-393) BaseGenericObjectPool.jmxRegister may cost too much time
[ https://issues.apache.org/jira/browse/POOL-393?focusedWorklogId=836348=com.atlassian.jira.plugin.system.issuetabpanels:worklog-tabpanel#worklog-836348 ] ASF GitHub Bot logged work on POOL-393: --- Author: ASF GitHub Bot Created on: 01/Jan/23 15:54 Start Date: 01/Jan/23 15:54 Worklog Time Spent: 10m Work Description: garydgregory merged PR #199: URL: https://github.com/apache/commons-pool/pull/199 Issue Time Tracking --- Worklog Id: (was: 836348) Time Spent: 2.5h (was: 2h 20m) > BaseGenericObjectPool.jmxRegister may cost too much time > > > Key: POOL-393 > URL: https://issues.apache.org/jira/browse/POOL-393 > Project: Commons Pool > Issue Type: Improvement >Affects Versions: 2.4.2 >Reporter: Shichao Yuan >Priority: Major > Time Spent: 2.5h > Remaining Estimate: 0h > > > When creating many pools, I find that it tasks too much time to register jmx. > In the code, the ObjectName's postfix always starts with 1, so many > InstanceAlreadyExistsExceptions may be thrown before registered successfully. > Maybe a random number is a better choice, or a atomic long. > {quote}private ObjectName jmxRegister(BaseObjectPoolConfig config, > String jmxNameBase, String jmxNamePrefix) { > ObjectName objectName = null; > MBeanServer mbs = ManagementFactory.getPlatformMBeanServer(); > int i = 1; > boolean registered = false; > String base = config.getJmxNameBase(); > if (base == null) > Unknown macro: \{ base = jmxNameBase; } > while (!registered) { > try { > ObjectName objName; > // Skip the numeric suffix for the first pool in case there is > // only one so the names are cleaner. > if (i == 1) > Unknown macro: \{ objName = new ObjectName(base + jmxNamePrefix); } > else > Unknown macro: \{ objName = new ObjectName(base + jmxNamePrefix + i); } > mbs.registerMBean(this, objName); > objectName = objName; > registered = true; > } catch (MalformedObjectNameException e) { > if (BaseObjectPoolConfig.DEFAULT_JMX_NAME_PREFIX.equals( > jmxNamePrefix) && jmxNameBase.equals(base)) > Unknown macro: \{ // Shouldn't happen. Skip registration if it does. > registered = true; } > else > Unknown macro: \{ // Must be an invalid name. Use the defaults instead. > jmxNamePrefix = BaseObjectPoolConfig.DEFAULT_JMX_NAME_PREFIX; base = > jmxNameBase; } > } catch (InstanceAlreadyExistsException e) > Unknown macro: \{ // Increment the index and try again i++; } > catch (MBeanRegistrationException e) > Unknown macro: \{ // Shouldn't happen. Skip registration if it does. > registered = true; } > catch (NotCompliantMBeanException e) > } > return objectName; > } > {quote} -- This message was sent by Atlassian Jira (v8.20.10#820010)
[jira] [Resolved] (POOL-393) BaseGenericObjectPool.jmxRegister may cost too much time
[ https://issues.apache.org/jira/browse/POOL-393?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Gary D. Gregory resolved POOL-393. -- Fix Version/s: 2.12.0 Resolution: Fixed In git master. Please verify and close. > BaseGenericObjectPool.jmxRegister may cost too much time > > > Key: POOL-393 > URL: https://issues.apache.org/jira/browse/POOL-393 > Project: Commons Pool > Issue Type: Improvement >Affects Versions: 2.4.2 >Reporter: Shichao Yuan >Priority: Major > Fix For: 2.12.0 > > Time Spent: 2.5h > Remaining Estimate: 0h > > > When creating many pools, I find that it tasks too much time to register jmx. > In the code, the ObjectName's postfix always starts with 1, so many > InstanceAlreadyExistsExceptions may be thrown before registered successfully. > Maybe a random number is a better choice, or a atomic long. > {quote}private ObjectName jmxRegister(BaseObjectPoolConfig config, > String jmxNameBase, String jmxNamePrefix) { > ObjectName objectName = null; > MBeanServer mbs = ManagementFactory.getPlatformMBeanServer(); > int i = 1; > boolean registered = false; > String base = config.getJmxNameBase(); > if (base == null) > Unknown macro: \{ base = jmxNameBase; } > while (!registered) { > try { > ObjectName objName; > // Skip the numeric suffix for the first pool in case there is > // only one so the names are cleaner. > if (i == 1) > Unknown macro: \{ objName = new ObjectName(base + jmxNamePrefix); } > else > Unknown macro: \{ objName = new ObjectName(base + jmxNamePrefix + i); } > mbs.registerMBean(this, objName); > objectName = objName; > registered = true; > } catch (MalformedObjectNameException e) { > if (BaseObjectPoolConfig.DEFAULT_JMX_NAME_PREFIX.equals( > jmxNamePrefix) && jmxNameBase.equals(base)) > Unknown macro: \{ // Shouldn't happen. Skip registration if it does. > registered = true; } > else > Unknown macro: \{ // Must be an invalid name. Use the defaults instead. > jmxNamePrefix = BaseObjectPoolConfig.DEFAULT_JMX_NAME_PREFIX; base = > jmxNameBase; } > } catch (InstanceAlreadyExistsException e) > Unknown macro: \{ // Increment the index and try again i++; } > catch (MBeanRegistrationException e) > Unknown macro: \{ // Shouldn't happen. Skip registration if it does. > registered = true; } > catch (NotCompliantMBeanException e) > } > return objectName; > } > {quote} -- This message was sent by Atlassian Jira (v8.20.10#820010)
[jira] [Updated] (POOL-393) BaseGenericObjectPool.jmxRegister may cost too much time
[ https://issues.apache.org/jira/browse/POOL-393?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Gary D. Gregory updated POOL-393: - External issue URL: https://github.com/apache/commons-pool/pull/199 > BaseGenericObjectPool.jmxRegister may cost too much time > > > Key: POOL-393 > URL: https://issues.apache.org/jira/browse/POOL-393 > Project: Commons Pool > Issue Type: Improvement >Affects Versions: 2.4.2 >Reporter: Shichao Yuan >Priority: Major > Time Spent: 2.5h > Remaining Estimate: 0h > > > When creating many pools, I find that it tasks too much time to register jmx. > In the code, the ObjectName's postfix always starts with 1, so many > InstanceAlreadyExistsExceptions may be thrown before registered successfully. > Maybe a random number is a better choice, or a atomic long. > {quote}private ObjectName jmxRegister(BaseObjectPoolConfig config, > String jmxNameBase, String jmxNamePrefix) { > ObjectName objectName = null; > MBeanServer mbs = ManagementFactory.getPlatformMBeanServer(); > int i = 1; > boolean registered = false; > String base = config.getJmxNameBase(); > if (base == null) > Unknown macro: \{ base = jmxNameBase; } > while (!registered) { > try { > ObjectName objName; > // Skip the numeric suffix for the first pool in case there is > // only one so the names are cleaner. > if (i == 1) > Unknown macro: \{ objName = new ObjectName(base + jmxNamePrefix); } > else > Unknown macro: \{ objName = new ObjectName(base + jmxNamePrefix + i); } > mbs.registerMBean(this, objName); > objectName = objName; > registered = true; > } catch (MalformedObjectNameException e) { > if (BaseObjectPoolConfig.DEFAULT_JMX_NAME_PREFIX.equals( > jmxNamePrefix) && jmxNameBase.equals(base)) > Unknown macro: \{ // Shouldn't happen. Skip registration if it does. > registered = true; } > else > Unknown macro: \{ // Must be an invalid name. Use the defaults instead. > jmxNamePrefix = BaseObjectPoolConfig.DEFAULT_JMX_NAME_PREFIX; base = > jmxNameBase; } > } catch (InstanceAlreadyExistsException e) > Unknown macro: \{ // Increment the index and try again i++; } > catch (MBeanRegistrationException e) > Unknown macro: \{ // Shouldn't happen. Skip registration if it does. > registered = true; } > catch (NotCompliantMBeanException e) > } > return objectName; > } > {quote} -- This message was sent by Atlassian Jira (v8.20.10#820010)
[GitHub] [commons-pool] garydgregory merged pull request #199: [POOL-393] Improve BaseGenericObjectPool's JMX Register performance
garydgregory merged PR #199: URL: https://github.com/apache/commons-pool/pull/199 -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: issues-unsubscr...@commons.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org
[jira] [Resolved] (COMPRESS-613) Write ZIP extra time fields automatically
[ https://issues.apache.org/jira/browse/COMPRESS-613?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Gary D. Gregory resolved COMPRESS-613. -- Fix Version/s: 1.23 Resolution: Fixed [~andrebrait] Thank you for your PR. Please verify git master and close. > Write ZIP extra time fields automatically > - > > Key: COMPRESS-613 > URL: https://issues.apache.org/jira/browse/COMPRESS-613 > Project: Commons Compress > Issue Type: Improvement > Components: Archivers >Affects Versions: 1.21 >Reporter: Andre Brait >Priority: Major > Labels: zip > Fix For: 1.23 > > Time Spent: 3h 20m > Remaining Estimate: 0h > > When writing to a Zip file through ZipArchiveOutputStream, setting creation > and access times in a ZipArchiveEntry does not cause these to be reflected as > X5455 or X000A extra fields in the resulting zip file. This also happens for > modification times that do not fit into an MS-DOS time. > As a consequence, the date range is reduced, as well as the granularity (form > 100ns intervals to seconds). > ZipEntry and standard java.util.zip facilities do that automatically, but > that's missing here. > My proposal is to use the same logic the java.util.zip do and add those extra > fields automatically, if situation requires them. > See my existing logic for this here: > [https://github.com/andrebrait/DATROMTool/blob/86a4f4978bab250ca54d047c58b4f91e7dbbcc7f/core/src/main/java/io/github/datromtool/io/FileCopier.java#L1425] > It's (almost) the same logic from java.util.zip, but adapted to be used with > ZipArchiveEntry. > If you're ok with it, I can send a PR. > Actual logic will be more like > {{{}java.util.zip.ZipOutputStream#writeLOC(XEntry){}}}, represented below: > {code:java} > int elenEXTT = 0; // info-zip extended timestamp > int flagEXTT = 0; > long umtime = -1; > long uatime = -1; > long uctime = -1; > if (e.mtime != null) { > elenEXTT += 4; > flagEXTT |= EXTT_FLAG_LMT; > umtime = fileTimeToUnixTime(e.mtime); > } > if (e.atime != null) { > elenEXTT += 4; > flagEXTT |= EXTT_FLAG_LAT; > uatime = fileTimeToUnixTime(e.atime); > } > if (e.ctime != null) { > elenEXTT += 4; > flagEXTT |= EXTT_FLAT_CT; > uctime = fileTimeToUnixTime(e.ctime); > } > if (flagEXTT != 0) { > // to use ntfs time if any m/a/ctime is beyond unixtime upper > bound > if (umtime > UPPER_UNIXTIME_BOUND || > uatime > UPPER_UNIXTIME_BOUND || > uctime > UPPER_UNIXTIME_BOUND) { > elen += 36;// NTFS time, total 36 bytes > } else { > elen += (elenEXTT + 5);// headid(2) + size(2) + flag(1) + > data > } > } > writeShort(elen); > writeBytes(nameBytes, 0, nameBytes.length); > if (hasZip64) { > writeShort(ZIP64_EXTID); > writeShort(16); > writeLong(e.size); > writeLong(e.csize); > } > if (flagEXTT != 0) { > if (umtime > UPPER_UNIXTIME_BOUND || > uatime > UPPER_UNIXTIME_BOUND || > uctime > UPPER_UNIXTIME_BOUND) { > writeShort(EXTID_NTFS);// id > writeShort(32);// data size > writeInt(0); // reserved > writeShort(0x0001);// NTFS attr tag > writeShort(24); > writeLong(e.mtime == null ? WINDOWS_TIME_NOT_AVAILABLE > : fileTimeToWinTime(e.mtime)); > writeLong(e.atime == null ? WINDOWS_TIME_NOT_AVAILABLE > : fileTimeToWinTime(e.atime)); > writeLong(e.ctime == null ? WINDOWS_TIME_NOT_AVAILABLE > : fileTimeToWinTime(e.ctime)); > } else { > writeShort(EXTID_EXTT); > writeShort(elenEXTT + 1); // flag + data > writeByte(flagEXTT); > if (e.mtime != null) > writeInt(umtime); > if (e.atime != null) > writeInt(uatime); > if (e.ctime != null) > writeInt(uctime); > } > } > writeExtra(e.extra); > locoff = written; > {code} -- This message was sent by Atlassian Jira (v8.20.10#820010)
[GitHub] [commons-compress] garydgregory closed pull request #346: Use JUnit 5 assertions in JUnit 5 tests instead of JUnit 4 classes
garydgregory closed pull request #346: Use JUnit 5 assertions in JUnit 5 tests instead of JUnit 4 classes URL: https://github.com/apache/commons-compress/pull/346 -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: issues-unsubscr...@commons.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org
[GitHub] [commons-compress] garydgregory commented on pull request #346: Use JUnit 5 assertions in JUnit 5 tests instead of JUnit 4 classes
garydgregory commented on PR #346: URL: https://github.com/apache/commons-compress/pull/346#issuecomment-1368447105 Patch applied locally to resolve issues. TY. -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: issues-unsubscr...@commons.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org
[jira] [Work logged] (COMPRESS-613) Write ZIP extra time fields automatically
[ https://issues.apache.org/jira/browse/COMPRESS-613?focusedWorklogId=836346=com.atlassian.jira.plugin.system.issuetabpanels:worklog-tabpanel#worklog-836346 ] ASF GitHub Bot logged work on COMPRESS-613: --- Author: ASF GitHub Bot Created on: 01/Jan/23 13:28 Start Date: 01/Jan/23 13:28 Worklog Time Spent: 10m Work Description: garydgregory commented on PR #345: URL: https://github.com/apache/commons-compress/pull/345#issuecomment-1368444645 @andrebrait Thank you for your updates, merged. Issue Time Tracking --- Worklog Id: (was: 836346) Time Spent: 3h 20m (was: 3h 10m) > Write ZIP extra time fields automatically > - > > Key: COMPRESS-613 > URL: https://issues.apache.org/jira/browse/COMPRESS-613 > Project: Commons Compress > Issue Type: Improvement > Components: Archivers >Affects Versions: 1.21 >Reporter: Andre Brait >Priority: Major > Labels: zip > Time Spent: 3h 20m > Remaining Estimate: 0h > > When writing to a Zip file through ZipArchiveOutputStream, setting creation > and access times in a ZipArchiveEntry does not cause these to be reflected as > X5455 or X000A extra fields in the resulting zip file. This also happens for > modification times that do not fit into an MS-DOS time. > As a consequence, the date range is reduced, as well as the granularity (form > 100ns intervals to seconds). > ZipEntry and standard java.util.zip facilities do that automatically, but > that's missing here. > My proposal is to use the same logic the java.util.zip do and add those extra > fields automatically, if situation requires them. > See my existing logic for this here: > [https://github.com/andrebrait/DATROMTool/blob/86a4f4978bab250ca54d047c58b4f91e7dbbcc7f/core/src/main/java/io/github/datromtool/io/FileCopier.java#L1425] > It's (almost) the same logic from java.util.zip, but adapted to be used with > ZipArchiveEntry. > If you're ok with it, I can send a PR. > Actual logic will be more like > {{{}java.util.zip.ZipOutputStream#writeLOC(XEntry){}}}, represented below: > {code:java} > int elenEXTT = 0; // info-zip extended timestamp > int flagEXTT = 0; > long umtime = -1; > long uatime = -1; > long uctime = -1; > if (e.mtime != null) { > elenEXTT += 4; > flagEXTT |= EXTT_FLAG_LMT; > umtime = fileTimeToUnixTime(e.mtime); > } > if (e.atime != null) { > elenEXTT += 4; > flagEXTT |= EXTT_FLAG_LAT; > uatime = fileTimeToUnixTime(e.atime); > } > if (e.ctime != null) { > elenEXTT += 4; > flagEXTT |= EXTT_FLAT_CT; > uctime = fileTimeToUnixTime(e.ctime); > } > if (flagEXTT != 0) { > // to use ntfs time if any m/a/ctime is beyond unixtime upper > bound > if (umtime > UPPER_UNIXTIME_BOUND || > uatime > UPPER_UNIXTIME_BOUND || > uctime > UPPER_UNIXTIME_BOUND) { > elen += 36;// NTFS time, total 36 bytes > } else { > elen += (elenEXTT + 5);// headid(2) + size(2) + flag(1) + > data > } > } > writeShort(elen); > writeBytes(nameBytes, 0, nameBytes.length); > if (hasZip64) { > writeShort(ZIP64_EXTID); > writeShort(16); > writeLong(e.size); > writeLong(e.csize); > } > if (flagEXTT != 0) { > if (umtime > UPPER_UNIXTIME_BOUND || > uatime > UPPER_UNIXTIME_BOUND || > uctime > UPPER_UNIXTIME_BOUND) { > writeShort(EXTID_NTFS);// id > writeShort(32);// data size > writeInt(0); // reserved > writeShort(0x0001);// NTFS attr tag > writeShort(24); > writeLong(e.mtime == null ? WINDOWS_TIME_NOT_AVAILABLE > : fileTimeToWinTime(e.mtime)); > writeLong(e.atime == null ? WINDOWS_TIME_NOT_AVAILABLE > : fileTimeToWinTime(e.atime)); > writeLong(e.ctime == null ? WINDOWS_TIME_NOT_AVAILABLE > : fileTimeToWinTime(e.ctime)); > } else { > writeShort(EXTID_EXTT); > writeShort(elenEXTT + 1); // flag + data > writeByte(flagEXTT); > if (e.mtime != null) > writeInt(umtime); > if (e.atime != null) > writeInt(uatime); > if (e.ctime != null) >
[GitHub] [commons-compress] garydgregory commented on pull request #345: COMPRESS-613: Support for extra time data in Zip archives
garydgregory commented on PR #345: URL: https://github.com/apache/commons-compress/pull/345#issuecomment-1368444645 @andrebrait Thank you for your updates, merged. -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: issues-unsubscr...@commons.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org
[jira] [Work logged] (COMPRESS-613) Write ZIP extra time fields automatically
[ https://issues.apache.org/jira/browse/COMPRESS-613?focusedWorklogId=836343=com.atlassian.jira.plugin.system.issuetabpanels:worklog-tabpanel#worklog-836343 ] ASF GitHub Bot logged work on COMPRESS-613: --- Author: ASF GitHub Bot Created on: 01/Jan/23 12:46 Start Date: 01/Jan/23 12:46 Worklog Time Spent: 10m Work Description: garydgregory merged PR #345: URL: https://github.com/apache/commons-compress/pull/345 Issue Time Tracking --- Worklog Id: (was: 836343) Time Spent: 3h 10m (was: 3h) > Write ZIP extra time fields automatically > - > > Key: COMPRESS-613 > URL: https://issues.apache.org/jira/browse/COMPRESS-613 > Project: Commons Compress > Issue Type: Improvement > Components: Archivers >Affects Versions: 1.21 >Reporter: Andre Brait >Priority: Major > Labels: zip > Time Spent: 3h 10m > Remaining Estimate: 0h > > When writing to a Zip file through ZipArchiveOutputStream, setting creation > and access times in a ZipArchiveEntry does not cause these to be reflected as > X5455 or X000A extra fields in the resulting zip file. This also happens for > modification times that do not fit into an MS-DOS time. > As a consequence, the date range is reduced, as well as the granularity (form > 100ns intervals to seconds). > ZipEntry and standard java.util.zip facilities do that automatically, but > that's missing here. > My proposal is to use the same logic the java.util.zip do and add those extra > fields automatically, if situation requires them. > See my existing logic for this here: > [https://github.com/andrebrait/DATROMTool/blob/86a4f4978bab250ca54d047c58b4f91e7dbbcc7f/core/src/main/java/io/github/datromtool/io/FileCopier.java#L1425] > It's (almost) the same logic from java.util.zip, but adapted to be used with > ZipArchiveEntry. > If you're ok with it, I can send a PR. > Actual logic will be more like > {{{}java.util.zip.ZipOutputStream#writeLOC(XEntry){}}}, represented below: > {code:java} > int elenEXTT = 0; // info-zip extended timestamp > int flagEXTT = 0; > long umtime = -1; > long uatime = -1; > long uctime = -1; > if (e.mtime != null) { > elenEXTT += 4; > flagEXTT |= EXTT_FLAG_LMT; > umtime = fileTimeToUnixTime(e.mtime); > } > if (e.atime != null) { > elenEXTT += 4; > flagEXTT |= EXTT_FLAG_LAT; > uatime = fileTimeToUnixTime(e.atime); > } > if (e.ctime != null) { > elenEXTT += 4; > flagEXTT |= EXTT_FLAT_CT; > uctime = fileTimeToUnixTime(e.ctime); > } > if (flagEXTT != 0) { > // to use ntfs time if any m/a/ctime is beyond unixtime upper > bound > if (umtime > UPPER_UNIXTIME_BOUND || > uatime > UPPER_UNIXTIME_BOUND || > uctime > UPPER_UNIXTIME_BOUND) { > elen += 36;// NTFS time, total 36 bytes > } else { > elen += (elenEXTT + 5);// headid(2) + size(2) + flag(1) + > data > } > } > writeShort(elen); > writeBytes(nameBytes, 0, nameBytes.length); > if (hasZip64) { > writeShort(ZIP64_EXTID); > writeShort(16); > writeLong(e.size); > writeLong(e.csize); > } > if (flagEXTT != 0) { > if (umtime > UPPER_UNIXTIME_BOUND || > uatime > UPPER_UNIXTIME_BOUND || > uctime > UPPER_UNIXTIME_BOUND) { > writeShort(EXTID_NTFS);// id > writeShort(32);// data size > writeInt(0); // reserved > writeShort(0x0001);// NTFS attr tag > writeShort(24); > writeLong(e.mtime == null ? WINDOWS_TIME_NOT_AVAILABLE > : fileTimeToWinTime(e.mtime)); > writeLong(e.atime == null ? WINDOWS_TIME_NOT_AVAILABLE > : fileTimeToWinTime(e.atime)); > writeLong(e.ctime == null ? WINDOWS_TIME_NOT_AVAILABLE > : fileTimeToWinTime(e.ctime)); > } else { > writeShort(EXTID_EXTT); > writeShort(elenEXTT + 1); // flag + data > writeByte(flagEXTT); > if (e.mtime != null) > writeInt(umtime); > if (e.atime != null) > writeInt(uatime); > if (e.ctime != null) > writeInt(uctime); > } > } > writeExtra(e.extra); >
[GitHub] [commons-compress] garydgregory merged pull request #345: COMPRESS-613: Support for extra time data in Zip archives
garydgregory merged PR #345: URL: https://github.com/apache/commons-compress/pull/345 -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: issues-unsubscr...@commons.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org
[jira] [Updated] (COMPRESS-613) Write ZIP extra time fields automatically
[ https://issues.apache.org/jira/browse/COMPRESS-613?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Gary D. Gregory updated COMPRESS-613: - External issue URL: https://github.com/apache/commons-compress/pull/345 > Write ZIP extra time fields automatically > - > > Key: COMPRESS-613 > URL: https://issues.apache.org/jira/browse/COMPRESS-613 > Project: Commons Compress > Issue Type: Improvement > Components: Archivers >Affects Versions: 1.21 >Reporter: Andre Brait >Priority: Major > Labels: zip > Time Spent: 3h > Remaining Estimate: 0h > > When writing to a Zip file through ZipArchiveOutputStream, setting creation > and access times in a ZipArchiveEntry does not cause these to be reflected as > X5455 or X000A extra fields in the resulting zip file. This also happens for > modification times that do not fit into an MS-DOS time. > As a consequence, the date range is reduced, as well as the granularity (form > 100ns intervals to seconds). > ZipEntry and standard java.util.zip facilities do that automatically, but > that's missing here. > My proposal is to use the same logic the java.util.zip do and add those extra > fields automatically, if situation requires them. > See my existing logic for this here: > [https://github.com/andrebrait/DATROMTool/blob/86a4f4978bab250ca54d047c58b4f91e7dbbcc7f/core/src/main/java/io/github/datromtool/io/FileCopier.java#L1425] > It's (almost) the same logic from java.util.zip, but adapted to be used with > ZipArchiveEntry. > If you're ok with it, I can send a PR. > Actual logic will be more like > {{{}java.util.zip.ZipOutputStream#writeLOC(XEntry){}}}, represented below: > {code:java} > int elenEXTT = 0; // info-zip extended timestamp > int flagEXTT = 0; > long umtime = -1; > long uatime = -1; > long uctime = -1; > if (e.mtime != null) { > elenEXTT += 4; > flagEXTT |= EXTT_FLAG_LMT; > umtime = fileTimeToUnixTime(e.mtime); > } > if (e.atime != null) { > elenEXTT += 4; > flagEXTT |= EXTT_FLAG_LAT; > uatime = fileTimeToUnixTime(e.atime); > } > if (e.ctime != null) { > elenEXTT += 4; > flagEXTT |= EXTT_FLAT_CT; > uctime = fileTimeToUnixTime(e.ctime); > } > if (flagEXTT != 0) { > // to use ntfs time if any m/a/ctime is beyond unixtime upper > bound > if (umtime > UPPER_UNIXTIME_BOUND || > uatime > UPPER_UNIXTIME_BOUND || > uctime > UPPER_UNIXTIME_BOUND) { > elen += 36;// NTFS time, total 36 bytes > } else { > elen += (elenEXTT + 5);// headid(2) + size(2) + flag(1) + > data > } > } > writeShort(elen); > writeBytes(nameBytes, 0, nameBytes.length); > if (hasZip64) { > writeShort(ZIP64_EXTID); > writeShort(16); > writeLong(e.size); > writeLong(e.csize); > } > if (flagEXTT != 0) { > if (umtime > UPPER_UNIXTIME_BOUND || > uatime > UPPER_UNIXTIME_BOUND || > uctime > UPPER_UNIXTIME_BOUND) { > writeShort(EXTID_NTFS);// id > writeShort(32);// data size > writeInt(0); // reserved > writeShort(0x0001);// NTFS attr tag > writeShort(24); > writeLong(e.mtime == null ? WINDOWS_TIME_NOT_AVAILABLE > : fileTimeToWinTime(e.mtime)); > writeLong(e.atime == null ? WINDOWS_TIME_NOT_AVAILABLE > : fileTimeToWinTime(e.atime)); > writeLong(e.ctime == null ? WINDOWS_TIME_NOT_AVAILABLE > : fileTimeToWinTime(e.ctime)); > } else { > writeShort(EXTID_EXTT); > writeShort(elenEXTT + 1); // flag + data > writeByte(flagEXTT); > if (e.mtime != null) > writeInt(umtime); > if (e.atime != null) > writeInt(uatime); > if (e.ctime != null) > writeInt(uctime); > } > } > writeExtra(e.extra); > locoff = written; > {code} -- This message was sent by Atlassian Jira (v8.20.10#820010)