Skip to content
This repository was archived by the owner on May 14, 2025. It is now read-only.

Commit 2ac9bfa

Browse files
onobcCorneil du Plessis
andauthored
Improved validateUploadRequest and applied after tmp directory was created. (#5818)
Co-authored-by: Corneil du Plessis <[email protected]>
1 parent 469025f commit 2ac9bfa

File tree

1 file changed

+13
-9
lines changed
  • spring-cloud-skipper/spring-cloud-skipper-server-core/src/main/java/org/springframework/cloud/skipper/server/service

1 file changed

+13
-9
lines changed

spring-cloud-skipper/spring-cloud-skipper-server-core/src/main/java/org/springframework/cloud/skipper/server/service/PackageService.java

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -213,21 +213,20 @@ public void delete(PackageMetadata packageMetadata) {
213213

214214
@Transactional
215215
public PackageMetadata upload(UploadRequest uploadRequest) {
216-
validateUploadRequest(uploadRequest);
216+
217217
Repository localRepositoryToUpload = getRepositoryToUpload(uploadRequest.getRepoName());
218218
Path packageDirPath = null;
219219
try {
220220
packageDirPath = TempFileUtils.createTempDirectory("skipperUpload");
221+
validateUploadRequest(packageDirPath, uploadRequest);
221222
File packageDir = new File(packageDirPath + File.separator + uploadRequest.getName());
222223
packageDir.mkdir();
223-
Path packageFile = Paths
224-
.get(packageDir.getPath() + File.separator + uploadRequest.getName() + "-"
225-
+ uploadRequest.getVersion() + "." + uploadRequest.getExtension());
224+
String fullName = uploadRequest.getName().trim() + "-" + uploadRequest.getVersion().trim() + "." + uploadRequest.getExtension().trim();
225+
Path packageFile = Paths.get(packageDir.getPath() + File.separator + fullName);
226226
Assert.isTrue(packageDir.exists(), "Package directory doesn't exist.");
227227
Files.write(packageFile, uploadRequest.getPackageFileAsBytes());
228228
ZipUtil.unpack(packageFile.toFile(), packageDir);
229-
String unzippedPath = packageDir.getAbsolutePath() + File.separator + uploadRequest.getName()
230-
+ "-" + uploadRequest.getVersion();
229+
String unzippedPath = packageDir.getAbsolutePath() + File.separator + uploadRequest.getName() + "-" + uploadRequest.getVersion();
231230
File unpackagedFile = new File(unzippedPath);
232231
Assert.isTrue(unpackagedFile.exists(), "Package is expected to be unpacked, but it doesn't exist");
233232
Package packageToUpload = this.packageReader.read(unpackagedFile);
@@ -267,7 +266,7 @@ private Repository getRepositoryToUpload(String repoName) {
267266
return localRepositoryToUpload;
268267
}
269268

270-
private void validateUploadRequest(UploadRequest uploadRequest) {
269+
private void validateUploadRequest(Path packageDirPath, UploadRequest uploadRequest) throws IOException {
271270
Assert.notNull(uploadRequest.getRepoName(), "Repo name can not be null");
272271
Assert.notNull(uploadRequest.getName(), "Name of package can not be null");
273272
Assert.notNull(uploadRequest.getVersion(), "Version can not be null");
@@ -283,11 +282,16 @@ private void validateUploadRequest(UploadRequest uploadRequest) {
283282
+ uploadRequest.getExtension());
284283
Assert.notNull(uploadRequest.getPackageFileAsBytes(), "Package file as bytes must not be null");
285284
Assert.isTrue(uploadRequest.getPackageFileAsBytes().length != 0, "Package file as bytes must not be empty");
285+
File destinationFile = new File(packageDirPath.toFile(), uploadRequest.getName().trim());
286+
String canonicalDestinationDirPath = packageDirPath.toFile().getCanonicalPath();
287+
String canonicalDestinationFile = destinationFile.getCanonicalPath();
288+
if (!canonicalDestinationFile.startsWith(canonicalDestinationDirPath + File.separator)) {
289+
throw new SkipperException("Entry is outside of the target dir: " + uploadRequest.getName());
290+
}
286291
PackageMetadata existingPackageMetadata = this.packageMetadataRepository.findByRepositoryNameAndNameAndVersion(
287292
uploadRequest.getRepoName().trim(), uploadRequest.getName().trim(), uploadRequest.getVersion().trim());
288293
if (existingPackageMetadata != null) {
289-
throw new SkipperException(String.format("Failed to upload the package. " + "" +
290-
"Package [%s:%s] in Repository [%s] already exists.",
294+
throw new SkipperException(String.format("Failed to upload the package. Package [%s:%s] in Repository [%s] already exists.",
291295
uploadRequest.getName(), uploadRequest.getVersion(), uploadRequest.getRepoName().trim()));
292296
}
293297
}

0 commit comments

Comments
 (0)