Commit Graph

372 Commits

Author SHA1 Message Date
Phillip Webb
cfeafee826 Polish 2021-09-21 11:16:46 -07:00
Andy Wilkinson
37240bda3f Merge branch '2.4.x' into 2.5.x
Closes gh-27900
2021-09-09 10:13:40 +01:00
Andy Wilkinson
47163af9b6 Fix handling of Zip64 jar files larger than 4,294,967,295 bytes
Previously, a Zip64 jar file was identified by the number of entries
in the central directory being 0xFFFF. This value indicates that
there the number of entries is too big for the 2-byte field. However,
a jar may be in Zip64 format due to it exceeding the Zip format's
maximum size rather than its maximum number of entries so this field
cannot be used as a reliable indicator. The Zip specification doesn't
require any of the fields of the end of central directory record to
have a value of 0xFFFF (2-byte fields) or 0xFFFFFFFF (4-byte fields)
when using Zip64 format so we need to take a different approach.

Additionally, a number of places in the code assumed that an entry's
offset would always be available from the central directory file
header directly. This assumption did not hold true when the jar was
a Zip64 archive due to its size as the offset's value would be
0xFFFFFFF indicating that it should be read from the Zip64 extended
information field within the header's extra field instead.

This commit updates the Zip64 detection to look for the Zip64 end of
central directory locator instead. If present, it begins 20 bytes
before the beginning of the end of central directory record. Its
first four bytes are always 0x07064b50. The code that reads the
local header offset has also been updated to refer to the Zip64
extended information field when the offset is too large to fit in
the 4-byte field in the central directory file header. To allow
greater-than-4-byte offsets to be handled, a number of fields,
method parameters, and local variables have had their type changed
from an int to a long.

Fixes gh-27822
2021-09-09 09:17:48 +01:00
Phillip Webb
02494d63d2 Merge branch '2.4.x'
Closes gh-26744
2021-06-02 17:26:05 -07:00
Phillip Webb
1cda557d03 Merge branch '2.3.x' into 2.4.x
Closes gh-26743
2021-06-02 17:25:51 -07:00
Phillip Webb
1beee5700c Don't close early when SecurityManager present
Update `JarFile` and `JarFileWrapper` classes so that they no longer
close the `JarFile` early if a `SecurityManager` is in use.

Prior to this commit, the closed `JarFile` would cause (an ultimately
swallowed) NPE in `ZipFile` which manifested itself as a
`ClassNotFoundException` when starting the app.

Closes gh-25538
2021-06-02 17:24:05 -07:00
Phillip Webb
8c31d29acf Merge branch '2.4.x' 2021-03-30 09:29:59 -07:00
Phillip Webb
a28a3ae090 Merge branch '2.3.x' into 2.4.x 2021-03-30 09:25:46 -07:00
Phillip Webb
9c8a97809d Consistent use of @deprecated since
Restore the patch version number for consistency with `@since`
tags.

See gh-25808
2021-03-30 09:20:30 -07:00
Phillip Webb
44b1751bb4 Merge branch '2.4.x'
Closes gh-25826
2021-03-29 15:48:20 -07:00
Phillip Webb
363f5829d1 Merge branch '2.3.x' into 2.4.x
Closes gh-25825
2021-03-29 15:46:50 -07:00
Phillip Webb
26dd1b9a26 Update deprecations with for removal targets
Update all deprecation tags to include a removal target.

Closes gh-25808
2021-03-29 15:44:58 -07:00
Phillip Webb
deaff1a522 Merge branch '2.4.x'
Closes gh-25775
2021-03-23 17:08:18 -07:00
Phillip Webb
ca9fae6b47 Merge branch '2.3.x' into 2.4.x
Closes gh-25774
2021-03-23 17:07:44 -07:00
Phillip Webb
ec21202d54 Delete unpacked jars when the JVM exits
Update `JarFileArchive` so that any unpacked files are now deleted when
the JVM exits.

Closes gh-25773
2021-03-23 17:06:56 -07:00
Phillip Webb
05f61bccea Align unpack logic with Files.createTempDirectory
Update `JarFileArchive` to align the way that it creates temp files and
folders with the way that `Files.createTempDirectory` works.

Closes gh-25772
2021-03-23 17:06:56 -07:00
Phillip Webb
b8873578ca Add missing @Deprecated annotations 2021-03-23 17:06:53 -07:00
Phillip Webb
82791b4eda Improve performance of Tomcat 'jar:war:file' URLs
Update jar `Handler` fallback logic to directly support Tomcat
'jar:war:file' URLs. This commit allows contents to be accessed without
the JDK needing to extracted the nested jar to the temporary folder.

Closes gh-24553
2020-12-17 22:51:19 -08:00
Phillip Webb
0730949325 Merge branch '2.3.x' into 2.4.x
Closes gh-24554
2020-12-17 20:47:13 -08:00
Phillip Webb
c4e41305d5 Prevent Tomcat URL "reflective access" warnings
Update the jar `Handler` class to support a non-reflective fallback
mechanism when possible. The updated code attempts to capture a regular
jar URL before our handler is installed. It can then use that URL as
context when creating the a fallback URL. The JDK jar `Handler` will
be copied from the context URL to the fallback URL.

Without this commit, resolving new Tomcat URLs of the form
`jar:war:file:...` would result in an ugly "Illegal reflective access"
warning.

