|
50 | 50 | import com.google.common.collect.ImmutableMap; |
51 | 51 | import com.google.common.collect.Iterables; |
52 | 52 | import com.google.common.io.BaseEncoding; |
| 53 | +import com.google.common.net.UrlEscapers; |
53 | 54 |
|
54 | 55 | import org.easymock.Capture; |
55 | 56 | import org.easymock.EasyMock; |
@@ -1252,16 +1253,17 @@ public void testSignUrlLeadingSlash() throws NoSuchAlgorithmException, InvalidKe |
1252 | 1253 | ServiceAccountAuthCredentials.createFor(ACCOUNT, privateKey); |
1253 | 1254 | storage = options.toBuilder().authCredentials(authCredentials).build().service(); |
1254 | 1255 | URL url = storage.signUrl(BlobInfo.builder(BUCKET_NAME1, blobName).build(), 14, TimeUnit.DAYS); |
| 1256 | + String escapedBlobName = UrlEscapers.urlPathSegmentEscaper().escape(blobName); |
1255 | 1257 | String stringUrl = url.toString(); |
1256 | 1258 | String expectedUrl = new StringBuilder("https://storage.googleapis.com/").append(BUCKET_NAME1) |
1257 | | - .append(blobName).append("?GoogleAccessId=").append(ACCOUNT).append("&Expires=") |
| 1259 | + .append(escapedBlobName).append("?GoogleAccessId=").append(ACCOUNT).append("&Expires=") |
1258 | 1260 | .append(42L + 1209600).append("&Signature=").toString(); |
1259 | 1261 | assertTrue(stringUrl.startsWith(expectedUrl)); |
1260 | 1262 | String signature = stringUrl.substring(expectedUrl.length()); |
1261 | 1263 |
|
1262 | 1264 | StringBuilder signedMessageBuilder = new StringBuilder(); |
1263 | 1265 | signedMessageBuilder.append(HttpMethod.GET).append("\n\n\n").append(42L + 1209600).append("\n/") |
1264 | | - .append(BUCKET_NAME1).append(blobName); |
| 1266 | + .append(BUCKET_NAME1).append(escapedBlobName); |
1265 | 1267 |
|
1266 | 1268 | Signature signer = Signature.getInstance("SHA256withRSA"); |
1267 | 1269 | signer.initVerify(publicKey); |
|
0 commit comments