From 2d3bcae4e151817cdc803d815e9ad9d01d426f5a Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Mon, 12 Jun 2017 13:46:59 +0100 Subject: [PATCH] Make JarURLConnection return entry's length from getContentLengthLong() Closes gh-9484 --- .../boot/loader/jar/JarURLConnection.java | 9 +++++++++ .../boot/loader/jar/JarURLConnectionTests.java | 16 +++++++++++++++- 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/spring-boot-tools/spring-boot-loader/src/main/java/org/springframework/boot/loader/jar/JarURLConnection.java b/spring-boot-tools/spring-boot-loader/src/main/java/org/springframework/boot/loader/jar/JarURLConnection.java index 8199fb4490..3a6d6fd231 100644 --- a/spring-boot-tools/spring-boot-loader/src/main/java/org/springframework/boot/loader/jar/JarURLConnection.java +++ b/spring-boot-tools/spring-boot-loader/src/main/java/org/springframework/boot/loader/jar/JarURLConnection.java @@ -187,6 +187,15 @@ final class JarURLConnection extends java.net.JarURLConnection { @Override public int getContentLength() { + long longContentLength = getContentLengthLong(); + if (longContentLength > Integer.MAX_VALUE) { + return -1; + } + return (int) longContentLength; + } + + @Override + public long getContentLengthLong() { if (this.jarFile == null) { return -1; } diff --git a/spring-boot-tools/spring-boot-loader/src/test/java/org/springframework/boot/loader/jar/JarURLConnectionTests.java b/spring-boot-tools/spring-boot-loader/src/test/java/org/springframework/boot/loader/jar/JarURLConnectionTests.java index ef98792d9f..15c6df1a64 100644 --- a/spring-boot-tools/spring-boot-loader/src/test/java/org/springframework/boot/loader/jar/JarURLConnectionTests.java +++ b/spring-boot-tools/spring-boot-loader/src/test/java/org/springframework/boot/loader/jar/JarURLConnectionTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2016 the original author or authors. + * Copyright 2012-2017 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -136,6 +136,20 @@ public class JarURLConnectionTests { .hasSameContentAs(new ByteArrayInputStream(new byte[] { 3 })); } + @Test + public void getContentLengthReturnsLengthOfUnderlyingEntry() throws Exception { + URL url = new URL(new URL("jar", null, -1, + "file:" + getAbsolutePath() + "!/nested.jar!/", new Handler()), "/3.dat"); + assertThat(url.openConnection().getContentLength()).isEqualTo(1); + } + + @Test + public void getContentLengthLongReturnsLengthOfUnderlyingEntry() throws Exception { + URL url = new URL(new URL("jar", null, -1, + "file:" + getAbsolutePath() + "!/nested.jar!/", new Handler()), "/3.dat"); + assertThat(url.openConnection().getContentLengthLong()).isEqualTo(1); + } + private String getAbsolutePath() { return this.rootJarFile.getAbsolutePath().replace('\\', '/'); }