Fixes gh-18631
2020-12-17 20:43:41 -08:00
Andy Wilkinson
bbad377ecc Merge branch '2.3.x'
Closes gh-24017
2020-11-03 18:00:22 +00:00
Andy Wilkinson
f3d4b3e5ac Allow entries to be streamed from JarURLConnections' jar file
Fixes gh-23821
2020-11-03 17:59:38 +00:00
Santhoshkumar. P
5cb07e292d Polish empty string checks
See gh-23550
2020-10-05 10:38:47 +02:00
Andy Wilkinson
558c2b4591 Merge branch '2.3.x'
Closes gh-23501
2020-09-26 09:17:08 +01:00
Andy Wilkinson
9bd040cb0f Merge branch '2.2.x' into 2.3.x
Closes gh-23500
2020-09-26 09:16:46 +01:00
Andy Wilkinson
e74f777971 Remove use of spring-core's Assert from PropertiesLauncher
Fixes gh-23474
2020-09-26 09:11:05 +01:00
Phillip Webb
3fca8c6b4e Merge branch '2.2.x' into 2.3.x
Closes gh-23441
2020-09-21 22:27:45 -07:00
Phillip Webb
4945806d84 Make StringSequence.isEmpty() public
Make `StringSequence.isEmpty()` public for compatibility with JDK 15.

Closes gh-23440
2020-09-21 22:26:20 -07:00
Phillip Webb
5b74d464a6 Merge branch '2.3.x' 2020-09-15 08:48:51 -07:00
Phillip Webb
5c1055dc22 Merge branch '2.2.x' into 2.3.x 2020-09-15 08:48:25 -07:00
Phillip Webb
195def0ec3 Merge branch '2.1.x' into 2.2.x 2020-09-15 08:48:00 -07:00
Phillip Webb
e0030094e2 Fix missing jar entry certificates
Ensure that the source jar entry is closed before reading
certificates and code signers from the entry.

gh-19041
2020-09-15 08:42:58 -07:00
Phillip Webb
433b357423 Merge branch '2.3.x' 2020-09-14 13:53:00 -07:00
Phillip Webb
a249a1a3d1 Merge branch '2.2.x' into 2.3.x 2020-09-14 13:52:22 -07:00
Phillip Webb
b8e6b2ef94 Merge branch '2.1.x' into 2.2.x 2020-09-14 13:51:24 -07:00
Phillip Webb
4138e59c33 Fix potential JarFileEntries ClassCastException
Update `JarFileEntries` so that the interface is obtained rather than
the concrete implementation. This allows `JarEntry` values to be used
without causing a ClassCastException.

Closes gh-19041
2020-09-14 13:48:59 -07:00
Phillip Webb
3a8c15af0d Merge branch '2.3.x'
Closes gh-23265
2020-09-13 22:50:28 -07:00
Phillip Webb
45275e6586 Merge branch '2.2.x' into 2.3.x
Closes gh-23264
2020-09-13 22:49:21 -07:00
Phillip Webb
a20fdf8e6a Merge branch '2.1.x' into 2.2.x
Closes gh-23263
2020-09-13 22:45:39 -07:00
Phillip Webb
895ff9c72d Merge pull request #19041 from mathieufortin01
* pr/19041:
  Polish 'Fix signed jar performance issues'
  Fix signed jar performance issues
  Ignore Visual Studio Code Files

Closes gh-19041
2020-09-13 22:40:05 -07:00
Phillip Webb
c6a9696dd1 Polish 'Fix signed jar performance issues'
Update the performance improvements to push certificate loading
and storage into the `JarFileEntries` class. This allows us to
keep certificates without needing to cache all entry data. We
now also keep certificates and code signers in a dedicated class
which is set whenever the full jar stream as been read, even if
the contained values are `null`. The logic that assumes META-INF
entries are not signed has been removed in favor of delegating to
the streamed entry results.

See gh-19041
2020-09-13 22:28:45 -07:00
mathieufortin01
4d053e15d8 Fix signed jar performance issues
Update Spring Boot nested JarFile support to improve the performance of
signed jars. Prior to this commit, `certificates` and `codeSigners`
were read by streaming the entire jar whenever the existing values
were `null`. Unfortunately, the contract for `getCertificates` and
get `getCodeSigners` states that `null` is a valid return value. This
meant that full jar streaming would occur whenever either method was
called on an entry that had no result. The problem was further
exacerbated by the fact that entries might not be cached.

See gh-19041
2020-09-13 22:14:03 -07:00
Andy Wilkinson
6619dfacf3 Merge branch '2.3.x'
Closes gh-23241
2020-09-10 10:03:09 +01:00
Andy Wilkinson
e7e77a917f Align PropertiesLauncher's close behavior with JarLauncher
Previously, PropertiesLauncher would close each archive that it
iterated over when creating its ClassLoader. This was not aligned
with JarLauncher's behaviour and left the ClassLoader with closed
archives. The close was introduced in [1] and became more apparent
following the change to fail operations on closed archives [2].

This commit updates Launcher to remove the close() that was added in
[1]. This aligns the behavior of PropertiesLauncher with JarLauncher
and ensures that the ClassLoader does not have entries backed by
closed archives on its classpath.

Fixes gh-23165

[1] ad72f86bdb
[2] ed7a5db174
2020-09-10 09:40:44 +01:00
Phillip Webb
aa2580bb51 Merge branch '2.3.x' 2020-08-18 15:39:08 -07:00
Phillip Webb
ba2ab3363b Merge branch '2.2.x' into 2.3.x 2020-08-18 15:38:53 -07:00
Phillip Webb
60b5de192c Merge branch '2.2.x' into 2.3.x 2020-08-18 15:38:11 -07:00
Phillip Webb
5997cbd21f Refine AbstractJarFile method visibility
Refine method visibility in an attempt to fix test issues on Java 11+.

See gh-22991
2020-08-18 15:37:37 -07:00
Phillip Webb
b60820564e Merge branch '2.3.x'
Closes gh-22999
2020-08-18 14:35:59 -07:00
Phillip Webb
2b1b096fac Merge branch '2.2.x' into 2.3.x
Closes gh-22998
2020-08-18 14:35:45 -07:00