From ceea475c450c54832dad377ef81e9c438a4b37d5 Mon Sep 17 00:00:00 2001
From: am0o0 <77095239+am0o0@users.noreply.github.com>
Date: Sat, 8 Jun 2024 01:04:20 +0200
Subject: [PATCH 01/27] add new s3 and spring IO path injection sinks
---
.../s3-transfer-manager.model.yml | 13 ++
.../ext/experimental/spring-core.model.yml | 27 ++++
.../NewPathInjection/PathInjection/pom.xml | 110 ++++++++++++++++
.../PathInjection/CommonsIOPathInjection.java | 38 ++++++
.../java/com/PathInjection/HelloServlet.java | 45 +++++++
.../com/PathInjection/S3PathInjection.java | 122 ++++++++++++++++++
.../PathInjection/SpringIoPathInjection.java | 50 +++++++
7 files changed, 405 insertions(+)
create mode 100644 java/ql/lib/ext/experimental/s3-transfer-manager.model.yml
create mode 100644 java/ql/lib/ext/experimental/spring-core.model.yml
create mode 100644 java/ql/test/query-tests/security/CWE-022/semmle/tests/NewPathInjection/PathInjection/pom.xml
create mode 100644 java/ql/test/query-tests/security/CWE-022/semmle/tests/NewPathInjection/PathInjection/src/main/java/com/PathInjection/CommonsIOPathInjection.java
create mode 100755 java/ql/test/query-tests/security/CWE-022/semmle/tests/NewPathInjection/PathInjection/src/main/java/com/PathInjection/HelloServlet.java
create mode 100644 java/ql/test/query-tests/security/CWE-022/semmle/tests/NewPathInjection/PathInjection/src/main/java/com/PathInjection/S3PathInjection.java
create mode 100755 java/ql/test/query-tests/security/CWE-022/semmle/tests/NewPathInjection/PathInjection/src/main/java/com/PathInjection/SpringIoPathInjection.java
diff --git a/java/ql/lib/ext/experimental/s3-transfer-manager.model.yml b/java/ql/lib/ext/experimental/s3-transfer-manager.model.yml
new file mode 100644
index 00000000000..fc66271b01a
--- /dev/null
+++ b/java/ql/lib/ext/experimental/s3-transfer-manager.model.yml
@@ -0,0 +1,13 @@
+extensions:
+ - addsTo:
+ pack: codeql/java-all
+ extensible: experimentalSinkModel
+ data:
+ - ["software.amazon.awssdk.transfer.s3.model","ResumableFileUpload",true,"serializeToFile","(Path)","","Argument[0]","path-injection","manual"]
+ - ["software.amazon.awssdk.transfer.s3.model","DownloadFileRequest$Builder",true,"destination","(Path)","","Argument[0]","path-injection","manual"]
+ - ["software.amazon.awssdk.transfer.s3.model","UploadFileRequest$Builder",true,"source","(Path)","","Argument[0]","path-injection","manual"]
+ - ["software.amazon.awssdk.transfer.s3.model","DownloadDirectoryRequest$Builder",true,"destination","(Path)","","Argument[0]","path-injection","manual"]
+ - ["software.amazon.awssdk.transfer.s3.model","ResumableFileDownload",true,"fromFile","(Path)","","Argument[0]","path-injection","manual"]
+ - ["software.amazon.awssdk.transfer.s3.model","ResumableFileDownload",true,"serializeToFile","(Path)","","Argument[0]","path-injection","manual"]
+ - ["software.amazon.awssdk.transfer.s3.model","ResumableFileUpload",true,"fromFile","(Path)","","Argument[0]","path-injection","manual"]
+ - ["software.amazon.awssdk.transfer.s3.model","UploadDirectoryRequest$Builder",true,"source","(Path)","","Argument[0]","code-injection","manual"]
diff --git a/java/ql/lib/ext/experimental/spring-core.model.yml b/java/ql/lib/ext/experimental/spring-core.model.yml
new file mode 100644
index 00000000000..87e7a26f0bb
--- /dev/null
+++ b/java/ql/lib/ext/experimental/spring-core.model.yml
@@ -0,0 +1,27 @@
+extensions:
+ - addsTo:
+ pack: codeql/java-all
+ extensible: experimentalSinkModel
+ data:
+ - ["org.springframework.core.io","FileSystemResource",true,"FileSystemResource","(FileSystem,String)","","Argument[1]","path-injection","manual"]
+ - ["org.springframework.core.io","FileSystemResource",true,"FileSystemResource","(File)","","Argument[0]","path-injection","manual"]
+ - ["org.springframework.core.io","FileSystemResource",true,"FileSystemResource","(Path)","","Argument[0]","path-injection","manual"]
+ - ["org.springframework.core.io","FileSystemResource",true,"FileSystemResource","(String)","","Argument[0]","path-injection","manual"]
+ - ["org.springframework.core.io","FileUrlResource",true,"FileUrlResource","(String)","","Argument[0]","path-injection","manual"]
+ - ["org.springframework.core.io","FileUrlResource",true,"FileUrlResource","(URL)","","Argument[0]","path-injection","manual"]
+ - ["org.springframework.core.io","PathResource",true,"PathResource","(Path)","","Argument[0]","path-injection","manual"]
+ - ["org.springframework.core.io","PathResource",true,"PathResource","(String)","","Argument[0]","path-injection","manual"]
+ - ["org.springframework.core.io","PathResource",true,"PathResource","(URI)","","Argument[0]","path-injection","manual"]
+ - ["org.springframework.core.io","UrlResource",true,"UrlResource","(String,String,String)","","Argument[1]","path-injection","manual"]
+ - ["org.springframework.core.io","UrlResource",true,"UrlResource","(String,String)","","Argument[1]","path-injection","manual"]
+ - ["org.springframework.core.io","UrlResource",true,"UrlResource","(String)","","Argument[0]","path-injection","manual"]
+ - ["org.springframework.core.io","UrlResource",true,"UrlResource","(URI)","","Argument[0]","path-injection","manual"]
+ - ["org.springframework.core.io","UrlResource",true,"UrlResource","(URL)","","Argument[0]","path-injection","manual"]
+ - ["org.springframework.util","FileSystemUtils",true,"copyRecursively","(Path,Path)","","Argument[0]","path-injection","manual"]
+ - ["org.springframework.util","FileSystemUtils",true,"copyRecursively","(Path,Path)","","Argument[1]","path-injection","manual"]
+ - ["org.springframework.util","FileSystemUtils",true,"deleteRecursively","(File)","","Argument[0]","path-injection","manual"]
+ - ["org.springframework.util","FileSystemUtils",true,"deleteRecursively","(Path)","","Argument[0]","path-injection","manual"]
+ - ["org.springframework.util","ResourceUtils",true,"getFile","(String)","","Argument[0]","path-injection","manual"]
+ - ["org.springframework.util","FileCopyUtils",true,"copyToByteArray","(File)","","Argument[0]","path-injection","manual"]
+ - ["org.springframework.util","FileCopyUtils",true,"copyToString","(Reader)","","Argument[0]","path-injection","manual"]
+ - ["org.springframework.util","FileSystemUtils",true,"copyRecursively","(File,File)","","Argument[0]","path-injection","manual"]
diff --git a/java/ql/test/query-tests/security/CWE-022/semmle/tests/NewPathInjection/PathInjection/pom.xml b/java/ql/test/query-tests/security/CWE-022/semmle/tests/NewPathInjection/PathInjection/pom.xml
new file mode 100644
index 00000000000..74f842a88e3
--- /dev/null
+++ b/java/ql/test/query-tests/security/CWE-022/semmle/tests/NewPathInjection/PathInjection/pom.xml
@@ -0,0 +1,110 @@
+
+ 4.0.0
+ org.PathInjection
+ PathInjection
+ war
+ 1.0-SNAPSHOT
+ PathInjection Maven Webapp
+ https://maven.apache.org
+
+
+ 2.19.1
+
+
+
+
+
+ software.amazon.awssdk
+ bom
+ ${aws.sdk.version}
+ pom
+ import
+
+
+
+
+
+ javax.servlet
+ javax.servlet-api
+ 4.0.1
+ provided
+
+
+ org.springframework
+ spring-framework-bom
+ 6.1.4
+ import
+ pom
+
+
+
+ org.springframework
+ spring-core
+ 6.1.4
+
+
+ software.amazon.awssdk
+ s3-transfer-manager
+
+
+ software.amazon.awssdk.crt
+ aws-crt
+ 0.20.3
+
+
+ commons-io
+ commons-io
+ 2.12.0
+
+
+
+ net.lingala.zip4j
+ zip4j
+ 2.11.5
+
+
+
+ com.github.luben
+ zstd-jni
+ 1.5.5-1
+
+
+
+ org.tukaani
+ xz
+ 1.9
+
+
+
+ org.lz4
+ lz4-java
+ 1.8.0
+
+
+
+ org.xerial.snappy
+ snappy-java
+ 1.1.10.5
+
+
+
+ org.apache.commons
+ commons-compress
+ 1.26.0
+
+
+
+ PathInjection
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+
+ 11
+ 11
+
+
+
+
+
diff --git a/java/ql/test/query-tests/security/CWE-022/semmle/tests/NewPathInjection/PathInjection/src/main/java/com/PathInjection/CommonsIOPathInjection.java b/java/ql/test/query-tests/security/CWE-022/semmle/tests/NewPathInjection/PathInjection/src/main/java/com/PathInjection/CommonsIOPathInjection.java
new file mode 100644
index 00000000000..73179bf5a52
--- /dev/null
+++ b/java/ql/test/query-tests/security/CWE-022/semmle/tests/NewPathInjection/PathInjection/src/main/java/com/PathInjection/CommonsIOPathInjection.java
@@ -0,0 +1,38 @@
+package com.PathInjection;
+
+import java.io.*;
+import java.nio.channels.AsynchronousFileChannel;
+import java.nio.file.*;
+import java.nio.file.attribute.FileAttribute;
+import java.util.Set;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+
+class fileAttr implements FileAttribute {
+ public String name() {
+ return "file";
+ }
+
+ public String value() {
+ return "value";
+ }
+}
+
+public class CommonsIOPathInjection {
+ public void PathInjection(Path src, File srcF) throws IOException {
+ AsynchronousFileChannel.open(src); // $ PathInjection
+ AsynchronousFileChannel.open(src, LinkOption.NOFOLLOW_LINKS); // $ PathInjection
+ AsynchronousFileChannel.open(
+ src, LinkOption.NOFOLLOW_LINKS, LinkOption.NOFOLLOW_LINKS); // $ PathInjection
+ ExecutorService executor = Executors.newFixedThreadPool(10);
+ AsynchronousFileChannel.open(
+ src, Set.of(LinkOption.NOFOLLOW_LINKS), executor); // $ PathInjection
+ AsynchronousFileChannel.open(
+ src, // $ PathInjection
+ Set.of(LinkOption.NOFOLLOW_LINKS),
+ executor,
+ new fileAttr());
+
+ FileSystems.getFileSystem(srcF.toURI()); // $ PathInjection
+ }
+}
diff --git a/java/ql/test/query-tests/security/CWE-022/semmle/tests/NewPathInjection/PathInjection/src/main/java/com/PathInjection/HelloServlet.java b/java/ql/test/query-tests/security/CWE-022/semmle/tests/NewPathInjection/PathInjection/src/main/java/com/PathInjection/HelloServlet.java
new file mode 100755
index 00000000000..45a231dc898
--- /dev/null
+++ b/java/ql/test/query-tests/security/CWE-022/semmle/tests/NewPathInjection/PathInjection/src/main/java/com/PathInjection/HelloServlet.java
@@ -0,0 +1,45 @@
+package com.PathInjection;
+
+import java.io.*;
+import java.io.IOException;
+import java.net.URISyntaxException;
+import java.nio.file.Path;
+import javax.servlet.annotation.MultipartConfig;
+import javax.servlet.annotation.WebServlet;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import net.lingala.zip4j.ZipFile;
+
+@WebServlet(
+ name = "helloServlet",
+ urlPatterns = {"/hello"})
+@MultipartConfig()
+public class HelloServlet extends HttpServlet {
+
+ public void init() {}
+
+ public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
+ String path = request.getParameter("path");
+ Path src = Path.of(path);
+ File srcF = new File(path);
+ new CommonsIOPathInjection().PathInjection(src, srcF);
+ new SpringIoPathInjection().PathInjection(path);
+ S3PathInjection s3PathInjection = new S3PathInjection();
+ s3PathInjection.downloadFileResumable(src.toUri());
+ s3PathInjection.downloadFile(path);
+ s3PathInjection.downloadObjectsToDirectory(src.toUri());
+ s3PathInjection.uploadFileResumable(src.toUri());
+ s3PathInjection.uploadDirectory(src.toUri());
+ s3PathInjection.uploadFile(src.toUri());
+
+ ZipFile zipfile = new ZipFile(path);
+ zipfile.extractAll(path);
+ new java.util.zip.ZipFile(path);
+
+ PrintWriter out = response.getWriter();
+ response.setContentType("text/html");
+ out.println("end");
+ }
+}
diff --git a/java/ql/test/query-tests/security/CWE-022/semmle/tests/NewPathInjection/PathInjection/src/main/java/com/PathInjection/S3PathInjection.java b/java/ql/test/query-tests/security/CWE-022/semmle/tests/NewPathInjection/PathInjection/src/main/java/com/PathInjection/S3PathInjection.java
new file mode 100644
index 00000000000..7775ba826c8
--- /dev/null
+++ b/java/ql/test/query-tests/security/CWE-022/semmle/tests/NewPathInjection/PathInjection/src/main/java/com/PathInjection/S3PathInjection.java
@@ -0,0 +1,122 @@
+package com.PathInjection;
+
+import software.amazon.awssdk.transfer.s3.S3TransferManager;
+import software.amazon.awssdk.transfer.s3.model.*;
+import software.amazon.awssdk.transfer.s3.progress.LoggingTransferListener;
+
+import java.net.MalformedURLException;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.nio.file.Paths;
+
+public class S3PathInjection {
+ S3TransferManager transferManager = S3TransferManager.create();
+ String bucketName = "bucketTest";
+ String key = "keyTest";
+
+ public String uploadFile(URI filePathURI) {
+ UploadFileRequest uploadFileRequest =
+ UploadFileRequest.builder()
+ .putObjectRequest(b -> b.bucket(this.bucketName).key(this.key))
+ .addTransferListener(LoggingTransferListener.create())
+ .source(Paths.get(filePathURI)) // $ PathInjection
+ .build();
+
+ FileUpload fileUpload = this.transferManager.uploadFile(uploadFileRequest);
+
+ CompletedFileUpload uploadResult = fileUpload.completionFuture().join();
+ return uploadResult.response().eTag();
+ }
+
+ public String uploadFileResumable(URI filePathURI) {
+ UploadFileRequest uploadFileRequest =
+ UploadFileRequest.builder()
+ .putObjectRequest(b -> b.bucket(this.bucketName).key(this.key))
+ .addTransferListener(LoggingTransferListener.create())
+ .source(Paths.get(filePathURI)) // $ PathInjection
+ .build();
+
+ // Initiate the transfer
+ FileUpload upload = this.transferManager.uploadFile(uploadFileRequest);
+ // Pause the upload
+ ResumableFileUpload resumableFileUpload = upload.pause();
+ // Optionally, persist the resumableFileUpload
+ resumableFileUpload.serializeToFile(Paths.get(filePathURI)); // $ PathInjection
+ // Retrieve the resumableFileUpload from the file
+ ResumableFileUpload persistedResumableFileUpload =
+ ResumableFileUpload.fromFile(Paths.get(filePathURI)); // $ PathInjection
+ // Resume the upload
+ FileUpload resumedUpload = this.transferManager.resumeUploadFile(persistedResumableFileUpload);
+ // Wait for the transfer to complete
+ resumedUpload.completionFuture().join();
+ FileUpload fileUpload = this.transferManager.uploadFile(uploadFileRequest);
+ CompletedFileUpload uploadResult = fileUpload.completionFuture().join();
+ return uploadResult.response().eTag();
+ }
+
+ public String downloadFileResumable(URI downloadedFileWithPath) {
+ DownloadFileRequest downloadFileRequest =
+ DownloadFileRequest.builder()
+ .getObjectRequest(b -> b.bucket(this.bucketName).key(this.key))
+ .addTransferListener(LoggingTransferListener.create())
+ .destination(Paths.get(downloadedFileWithPath)) // $ PathInjection
+ .build();
+
+ // Initiate the transfer
+ FileDownload download = this.transferManager.downloadFile(downloadFileRequest);
+ // Pause the download
+ ResumableFileDownload resumableFileDownload = download.pause();
+ // Optionally, persist the resumableFileDownload
+ resumableFileDownload.serializeToFile(Paths.get(downloadedFileWithPath)); // $ PathInjection
+ // Retrieve the resumableFileDownload from the file
+ ResumableFileDownload persistedResumableFileDownload =
+ ResumableFileDownload.fromFile(Paths.get(downloadedFileWithPath)); // $ PathInjection
+ // Resume the download
+ FileDownload resumedDownload =
+ this.transferManager.resumeDownloadFile(persistedResumableFileDownload);
+ // Wait for the transfer to complete
+ resumedDownload.completionFuture().join();
+ FileDownload filedownload = this.transferManager.downloadFile(downloadFileRequest);
+ CompletedFileDownload downloadResult = filedownload.completionFuture().join();
+ return downloadResult.response().eTag();
+ }
+
+ public Integer uploadDirectory(URI sourceDirectory) {
+ DirectoryUpload directoryUpload =
+ this.transferManager.uploadDirectory(
+ UploadDirectoryRequest.builder()
+ .source(Paths.get(sourceDirectory)) // $ PathInjection
+ .bucket(this.bucketName)
+ .build());
+
+ CompletedDirectoryUpload completedDirectoryUpload = directoryUpload.completionFuture().join();
+ return completedDirectoryUpload.failedTransfers().size();
+ }
+
+ public Long downloadFile(String downloadedFileWithPath) {
+ DownloadFileRequest downloadFileRequest =
+ DownloadFileRequest.builder()
+ .getObjectRequest(b -> b.bucket(this.bucketName).key(this.key))
+ .addTransferListener(LoggingTransferListener.create())
+ .destination(Paths.get(downloadedFileWithPath)) // $ PathInjection
+ .build();
+
+ FileDownload downloadFile = this.transferManager.downloadFile(downloadFileRequest);
+
+ CompletedFileDownload downloadResult = downloadFile.completionFuture().join();
+ return downloadResult.response().contentLength();
+ }
+
+ public Integer downloadObjectsToDirectory(URI destinationPathURI) {
+ DirectoryDownload directoryDownload =
+ this.transferManager.downloadDirectory(
+ DownloadDirectoryRequest.builder()
+ .destination(Paths.get(destinationPathURI)) // $ PathInjection
+ .bucket(this.bucketName)
+ .build());
+ CompletedDirectoryDownload completedDirectoryDownload =
+ directoryDownload.completionFuture().join();
+
+ return completedDirectoryDownload.failedTransfers().size();
+ }
+}
diff --git a/java/ql/test/query-tests/security/CWE-022/semmle/tests/NewPathInjection/PathInjection/src/main/java/com/PathInjection/SpringIoPathInjection.java b/java/ql/test/query-tests/security/CWE-022/semmle/tests/NewPathInjection/PathInjection/src/main/java/com/PathInjection/SpringIoPathInjection.java
new file mode 100755
index 00000000000..b3568dbbabf
--- /dev/null
+++ b/java/ql/test/query-tests/security/CWE-022/semmle/tests/NewPathInjection/PathInjection/src/main/java/com/PathInjection/SpringIoPathInjection.java
@@ -0,0 +1,50 @@
+package com.PathInjection;
+
+import java.io.*;
+import java.io.IOException;
+import java.net.URI;
+import java.nio.file.FileSystems;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+
+import org.springframework.core.io.*;
+import org.springframework.util.FileCopyUtils;
+import org.springframework.util.FileSystemUtils;
+import org.springframework.util.ResourceUtils;
+
+public class SpringIoPathInjection {
+ public void PathInjection(String path) throws IOException {
+ Path fileStorageLocation = Paths.get(path).toAbsolutePath().normalize();
+ Path filePath = fileStorageLocation.resolve(path).normalize();
+ File pathFile = new File(path);
+
+ new UrlResource(filePath.toUri()); // $ PathInjection
+ new UrlResource(filePath.toUri().toURL()); // $ PathInjection
+ new UrlResource("file", path); // $ PathInjection
+ new UrlResource("file", path, "#"); // $ PathInjection
+ new UrlResource(path); // $ PathInjection
+
+ new PathResource(path); // $ PathInjection
+ new PathResource(filePath); // $ PathInjection
+ new PathResource(filePath.toUri()); // $ PathInjection
+
+ new FileUrlResource(filePath.toUri().toURL()); // $ PathInjection
+ new FileUrlResource(path); // $ PathInjection
+
+ new FileSystemResource(pathFile); // $ PathInjection
+ new FileSystemResource(path); // $ PathInjection
+ new FileSystemResource(filePath); // $ PathInjection
+ new FileSystemResource(
+ FileSystems.getFileSystem(URI.create("file:///")), path); // $ PathInjection
+
+ ResourceUtils.getFile(path); // summaryModel
+ ResourceUtils.getFile(path); // summaryModel
+ FileSystemUtils.copyRecursively(filePath, filePath.resolve("/newPath")); // $ PathInjection
+ FileSystemUtils.copyRecursively(pathFile, pathFile); // $ PathInjection
+ FileSystemUtils.deleteRecursively(pathFile); // $ PathInjection
+ FileSystemUtils.deleteRecursively(filePath); // $ PathInjection
+ FileCopyUtils.copy(pathFile, pathFile); // $ PathInjection
+ FileCopyUtils.copyToByteArray(pathFile); // $ PathInjection
+ FileCopyUtils.copyToString(new FileReader("fa"));
+ }
+}
From 240b4cd696d86a473452e18842b65072eeac4126 Mon Sep 17 00:00:00 2001
From: am0o0 <77095239+am0o0@users.noreply.github.com>
Date: Sat, 8 Jun 2024 01:05:55 +0200
Subject: [PATCH 02/27] update tests
---
.../src/main/java/com/PathInjection/SpringIoPathInjection.java | 2 --
1 file changed, 2 deletions(-)
diff --git a/java/ql/test/query-tests/security/CWE-022/semmle/tests/NewPathInjection/PathInjection/src/main/java/com/PathInjection/SpringIoPathInjection.java b/java/ql/test/query-tests/security/CWE-022/semmle/tests/NewPathInjection/PathInjection/src/main/java/com/PathInjection/SpringIoPathInjection.java
index b3568dbbabf..793b8725bed 100755
--- a/java/ql/test/query-tests/security/CWE-022/semmle/tests/NewPathInjection/PathInjection/src/main/java/com/PathInjection/SpringIoPathInjection.java
+++ b/java/ql/test/query-tests/security/CWE-022/semmle/tests/NewPathInjection/PathInjection/src/main/java/com/PathInjection/SpringIoPathInjection.java
@@ -37,8 +37,6 @@ public class SpringIoPathInjection {
new FileSystemResource(
FileSystems.getFileSystem(URI.create("file:///")), path); // $ PathInjection
- ResourceUtils.getFile(path); // summaryModel
- ResourceUtils.getFile(path); // summaryModel
FileSystemUtils.copyRecursively(filePath, filePath.resolve("/newPath")); // $ PathInjection
FileSystemUtils.copyRecursively(pathFile, pathFile); // $ PathInjection
FileSystemUtils.deleteRecursively(pathFile); // $ PathInjection
From 412472e9a4de6ddd561d53b4caeefc1c6344b7e6 Mon Sep 17 00:00:00 2001
From: am0o0 <77095239+am0o0@users.noreply.github.com>
Date: Sat, 8 Jun 2024 01:13:43 +0200
Subject: [PATCH 03/27] add zip4j
---
java/ql/lib/ext/experimental/zip4j.model.yml | 7 +++++++
1 file changed, 7 insertions(+)
create mode 100644 java/ql/lib/ext/experimental/zip4j.model.yml
diff --git a/java/ql/lib/ext/experimental/zip4j.model.yml b/java/ql/lib/ext/experimental/zip4j.model.yml
new file mode 100644
index 00000000000..f5e359b82ed
--- /dev/null
+++ b/java/ql/lib/ext/experimental/zip4j.model.yml
@@ -0,0 +1,7 @@
+extensions:
+ - addsTo:
+ pack: codeql/java-all
+ extensible: experimentalSinkModel
+ data:
+ - ["net.lingala.zip4j","ZipFile",true,"extractAll","(String)","","Argument[0]","path-injection","manual"]
+ - ["net.lingala.zip4j","ZipFile",true,"ZipFile","(String)","","Argument[0]","path-injection","manual"]
From 7e5f2e2a4826943b6c5c5a8344ec11cf0811a46d Mon Sep 17 00:00:00 2001
From: am0o0 <77095239+am0o0@users.noreply.github.com>
Date: Wed, 3 Jul 2024 08:55:12 +0200
Subject: [PATCH 04/27] experimentalSinkModel to sinkModel, remove one path
injection sink that already exist before
---
java/ql/lib/ext/experimental/s3-transfer-manager.model.yml | 2 +-
java/ql/lib/ext/experimental/spring-core.model.yml | 3 +--
java/ql/lib/ext/experimental/zip4j.model.yml | 2 +-
.../src/main/java/com/PathInjection/SpringIoPathInjection.java | 1 -
4 files changed, 3 insertions(+), 5 deletions(-)
diff --git a/java/ql/lib/ext/experimental/s3-transfer-manager.model.yml b/java/ql/lib/ext/experimental/s3-transfer-manager.model.yml
index fc66271b01a..8357414db3d 100644
--- a/java/ql/lib/ext/experimental/s3-transfer-manager.model.yml
+++ b/java/ql/lib/ext/experimental/s3-transfer-manager.model.yml
@@ -1,7 +1,7 @@
extensions:
- addsTo:
pack: codeql/java-all
- extensible: experimentalSinkModel
+ extensible: sinkModel
data:
- ["software.amazon.awssdk.transfer.s3.model","ResumableFileUpload",true,"serializeToFile","(Path)","","Argument[0]","path-injection","manual"]
- ["software.amazon.awssdk.transfer.s3.model","DownloadFileRequest$Builder",true,"destination","(Path)","","Argument[0]","path-injection","manual"]
diff --git a/java/ql/lib/ext/experimental/spring-core.model.yml b/java/ql/lib/ext/experimental/spring-core.model.yml
index 87e7a26f0bb..a4348650472 100644
--- a/java/ql/lib/ext/experimental/spring-core.model.yml
+++ b/java/ql/lib/ext/experimental/spring-core.model.yml
@@ -1,7 +1,7 @@
extensions:
- addsTo:
pack: codeql/java-all
- extensible: experimentalSinkModel
+ extensible: sinkModel
data:
- ["org.springframework.core.io","FileSystemResource",true,"FileSystemResource","(FileSystem,String)","","Argument[1]","path-injection","manual"]
- ["org.springframework.core.io","FileSystemResource",true,"FileSystemResource","(File)","","Argument[0]","path-injection","manual"]
@@ -23,5 +23,4 @@ extensions:
- ["org.springframework.util","FileSystemUtils",true,"deleteRecursively","(Path)","","Argument[0]","path-injection","manual"]
- ["org.springframework.util","ResourceUtils",true,"getFile","(String)","","Argument[0]","path-injection","manual"]
- ["org.springframework.util","FileCopyUtils",true,"copyToByteArray","(File)","","Argument[0]","path-injection","manual"]
- - ["org.springframework.util","FileCopyUtils",true,"copyToString","(Reader)","","Argument[0]","path-injection","manual"]
- ["org.springframework.util","FileSystemUtils",true,"copyRecursively","(File,File)","","Argument[0]","path-injection","manual"]
diff --git a/java/ql/lib/ext/experimental/zip4j.model.yml b/java/ql/lib/ext/experimental/zip4j.model.yml
index f5e359b82ed..d92b1380d20 100644
--- a/java/ql/lib/ext/experimental/zip4j.model.yml
+++ b/java/ql/lib/ext/experimental/zip4j.model.yml
@@ -1,7 +1,7 @@
extensions:
- addsTo:
pack: codeql/java-all
- extensible: experimentalSinkModel
+ extensible: sinkModel
data:
- ["net.lingala.zip4j","ZipFile",true,"extractAll","(String)","","Argument[0]","path-injection","manual"]
- ["net.lingala.zip4j","ZipFile",true,"ZipFile","(String)","","Argument[0]","path-injection","manual"]
diff --git a/java/ql/test/query-tests/security/CWE-022/semmle/tests/NewPathInjection/PathInjection/src/main/java/com/PathInjection/SpringIoPathInjection.java b/java/ql/test/query-tests/security/CWE-022/semmle/tests/NewPathInjection/PathInjection/src/main/java/com/PathInjection/SpringIoPathInjection.java
index 793b8725bed..eb4c0807345 100755
--- a/java/ql/test/query-tests/security/CWE-022/semmle/tests/NewPathInjection/PathInjection/src/main/java/com/PathInjection/SpringIoPathInjection.java
+++ b/java/ql/test/query-tests/security/CWE-022/semmle/tests/NewPathInjection/PathInjection/src/main/java/com/PathInjection/SpringIoPathInjection.java
@@ -43,6 +43,5 @@ public class SpringIoPathInjection {
FileSystemUtils.deleteRecursively(filePath); // $ PathInjection
FileCopyUtils.copy(pathFile, pathFile); // $ PathInjection
FileCopyUtils.copyToByteArray(pathFile); // $ PathInjection
- FileCopyUtils.copyToString(new FileReader("fa"));
}
}
From 9263977329a3a2346b9555667439176260d37f9c Mon Sep 17 00:00:00 2001
From: Tom Hvitved
Date: Wed, 3 Jul 2024 11:35:42 +0200
Subject: [PATCH 05/27] Ruby: Adopt shared SSA data-flow integration
---
.../ruby/controlflow/internal/Guards.qll | 11 +
ruby/ql/lib/codeql/ruby/dataflow/SSA.qll | 21 +-
.../dataflow/internal/DataFlowDispatch.qll | 3 +-
.../dataflow/internal/DataFlowPrivate.qll | 330 +++++++-----------
.../ruby/dataflow/internal/DataFlowPublic.qll | 78 +----
.../codeql/ruby/dataflow/internal/SsaImpl.qll | 191 ++++++----
.../internal/TaintTrackingPrivate.qll | 3 +-
7 files changed, 294 insertions(+), 343 deletions(-)
create mode 100644 ruby/ql/lib/codeql/ruby/controlflow/internal/Guards.qll
diff --git a/ruby/ql/lib/codeql/ruby/controlflow/internal/Guards.qll b/ruby/ql/lib/codeql/ruby/controlflow/internal/Guards.qll
new file mode 100644
index 00000000000..c240595161c
--- /dev/null
+++ b/ruby/ql/lib/codeql/ruby/controlflow/internal/Guards.qll
@@ -0,0 +1,11 @@
+private import codeql.ruby.CFG
+
+/** Holds if the guard `guard` controls block `bb` upon evaluating to `branch`. */
+pragma[nomagic]
+predicate guardControlsBlock(CfgNodes::AstCfgNode guard, BasicBlock bb, boolean branch) {
+ exists(ConditionBlock conditionBlock, SuccessorTypes::ConditionalSuccessor s |
+ guard = conditionBlock.getLastNode() and
+ s.getValue() = branch and
+ conditionBlock.controls(bb, s)
+ )
+}
diff --git a/ruby/ql/lib/codeql/ruby/dataflow/SSA.qll b/ruby/ql/lib/codeql/ruby/dataflow/SSA.qll
index f21dadb7c5a..07ce826d966 100644
--- a/ruby/ql/lib/codeql/ruby/dataflow/SSA.qll
+++ b/ruby/ql/lib/codeql/ruby/dataflow/SSA.qll
@@ -202,8 +202,17 @@ module Ssa {
final VariableWriteAccessCfgNode getWriteAccess() { result = write }
/**
- * Holds if this SSA definition represents a direct assignment of `value`
- * to the underlying variable.
+ * Holds if this SSA definition assigns `value` to the underlying variable.
+ *
+ * This is either a direct assignment, `x = value`, or an assignment via
+ * simple pattern matching
+ *
+ * ```rb
+ * case value
+ * in Foo => x then ...
+ * in y => then ...
+ * end
+ * ```
*/
predicate assigns(CfgNodes::ExprCfgNode value) {
exists(CfgNodes::ExprNodes::AssignExprCfgNode a, BasicBlock bb, int i |
@@ -211,6 +220,14 @@ module Ssa {
a = bb.getNode(i) and
value = a.getRhs()
)
+ or
+ exists(CfgNodes::ExprNodes::CaseExprCfgNode case, CfgNodes::AstCfgNode pattern |
+ case.getValue() = value and
+ pattern = case.getBranch(_).(CfgNodes::ExprNodes::InClauseCfgNode).getPattern()
+ |
+ this.getWriteAccess() =
+ [pattern, pattern.(CfgNodes::ExprNodes::AsPatternCfgNode).getVariableAccess()]
+ )
}
final override string toString() { result = write.toString() }
diff --git a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowDispatch.qll b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowDispatch.qll
index 94a6657c0a2..2e2713b3cc2 100644
--- a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowDispatch.qll
+++ b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowDispatch.qll
@@ -1093,8 +1093,7 @@ private module TrackSingletonMethodOnInstanceInput implements CallGraphConstruct
singletonMethodOnInstance(_, _, nodeFromPreExpr.getExpr())
)
|
- nodeFromPreExpr =
- LocalFlow::getParameterDefNode(p.getParameter()).getDefinitionExt().getARead()
+ nodeFromPreExpr = getParameterDef(p.getParameter()).getARead()
or
nodeFromPreExpr = p.(SelfParameterNodeImpl).getSelfDefinition().getARead()
)
diff --git a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowPrivate.qll b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowPrivate.qll
index c0bc6ac243d..e16e25ee213 100644
--- a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowPrivate.qll
+++ b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowPrivate.qll
@@ -72,134 +72,48 @@ CfgNodes::ExprCfgNode getAPostUpdateNodeForArg(Argument arg) {
not exists(getALastEvalNode(result))
}
-/** An SSA definition into which another SSA definition may flow. */
-class SsaInputDefinitionExt extends SsaImpl::DefinitionExt {
- SsaInputDefinitionExt() {
- this instanceof Ssa::PhiNode
+/** Gets the SSA definition node corresponding to parameter `p`. */
+pragma[nomagic]
+SsaImpl::DefinitionExt getParameterDef(NamedParameter p) {
+ exists(BasicBlock bb, int i |
+ bb.getNode(i).getAstNode() = p.getDefiningAccess() and
+ result.definesAt(_, bb, i, _)
+ )
+}
+
+/** Provides logic related to SSA. */
+module SsaFlow {
+ private module Impl = SsaImpl::DataFlowIntegration;
+
+ private ParameterNodeImpl toParameterNode(SsaImpl::ParameterExt p) {
+ result = TNormalParameterNode(p.asParameter())
or
- this instanceof SsaImpl::PhiReadNode
+ result = TSelfMethodParameterNode(p.asMethodSelf())
+ or
+ result = TSelfToplevelParameterNode(p.asToplevelSelf())
}
- predicate hasInputFromBlock(SsaImpl::DefinitionExt def, BasicBlock bb, int i, BasicBlock input) {
- SsaImpl::lastRefBeforeRedefExt(def, bb, i, input, this)
+ Impl::Node asNode(Node n) {
+ n = TSsaNode(result)
+ or
+ result.(Impl::ExprNode).getExpr() = n.asExpr()
+ or
+ result.(Impl::ExprPostUpdateNode).getExpr() = n.(PostUpdateNode).getPreUpdateNode().asExpr()
+ or
+ n = toParameterNode(result.(Impl::ParameterNode).getParameter())
+ }
+
+ predicate localFlowStep(SsaImpl::DefinitionExt def, Node nodeFrom, Node nodeTo, boolean isUseStep) {
+ Impl::localFlowStep(def, asNode(nodeFrom), asNode(nodeTo), isUseStep)
+ }
+
+ predicate localMustFlowStep(SsaImpl::DefinitionExt def, Node nodeFrom, Node nodeTo) {
+ Impl::localMustFlowStep(def, asNode(nodeFrom), asNode(nodeTo))
}
}
/** Provides predicates related to local data flow. */
module LocalFlow {
- /**
- * Holds if `nodeFrom` is a node for SSA definition `def`, which can reach `next`.
- */
- pragma[nomagic]
- private predicate localFlowSsaInputFromDef(
- SsaDefinitionExtNode nodeFrom, SsaImpl::DefinitionExt def, SsaInputNode nodeTo
- ) {
- exists(BasicBlock bb, int i, BasicBlock input, SsaInputDefinitionExt next |
- next.hasInputFromBlock(def, bb, i, input) and
- def = nodeFrom.getDefinitionExt() and
- def.definesAt(_, bb, i, _) and
- nodeTo = TSsaInputNode(next, input)
- )
- }
-
- /**
- * Holds if `nodeFrom` is a last read of SSA definition `def`, which
- * can reach `nodeTo`.
- */
- pragma[nomagic]
- predicate localFlowSsaInputFromRead(SsaImpl::DefinitionExt def, Node nodeFrom, SsaInputNode nodeTo) {
- exists(
- BasicBlock bb, int i, CfgNodes::ExprCfgNode exprFrom, BasicBlock input,
- SsaInputDefinitionExt next
- |
- next.hasInputFromBlock(def, bb, i, input) and
- exprFrom = bb.getNode(i) and
- exprFrom.getExpr() instanceof VariableReadAccess and
- exprFrom = [nodeFrom.asExpr(), nodeFrom.(PostUpdateNodeImpl).getPreUpdateNode().asExpr()] and
- nodeTo = TSsaInputNode(next, input)
- )
- }
-
- /** Gets the SSA definition node corresponding to parameter `p`. */
- pragma[nomagic]
- SsaDefinitionExtNode getParameterDefNode(NamedParameter p) {
- exists(BasicBlock bb, int i |
- bb.getNode(i).getAstNode() = p.getDefiningAccess() and
- result.getDefinitionExt().definesAt(_, bb, i, _)
- )
- }
-
- /**
- * Holds if `nodeFrom` is a parameter node, and `nodeTo` is a corresponding SSA node.
- */
- pragma[nomagic]
- predicate localFlowSsaParamInput(ParameterNodeImpl nodeFrom, SsaDefinitionExtNode nodeTo) {
- nodeTo = getParameterDefNode(nodeFrom.getParameter())
- or
- nodeTo.getDefinitionExt() = nodeFrom.(SelfParameterNodeImpl).getSelfDefinition()
- }
-
- /**
- * Holds if there is a local use-use flow step from `nodeFrom` to `nodeTo`
- * involving SSA definition `def`.
- */
- predicate localSsaFlowStepUseUse(SsaImpl::DefinitionExt def, Node nodeFrom, Node nodeTo) {
- SsaImpl::adjacentReadPairExt(def, nodeFrom.asExpr(), nodeTo.asExpr())
- }
-
- /**
- * Holds if SSA definition `def` assigns `value` to the underlying variable.
- *
- * This is either a direct assignment, `x = value`, or an assignment via
- * simple pattern matching
- *
- * ```rb
- * case value
- * in Foo => x then ...
- * in y => then ...
- * end
- * ```
- */
- predicate ssaDefAssigns(Ssa::WriteDefinition def, CfgNodes::ExprCfgNode value) {
- def.assigns(value)
- or
- exists(CfgNodes::ExprNodes::CaseExprCfgNode case, CfgNodes::AstCfgNode pattern |
- case.getValue() = value and
- pattern = case.getBranch(_).(CfgNodes::ExprNodes::InClauseCfgNode).getPattern()
- |
- def.getWriteAccess() = pattern
- or
- def.getWriteAccess() = pattern.(CfgNodes::ExprNodes::AsPatternCfgNode).getVariableAccess()
- )
- }
-
- /**
- * Holds if there is a local flow step from `nodeFrom` to `nodeTo` involving
- * SSA definition `def`.
- */
- pragma[nomagic]
- predicate localSsaFlowStep(SsaImpl::DefinitionExt def, Node nodeFrom, Node nodeTo) {
- // Flow from assignment into SSA definition
- ssaDefAssigns(def, nodeFrom.asExpr()) and
- nodeTo.(SsaDefinitionExtNode).getDefinitionExt() = def
- or
- // Flow from SSA definition to first read
- def = nodeFrom.(SsaDefinitionExtNode).getDefinitionExt() and
- SsaImpl::firstReadExt(def, nodeTo.asExpr())
- or
- // Flow from post-update read to next read
- localSsaFlowStepUseUse(def, nodeFrom.(PostUpdateNodeImpl).getPreUpdateNode(), nodeTo)
- or
- // Flow into phi (read) SSA definition node from def
- localFlowSsaInputFromDef(nodeFrom, def, nodeTo)
- or
- nodeTo.(SsaDefinitionExtNode).getDefinitionExt() = def and
- def = nodeFrom.(SsaInputNode).getDefinitionExt()
- or
- localFlowSsaParamInput(nodeFrom, nodeTo) and
- def = nodeTo.(SsaDefinitionExtNode).getDefinitionExt()
- }
-
pragma[nomagic]
predicate localFlowStepCommon(Node nodeFrom, Node nodeTo) {
nodeFrom.asExpr() = nodeTo.asExpr().(CfgNodes::ExprNodes::BlockArgumentCfgNode).getValue()
@@ -240,7 +154,7 @@ module LocalFlow {
p.(KeywordParameter).getDefaultValue() = nodeFrom.asExpr().getExpr()
)
or
- nodeTo.(BlockArgumentNode).getParameterNode(true) = nodeFrom
+ nodeTo.(ImplicitBlockArgumentNode).getParameterNode(true) = nodeFrom
}
predicate flowSummaryLocalStep(
@@ -253,21 +167,13 @@ module LocalFlow {
}
predicate localMustFlowStep(Node node1, Node node2) {
- LocalFlow::localFlowSsaParamInput(node1, node2)
- or
- exists(SsaImpl::Definition def |
- def.(Ssa::WriteDefinition).assigns(node1.asExpr()) and
- node2.(SsaDefinitionExtNode).getDefinitionExt() = def
- or
- def = node1.(SsaDefinitionExtNode).getDefinitionExt() and
- node2.asExpr() = SsaImpl::getARead(def)
- )
+ SsaFlow::localMustFlowStep(_, node1, node2)
or
node1.asExpr() = node2.asExpr().(CfgNodes::ExprNodes::AssignExprCfgNode).getRhs()
or
node1.asExpr() = node2.asExpr().(CfgNodes::ExprNodes::BlockArgumentCfgNode).getValue()
or
- node1 = node2.(BlockArgumentNode).getParameterNode(true)
+ node1 = node2.(ImplicitBlockArgumentNode).getParameterNode(true)
or
node1 =
unique(FlowSummaryNode n1 |
@@ -347,7 +253,7 @@ module VariableCapture {
or
exists(Ssa::Definition def |
def.getARead() = e2 and
- LocalFlow::ssaDefAssigns(def.getAnUltimateDefinition(), e1)
+ def.getAnUltimateDefinition().(Ssa::WriteDefinition).assigns(e1)
)
}
@@ -538,23 +444,14 @@ private module Cached {
newtype TNode =
TExprNode(CfgNodes::ExprCfgNode n) or
TReturningNode(CfgNodes::ReturningCfgNode n) { exists(n.getReturnedValueNode()) } or
- TSsaDefinitionExtNode(SsaImpl::DefinitionExt def) or
- TSsaInputNode(SsaInputDefinitionExt def, BasicBlock input) {
- def.hasInputFromBlock(_, _, _, input)
- } or
+ TSsaNode(SsaImpl::DataFlowIntegration::SsaNode node) or
TCapturedVariableNode(VariableCapture::CapturedVariable v) or
- TNormalParameterNode(Parameter p) {
- p instanceof SimpleParameter or
- p instanceof OptionalParameter or
- p instanceof KeywordParameter or
- p instanceof HashSplatParameter or
- p instanceof SplatParameter
- } or
+ TNormalParameterNode(SsaImpl::NormalParameter p) or
TSelfMethodParameterNode(MethodBase m) or
TSelfToplevelParameterNode(Toplevel t) or
TLambdaSelfReferenceNode(Callable c) { lambdaCreationExpr(_, _, c) } or
- TBlockParameterNode(MethodBase m) or
- TBlockArgumentNode(CfgNodes::ExprNodes::CallCfgNode yield) {
+ TImplicitBlockParameterNode(MethodBase m) { not m.getAParameter() instanceof BlockParameter } or
+ TImplicitBlockArgumentNode(CfgNodes::ExprNodes::CallCfgNode yield) {
yield = any(BlockParameterNode b).getAYieldCall()
} or
TSynthHashSplatParameterNode(DataFlowCallable c) {
@@ -600,7 +497,7 @@ private module Cached {
class TSelfParameterNode = TSelfMethodParameterNode or TSelfToplevelParameterNode;
class TSourceParameterNode =
- TNormalParameterNode or TBlockParameterNode or TSelfParameterNode or
+ TNormalParameterNode or TImplicitBlockParameterNode or TSelfParameterNode or
TSynthHashSplatParameterNode or TSynthSplatParameterNode;
cached
@@ -618,16 +515,13 @@ private module Cached {
(
LocalFlow::localFlowStepCommon(nodeFrom, nodeTo)
or
- exists(SsaImpl::DefinitionExt def |
+ exists(SsaImpl::DefinitionExt def, boolean isUseStep |
+ SsaFlow::localFlowStep(def, nodeFrom, nodeTo, isUseStep) and
// captured variables are handled by the shared `VariableCapture` library
not def instanceof VariableCapture::CapturedSsaDefinitionExt
|
- LocalFlow::localSsaFlowStep(def, nodeFrom, nodeTo)
+ isUseStep = false
or
- LocalFlow::localSsaFlowStepUseUse(def, nodeFrom, nodeTo) and
- not FlowSummaryImpl::Private::Steps::prohibitsUseUseFlow(nodeFrom, _)
- or
- LocalFlow::localFlowSsaInputFromRead(def, nodeFrom, nodeTo) and
not FlowSummaryImpl::Private::Steps::prohibitsUseUseFlow(nodeFrom, _)
)
or
@@ -643,11 +537,7 @@ private module Cached {
predicate localFlowStepImpl(Node nodeFrom, Node nodeTo) {
LocalFlow::localFlowStepCommon(nodeFrom, nodeTo)
or
- LocalFlow::localSsaFlowStep(_, nodeFrom, nodeTo)
- or
- LocalFlow::localSsaFlowStepUseUse(_, nodeFrom, nodeTo)
- or
- LocalFlow::localFlowSsaInputFromRead(_, nodeFrom, nodeTo)
+ SsaFlow::localFlowStep(_, nodeFrom, nodeTo, _)
or
// Simple flow through library code is included in the exposed local
// step relation, even though flow is technically inter-procedural
@@ -661,11 +551,7 @@ private module Cached {
predicate localFlowStepTypeTracker(Node nodeFrom, Node nodeTo) {
LocalFlow::localFlowStepCommon(nodeFrom, nodeTo)
or
- LocalFlow::localSsaFlowStep(_, nodeFrom, nodeTo)
- or
- LocalFlow::localSsaFlowStepUseUse(_, nodeFrom, nodeTo)
- or
- LocalFlow::localFlowSsaInputFromRead(_, nodeFrom, nodeTo)
+ SsaFlow::localFlowStep(_, nodeFrom, nodeTo, _)
or
VariableCapture::flowInsensitiveStep(nodeFrom, nodeTo)
or
@@ -675,7 +561,8 @@ private module Cached {
/** Holds if `n` wraps an SSA definition without ingoing flow. */
private predicate entrySsaDefinition(SsaDefinitionExtNode n) {
- n.getDefinitionExt() = any(SsaImpl::WriteDefinition def | not LocalFlow::ssaDefAssigns(def, _))
+ n.getDefinitionExt() =
+ any(SsaImpl::WriteDefinition def | not def.(Ssa::WriteDefinition).assigns(_))
}
pragma[nomagic]
@@ -715,13 +602,15 @@ private module Cached {
// Ensure all entry SSA definitions are local sources, except those that correspond
// to parameters (which are themselves local sources)
entrySsaDefinition(n) and
- not LocalFlow::localFlowSsaParamInput(_, n)
+ not exists(SsaImpl::ParameterExt p |
+ p.isInitializedBy(n.(SsaDefinitionExtNode).getDefinitionExt())
+ )
or
isStoreTargetNode(n)
or
TypeTrackingInput::loadStep(_, n, _)
or
- n instanceof BlockArgumentNode
+ n instanceof ImplicitBlockArgumentNode
}
cached
@@ -825,11 +714,7 @@ import Cached
/** Holds if `n` should be hidden from path explanations. */
predicate nodeIsHidden(Node n) {
- n.(SsaDefinitionExtNode).isHidden()
- or
- n instanceof SsaInputNode
- or
- n = LocalFlow::getParameterDefNode(_)
+ n.(SsaNode).isHidden()
or
exists(AstNode desug |
isDesugarNode(desug) and
@@ -861,33 +746,55 @@ predicate nodeIsHidden(Node n) {
or
n instanceof CaptureNode
or
- n instanceof BlockArgumentNode
+ n instanceof ImplicitBlockArgumentNode
}
-/** An SSA definition, viewed as a node in a data flow graph. */
-class SsaDefinitionExtNode extends NodeImpl, TSsaDefinitionExtNode {
+/** An SSA node. */
+abstract class SsaNode extends NodeImpl, TSsaNode {
+ SsaImpl::DataFlowIntegration::SsaNode node;
SsaImpl::DefinitionExt def;
- SsaDefinitionExtNode() { this = TSsaDefinitionExtNode(def) }
+ SsaNode() {
+ this = TSsaNode(node) and
+ def = node.getDefinitionExt()
+ }
- /** Gets the underlying SSA definition. */
SsaImpl::DefinitionExt getDefinitionExt() { result = def }
+ /** Holds if this node should be hidden from path explanations. */
+ abstract predicate isHidden();
+
+ override Location getLocationImpl() { result = node.getLocation() }
+
+ override string toStringImpl() { result = node.toString() }
+}
+
+/** An (extended) SSA definition, viewed as a node in a data flow graph. */
+class SsaDefinitionExtNode extends SsaNode {
+ override SsaImpl::DataFlowIntegration::SsaDefinitionExtNode node;
+
/** Gets the underlying variable. */
Variable getVariable() { result = def.getSourceVariable() }
- /** Holds if this node should be hidden from path explanations. */
- predicate isHidden() {
+ override predicate isHidden() {
not def instanceof Ssa::WriteDefinition
or
isDesugarNode(def.(Ssa::WriteDefinition).getWriteAccess().getExpr())
+ or
+ def = getParameterDef(_)
}
override CfgScope getCfgScope() { result = def.getBasicBlock().getScope() }
+}
- override Location getLocationImpl() { result = def.getLocation() }
+class SsaDefinitionNodeImpl extends SsaDefinitionExtNode {
+ Ssa::Definition ssaDef;
- override string toStringImpl() { result = def.toString() }
+ SsaDefinitionNodeImpl() { ssaDef = def }
+
+ override Location getLocationImpl() { result = ssaDef.getLocation() }
+
+ override string toStringImpl() { result = ssaDef.toString() }
}
/**
@@ -925,20 +832,12 @@ class SsaDefinitionExtNode extends NodeImpl, TSsaDefinitionExtNode {
*
* both inputs into the phi read node after the outer condition are guarded.
*/
-class SsaInputNode extends NodeImpl, TSsaInputNode {
- SsaImpl::DefinitionExt def;
- BasicBlock input;
+class SsaInputNode extends SsaNode {
+ override SsaImpl::DataFlowIntegration::SsaInputNode node;
- SsaInputNode() { this = TSsaInputNode(def, input) }
+ override predicate isHidden() { any() }
- /** Gets the underlying SSA definition. */
- SsaImpl::DefinitionExt getDefinitionExt() { result = def }
-
- override CfgScope getCfgScope() { result = input.getScope() }
-
- override Location getLocationImpl() { result = input.getLastNode().getLocation() }
-
- override string toStringImpl() { result = "[input] " + def }
+ override CfgScope getCfgScope() { result = node.getDefinitionExt().getBasicBlock().getScope() }
}
/** An SSA definition for a `self` variable. */
@@ -1026,7 +925,7 @@ private module ParameterNodes {
* flow graph.
*/
class NormalParameterNode extends ParameterNodeImpl, TNormalParameterNode {
- private Parameter parameter;
+ Parameter parameter;
NormalParameterNode() { this = TNormalParameterNode(parameter) }
@@ -1055,6 +954,9 @@ private module ParameterNodes {
// There are no positional parameters after the splat
not exists(SimpleParameter p, int m | m > n | p = callable.getParameter(m))
)
+ or
+ parameter = callable.getAParameter().(BlockParameter) and
+ pos.isBlock()
)
}
@@ -1162,24 +1064,32 @@ private module ParameterNodes {
* The value of a block parameter at function entry, viewed as a node in a data
* flow graph.
*/
- class BlockParameterNode extends ParameterNodeImpl, TBlockParameterNode {
- private MethodBase method;
-
- BlockParameterNode() { this = TBlockParameterNode(method) }
-
- final MethodBase getMethod() { result = method }
-
- override Parameter getParameter() {
- result = method.getAParameter() and result instanceof BlockParameter
- }
-
- override predicate isParameterOf(DataFlowCallable c, ParameterPosition pos) {
- c.asCfgScope() = method and pos.isBlock()
- }
+ abstract class BlockParameterNode extends ParameterNodeImpl {
+ abstract MethodBase getMethod();
CfgNodes::ExprNodes::CallCfgNode getAYieldCall() {
this.getMethod() = result.getExpr().(YieldCall).getEnclosingMethod()
}
+ }
+
+ private class ExplicitBlockParameterNode extends BlockParameterNode, NormalParameterNode {
+ override BlockParameter parameter;
+
+ final override MethodBase getMethod() { result.getAParameter() = parameter }
+ }
+
+ private class ImplicitBlockParameterNode extends BlockParameterNode, TImplicitBlockParameterNode {
+ private MethodBase method;
+
+ ImplicitBlockParameterNode() { this = TImplicitBlockParameterNode(method) }
+
+ final override MethodBase getMethod() { result = method }
+
+ override Parameter getParameter() { none() }
+
+ override predicate isParameterOf(DataFlowCallable c, ParameterPosition pos) {
+ c.asCfgScope() = method and pos.isBlock()
+ }
override CfgScope getCfgScope() { result = method }
@@ -1452,10 +1362,10 @@ module ArgumentNodes {
}
}
- class BlockArgumentNode extends NodeImpl, ArgumentNode, TBlockArgumentNode {
+ class ImplicitBlockArgumentNode extends NodeImpl, ArgumentNode, TImplicitBlockArgumentNode {
CfgNodes::ExprNodes::CallCfgNode yield;
- BlockArgumentNode() { this = TBlockArgumentNode(yield) }
+ ImplicitBlockArgumentNode() { this = TImplicitBlockArgumentNode(yield) }
CfgNodes::ExprNodes::CallCfgNode getYieldCall() { result = yield }
@@ -1893,7 +1803,7 @@ predicate jumpStep(Node pred, Node succ) {
or
any(AdditionalJumpStep s).step(pred, succ)
or
- succ.(BlockArgumentNode).getParameterNode(false) = pred
+ succ.(ImplicitBlockArgumentNode).getParameterNode(false) = pred
}
private ContentSet getArrayContent(int n) {
@@ -2241,7 +2151,7 @@ private predicate lambdaCallExpr(
*/
predicate lambdaSourceCall(CfgNodes::ExprNodes::CallCfgNode call, LambdaCallKind kind, Node receiver) {
kind = TYieldCallKind() and
- call = receiver.(BlockArgumentNode).getYieldCall()
+ call = receiver.(ImplicitBlockArgumentNode).getYieldCall()
or
kind = TLambdaCallKind() and
lambdaCallExpr(call, receiver.asExpr())
diff --git a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowPublic.qll b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowPublic.qll
index d4e07e0653e..33ac82448a9 100644
--- a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowPublic.qll
+++ b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowPublic.qll
@@ -6,6 +6,7 @@ private import codeql.ruby.typetracking.internal.TypeTrackingImpl
private import codeql.ruby.dataflow.SSA
private import FlowSummaryImpl as FlowSummaryImpl
private import codeql.ruby.ApiGraphs
+private import SsaImpl as SsaImpl
/**
* An element, viewed as a node in a data flow graph. Either an expression
@@ -360,16 +361,12 @@ class PostUpdateNode extends Node {
}
/** An SSA definition, viewed as a node in a data flow graph. */
-class SsaDefinitionNode extends Node instanceof SsaDefinitionExtNode {
- Ssa::Definition def;
-
- SsaDefinitionNode() { this = TSsaDefinitionExtNode(def) }
-
+class SsaDefinitionNode extends Node instanceof SsaDefinitionNodeImpl {
/** Gets the underlying SSA definition. */
- Ssa::Definition getDefinition() { result = def }
+ Ssa::Definition getDefinition() { result = super.getDefinitionExt() }
/** Gets the underlying variable. */
- Variable getVariable() { result = def.getSourceVariable() }
+ Variable getVariable() { result = this.getDefinition().getSourceVariable() }
}
cached
@@ -870,56 +867,7 @@ private predicate sameSourceVariable(Ssa::Definition def1, Ssa::Definition def2)
* in data flow and taint tracking.
*/
module BarrierGuard {
- private import SsaImpl as SsaImpl
-
- pragma[nomagic]
- private predicate guardChecksSsaDef(CfgNodes::AstCfgNode g, boolean branch, Ssa::Definition def) {
- guardChecks(g, def.getARead(), branch)
- }
-
- pragma[nomagic]
- private predicate guardControlsSsaRead(
- CfgNodes::AstCfgNode g, boolean branch, Ssa::Definition def, Node n
- ) {
- def.getARead() = n.asExpr() and
- guardControlsBlock(g, n.asExpr().getBasicBlock(), branch)
- }
-
- pragma[nomagic]
- private predicate guardControlsPhiInput(
- CfgNodes::AstCfgNode g, boolean branch, Ssa::Definition def, BasicBlock input,
- SsaInputDefinitionExt phi
- ) {
- phi.hasInputFromBlock(def, _, _, input) and
- (
- guardControlsBlock(g, input, branch)
- or
- exists(SuccessorTypes::ConditionalSuccessor s |
- g = input.getLastNode() and
- s.getValue() = branch and
- input.getASuccessor(s) = phi.getBasicBlock()
- )
- )
- }
-
- /** Gets a node that is safely guarded by the given guard check. */
- Node getABarrierNode() {
- exists(CfgNodes::AstCfgNode g, boolean branch, Ssa::Definition def |
- guardChecksSsaDef(g, branch, def) and
- guardControlsSsaRead(g, branch, def, result)
- )
- or
- exists(
- CfgNodes::AstCfgNode g, boolean branch, Ssa::Definition def, BasicBlock input,
- SsaInputDefinitionExt phi
- |
- guardChecksSsaDef(g, branch, def) and
- guardControlsPhiInput(g, branch, def, input, phi) and
- result = TSsaInputNode(phi, input)
- )
- or
- result.asExpr() = getAMaybeGuardedCapturedDef().getARead()
- }
+ private import codeql.ruby.controlflow.internal.Guards
/**
* Gets an implicit entry definition for a captured variable that
@@ -928,6 +876,7 @@ module BarrierGuard {
* This is restricted to calls where the variable is captured inside a
* block.
*/
+ pragma[nomagic]
private Ssa::CapturedEntryDefinition getAMaybeGuardedCapturedDef() {
exists(
CfgNodes::ExprCfgNode g, boolean branch, CfgNodes::ExprCfgNode testedNode,
@@ -940,15 +889,14 @@ module BarrierGuard {
sameSourceVariable(def, result)
)
}
-}
-/** Holds if the guard `guard` controls block `bb` upon evaluating to `branch`. */
-private predicate guardControlsBlock(CfgNodes::AstCfgNode guard, BasicBlock bb, boolean branch) {
- exists(ConditionBlock conditionBlock, SuccessorTypes::ConditionalSuccessor s |
- guard = conditionBlock.getLastNode() and
- s.getValue() = branch and
- conditionBlock.controls(bb, s)
- )
+ /** Gets a node that is safely guarded by the given guard check. */
+ Node getABarrierNode() {
+ SsaFlow::asNode(result) =
+ SsaImpl::DataFlowIntegration::BarrierGuard::getABarrierNode()
+ or
+ result.asExpr() = getAMaybeGuardedCapturedDef().getARead()
+ }
}
/**
diff --git a/ruby/ql/lib/codeql/ruby/dataflow/internal/SsaImpl.qll b/ruby/ql/lib/codeql/ruby/dataflow/internal/SsaImpl.qll
index 8824d081308..bc7a9cc0eb1 100644
--- a/ruby/ql/lib/codeql/ruby/dataflow/internal/SsaImpl.qll
+++ b/ruby/ql/lib/codeql/ruby/dataflow/internal/SsaImpl.qll
@@ -6,7 +6,7 @@ private import codeql.ruby.dataflow.SSA
private import codeql.ruby.ast.Variable
private import Cfg::CfgNodes::ExprNodes
-private module SsaInput implements SsaImplCommon::InputSig {
+module SsaInput implements SsaImplCommon::InputSig {
private import codeql.ruby.controlflow.ControlFlowGraph as Cfg
private import codeql.ruby.controlflow.BasicBlocks as BasicBlocks
@@ -65,7 +65,7 @@ private module SsaInput implements SsaImplCommon::InputSig {
}
}
-private import SsaImplCommon::Make as Impl
+import SsaImplCommon::Make as Impl
class Definition = Impl::Definition;
@@ -283,15 +283,6 @@ private predicate adjacentDefSkipUncertainReads(
SsaInput::variableRead(bb2, i2, _, true)
}
-/** Same as `adjacentDefReadExt`, but skips uncertain reads. */
-pragma[nomagic]
-private predicate adjacentDefSkipUncertainReadsExt(
- DefinitionExt def, SsaInput::BasicBlock bb1, int i1, SsaInput::BasicBlock bb2, int i2
-) {
- adjacentDefReachesReadExt(def, bb1, i1, bb2, i2) and
- SsaInput::variableRead(bb2, i2, _, true)
-}
-
private predicate adjacentDefReachesUncertainReadExt(
DefinitionExt def, SsaInput::BasicBlock bb1, int i1, SsaInput::BasicBlock bb2, int i2
) {
@@ -393,19 +384,6 @@ private module Cached {
)
}
- /**
- * Holds if the value defined at SSA definition `def` can reach a read at `read`,
- * without passing through any other non-pseudo read.
- */
- cached
- predicate firstReadExt(DefinitionExt def, VariableReadAccessCfgNode read) {
- exists(Cfg::BasicBlock bb1, int i1, Cfg::BasicBlock bb2, int i2 |
- def.definesAt(_, bb1, i1, _) and
- adjacentDefSkipUncertainReadsExt(def, bb1, i1, bb2, i2) and
- read = bb2.getNode(i2)
- )
- }
-
/**
* Holds if the read at `read2` is a read of the same SSA definition `def`
* as the read at `read1`, and `read2` can be reached from `read1` without
@@ -423,23 +401,6 @@ private module Cached {
)
}
- /**
- * Holds if the read at `read2` is a read of the same SSA definition `def`
- * as the read at `read1`, and `read2` can be reached from `read1` without
- * passing through another non-pseudo read.
- */
- cached
- predicate adjacentReadPairExt(
- DefinitionExt def, VariableReadAccessCfgNode read1, VariableReadAccessCfgNode read2
- ) {
- exists(Cfg::BasicBlock bb1, int i1, Cfg::BasicBlock bb2, int i2 |
- read1 = bb1.getNode(i1) and
- variableReadActual(bb1, i1, _) and
- adjacentDefSkipUncertainReadsExt(def, bb1, i1, bb2, i2) and
- read2 = bb2.getNode(i2)
- )
- }
-
/**
* Holds if the read of `def` at `read` may be a last read. That is, `read`
* can either reach another definition of the underlying source variable or
@@ -454,32 +415,42 @@ private module Cached {
)
}
- /**
- * Holds if the reference to `def` at index `i` in basic block `bb` can reach
- * another definition `next` of the same underlying source variable, without
- * passing through another write or non-pseudo read.
- *
- * The reference is either a read of `def` or `def` itself.
- */
- cached
- predicate lastRefBeforeRedefExt(
- DefinitionExt def, Cfg::BasicBlock bb, int i, Cfg::BasicBlock input, DefinitionExt next
- ) {
- exists(LocalVariable v |
- Impl::lastRefRedefExt(def, v, bb, i, input, next) and
- not SsaInput::variableRead(bb, i, v, false)
- )
- or
- exists(SsaInput::BasicBlock bb0, int i0 |
- Impl::lastRefRedefExt(def, _, bb0, i0, input, next) and
- adjacentDefReachesUncertainReadExt(def, bb, i, bb0, i0)
- )
- }
-
cached
Definition uncertainWriteDefinitionInput(UncertainWriteDefinition def) {
Impl::uncertainWriteDefinitionInput(def, result)
}
+
+ cached
+ module DataFlowIntegration {
+ import DataFlowIntegrationImpl
+
+ cached
+ predicate localFlowStep(DefinitionExt def, Node nodeFrom, Node nodeTo, boolean isUseStep) {
+ DataFlowIntegrationImpl::localFlowStep(def, nodeFrom, nodeTo, isUseStep)
+ }
+
+ cached
+ predicate localMustFlowStep(DefinitionExt def, Node nodeFrom, Node nodeTo) {
+ DataFlowIntegrationImpl::localMustFlowStep(def, nodeFrom, nodeTo)
+ }
+
+ signature predicate guardChecksSig(Cfg::CfgNodes::AstCfgNode g, Cfg::CfgNode e, boolean branch);
+
+ cached // nothing is actually cached
+ module BarrierGuard {
+ private predicate guardChecksAdjTypes(
+ DataFlowIntegrationInput::Guard g, DataFlowIntegrationInput::Expr e, boolean branch
+ ) {
+ guardChecks(g, e, branch)
+ }
+
+ private Node getABarrierNodeImpl() {
+ result = DataFlowIntegrationImpl::BarrierGuard::getABarrierNode()
+ }
+
+ predicate getABarrierNode = getABarrierNodeImpl/0;
+ }
+ }
}
import Cached
@@ -510,3 +481,97 @@ class PhiReadNode extends DefinitionExt, Impl::PhiReadNode {
override Location getLocation() { result = Impl::PhiReadNode.super.getLocation() }
}
+
+class NormalParameter extends Parameter {
+ NormalParameter() {
+ this instanceof SimpleParameter or
+ this instanceof OptionalParameter or
+ this instanceof KeywordParameter or
+ this instanceof HashSplatParameter or
+ this instanceof SplatParameter or
+ this instanceof BlockParameter
+ }
+}
+
+/** Gets the SSA definition node corresponding to parameter `p`. */
+pragma[nomagic]
+DefinitionExt getParameterDef(NamedParameter p) {
+ exists(Cfg::BasicBlock bb, int i |
+ bb.getNode(i).getAstNode() = p.getDefiningAccess() and
+ result.definesAt(_, bb, i, _)
+ )
+}
+
+private newtype TParameterExt =
+ TNormalParameter(NormalParameter p) or
+ TSelfMethodParameter(MethodBase m) or
+ TSelfToplevelParameter(Toplevel t)
+
+/** A normal parameter or an implicit `self` parameter. */
+class ParameterExt extends TParameterExt {
+ NormalParameter asParameter() { this = TNormalParameter(result) }
+
+ MethodBase asMethodSelf() { this = TSelfMethodParameter(result) }
+
+ Toplevel asToplevelSelf() { this = TSelfToplevelParameter(result) }
+
+ predicate isInitializedBy(WriteDefinition def) {
+ def = getParameterDef(this.asParameter())
+ or
+ def.(Ssa::SelfDefinition).getSourceVariable().getDeclaringScope() =
+ [this.asMethodSelf().(Scope), this.asToplevelSelf()]
+ }
+
+ string toString() {
+ result =
+ [
+ this.asParameter().toString(), this.asMethodSelf().toString(),
+ this.asToplevelSelf().toString()
+ ]
+ }
+
+ Location getLocation() {
+ result =
+ [
+ this.asParameter().getLocation(), this.asMethodSelf().getLocation(),
+ this.asToplevelSelf().getLocation()
+ ]
+ }
+}
+
+private module DataFlowIntegrationInput implements Impl::DataFlowIntegrationInputSig {
+ private import codeql.ruby.controlflow.internal.Guards as Guards
+
+ class Parameter = ParameterExt;
+
+ class Expr extends Cfg::CfgNodes::ExprCfgNode {
+ predicate hasCfgNode(SsaInput::BasicBlock bb, int i) { this = bb.getNode(i) }
+ }
+
+ Expr getARead(Definition def) { result = Cached::getARead(def) }
+
+ predicate ssaDefAssigns(WriteDefinition def, Expr value) {
+ def.(Ssa::WriteDefinition).assigns(value)
+ }
+
+ predicate ssaDefInitializesParam(WriteDefinition def, Parameter p) { p.isInitializedBy(def) }
+
+ class Guard extends Cfg::CfgNodes::AstCfgNode {
+ predicate hasCfgNode(SsaInput::BasicBlock bb, int i) { this = bb.getNode(i) }
+ }
+
+ /** Holds if the guard `guard` controls block `bb` upon evaluating to `branch`. */
+ predicate guardControlsBlock(Guard guard, SsaInput::BasicBlock bb, boolean branch) {
+ Guards::guardControlsBlock(guard, bb, branch)
+ }
+
+ /** Gets an immediate conditional successor of basic block `bb`, if any. */
+ SsaInput::BasicBlock getAConditionalBasicBlockSuccessor(SsaInput::BasicBlock bb, boolean branch) {
+ exists(Cfg::SuccessorTypes::ConditionalSuccessor s |
+ result = bb.getASuccessor(s) and
+ s.getValue() = branch
+ )
+ }
+}
+
+private module DataFlowIntegrationImpl = Impl::DataFlowIntegration;
diff --git a/ruby/ql/lib/codeql/ruby/dataflow/internal/TaintTrackingPrivate.qll b/ruby/ql/lib/codeql/ruby/dataflow/internal/TaintTrackingPrivate.qll
index 903c8b562e7..565fea34dbc 100644
--- a/ruby/ql/lib/codeql/ruby/dataflow/internal/TaintTrackingPrivate.qll
+++ b/ruby/ql/lib/codeql/ruby/dataflow/internal/TaintTrackingPrivate.qll
@@ -5,6 +5,7 @@ private import codeql.ruby.CFG
private import codeql.ruby.DataFlow
private import FlowSummaryImpl as FlowSummaryImpl
private import codeql.ruby.dataflow.SSA
+private import SsaImpl as SsaImpl
/**
* Holds if `node` should be a sanitizer in all global taint flow configurations
@@ -89,7 +90,7 @@ private module Cached {
clause = case.getBranch(_) and
def = nodeTo.(SsaDefinitionExtNode).getDefinitionExt() and
def.getControlFlowNode() = variablesInPattern(clause.getPattern()) and
- not LocalFlow::ssaDefAssigns(def, value)
+ not def.(Ssa::WriteDefinition).assigns(value)
)
or
// operation involving `nodeFrom`
From 4e9a528df98f6ecbc62bd434b4d500a4e18ffe52 Mon Sep 17 00:00:00 2001
From: Chris Smowton
Date: Fri, 12 Jul 2024 17:57:08 +0100
Subject: [PATCH 06/27] Move experimental tests
---
.../src/main/java/com/PathInjection/CommonsIOPathInjection.java | 0
.../CWE-022}/src/main/java/com/PathInjection/HelloServlet.java | 0
.../CWE-022}/src/main/java/com/PathInjection/S3PathInjection.java | 0
.../src/main/java/com/PathInjection/SpringIoPathInjection.java | 0
4 files changed, 0 insertions(+), 0 deletions(-)
rename java/ql/test/{query-tests/security/CWE-022/semmle/tests/NewPathInjection/PathInjection => experimental/query-tests/security/CWE-022}/src/main/java/com/PathInjection/CommonsIOPathInjection.java (100%)
rename java/ql/test/{query-tests/security/CWE-022/semmle/tests/NewPathInjection/PathInjection => experimental/query-tests/security/CWE-022}/src/main/java/com/PathInjection/HelloServlet.java (100%)
rename java/ql/test/{query-tests/security/CWE-022/semmle/tests/NewPathInjection/PathInjection => experimental/query-tests/security/CWE-022}/src/main/java/com/PathInjection/S3PathInjection.java (100%)
rename java/ql/test/{query-tests/security/CWE-022/semmle/tests/NewPathInjection/PathInjection => experimental/query-tests/security/CWE-022}/src/main/java/com/PathInjection/SpringIoPathInjection.java (100%)
diff --git a/java/ql/test/query-tests/security/CWE-022/semmle/tests/NewPathInjection/PathInjection/src/main/java/com/PathInjection/CommonsIOPathInjection.java b/java/ql/test/experimental/query-tests/security/CWE-022/src/main/java/com/PathInjection/CommonsIOPathInjection.java
similarity index 100%
rename from java/ql/test/query-tests/security/CWE-022/semmle/tests/NewPathInjection/PathInjection/src/main/java/com/PathInjection/CommonsIOPathInjection.java
rename to java/ql/test/experimental/query-tests/security/CWE-022/src/main/java/com/PathInjection/CommonsIOPathInjection.java
diff --git a/java/ql/test/query-tests/security/CWE-022/semmle/tests/NewPathInjection/PathInjection/src/main/java/com/PathInjection/HelloServlet.java b/java/ql/test/experimental/query-tests/security/CWE-022/src/main/java/com/PathInjection/HelloServlet.java
similarity index 100%
rename from java/ql/test/query-tests/security/CWE-022/semmle/tests/NewPathInjection/PathInjection/src/main/java/com/PathInjection/HelloServlet.java
rename to java/ql/test/experimental/query-tests/security/CWE-022/src/main/java/com/PathInjection/HelloServlet.java
diff --git a/java/ql/test/query-tests/security/CWE-022/semmle/tests/NewPathInjection/PathInjection/src/main/java/com/PathInjection/S3PathInjection.java b/java/ql/test/experimental/query-tests/security/CWE-022/src/main/java/com/PathInjection/S3PathInjection.java
similarity index 100%
rename from java/ql/test/query-tests/security/CWE-022/semmle/tests/NewPathInjection/PathInjection/src/main/java/com/PathInjection/S3PathInjection.java
rename to java/ql/test/experimental/query-tests/security/CWE-022/src/main/java/com/PathInjection/S3PathInjection.java
diff --git a/java/ql/test/query-tests/security/CWE-022/semmle/tests/NewPathInjection/PathInjection/src/main/java/com/PathInjection/SpringIoPathInjection.java b/java/ql/test/experimental/query-tests/security/CWE-022/src/main/java/com/PathInjection/SpringIoPathInjection.java
similarity index 100%
rename from java/ql/test/query-tests/security/CWE-022/semmle/tests/NewPathInjection/PathInjection/src/main/java/com/PathInjection/SpringIoPathInjection.java
rename to java/ql/test/experimental/query-tests/security/CWE-022/src/main/java/com/PathInjection/SpringIoPathInjection.java
From 059a1389c6f33d25989e8ce4a38611cf513452be Mon Sep 17 00:00:00 2001
From: Chris Smowton
Date: Fri, 12 Jul 2024 17:57:46 +0100
Subject: [PATCH 07/27] Run TaintedPath query on experimental tests
---
.../experimental/query-tests/security/CWE-022/TaintedPath.ql | 4 ++++
1 file changed, 4 insertions(+)
create mode 100644 java/ql/test/experimental/query-tests/security/CWE-022/TaintedPath.ql
diff --git a/java/ql/test/experimental/query-tests/security/CWE-022/TaintedPath.ql b/java/ql/test/experimental/query-tests/security/CWE-022/TaintedPath.ql
new file mode 100644
index 00000000000..25e5bf1df87
--- /dev/null
+++ b/java/ql/test/experimental/query-tests/security/CWE-022/TaintedPath.ql
@@ -0,0 +1,4 @@
+import java
+import TestUtilities.InlineFlowTest
+import semmle.code.java.security.TaintedPathQuery
+import TaintFlowTest
From 1cb9f6370fb7fd42de6ab47bbd6633288cda25c6 Mon Sep 17 00:00:00 2001
From: Chris Smowton
Date: Fri, 12 Jul 2024 17:57:59 +0100
Subject: [PATCH 08/27] Use hasTaintFlow marker
---
.../PathInjection/CommonsIOPathInjection.java | 12 +++---
.../com/PathInjection/S3PathInjection.java | 20 +++++-----
.../PathInjection/SpringIoPathInjection.java | 40 +++++++++----------
3 files changed, 36 insertions(+), 36 deletions(-)
diff --git a/java/ql/test/experimental/query-tests/security/CWE-022/src/main/java/com/PathInjection/CommonsIOPathInjection.java b/java/ql/test/experimental/query-tests/security/CWE-022/src/main/java/com/PathInjection/CommonsIOPathInjection.java
index 73179bf5a52..f3dbe21cbfc 100644
--- a/java/ql/test/experimental/query-tests/security/CWE-022/src/main/java/com/PathInjection/CommonsIOPathInjection.java
+++ b/java/ql/test/experimental/query-tests/security/CWE-022/src/main/java/com/PathInjection/CommonsIOPathInjection.java
@@ -20,19 +20,19 @@ class fileAttr implements FileAttribute {
public class CommonsIOPathInjection {
public void PathInjection(Path src, File srcF) throws IOException {
- AsynchronousFileChannel.open(src); // $ PathInjection
- AsynchronousFileChannel.open(src, LinkOption.NOFOLLOW_LINKS); // $ PathInjection
+ AsynchronousFileChannel.open(src); // $ hasTaintFlow
+ AsynchronousFileChannel.open(src, LinkOption.NOFOLLOW_LINKS); // $ hasTaintFlow
AsynchronousFileChannel.open(
- src, LinkOption.NOFOLLOW_LINKS, LinkOption.NOFOLLOW_LINKS); // $ PathInjection
+ src, LinkOption.NOFOLLOW_LINKS, LinkOption.NOFOLLOW_LINKS); // $ hasTaintFlow
ExecutorService executor = Executors.newFixedThreadPool(10);
AsynchronousFileChannel.open(
- src, Set.of(LinkOption.NOFOLLOW_LINKS), executor); // $ PathInjection
+ src, Set.of(LinkOption.NOFOLLOW_LINKS), executor); // $ hasTaintFlow
AsynchronousFileChannel.open(
- src, // $ PathInjection
+ src, // $ hasTaintFlow
Set.of(LinkOption.NOFOLLOW_LINKS),
executor,
new fileAttr());
- FileSystems.getFileSystem(srcF.toURI()); // $ PathInjection
+ FileSystems.getFileSystem(srcF.toURI()); // $ hasTaintFlow
}
}
diff --git a/java/ql/test/experimental/query-tests/security/CWE-022/src/main/java/com/PathInjection/S3PathInjection.java b/java/ql/test/experimental/query-tests/security/CWE-022/src/main/java/com/PathInjection/S3PathInjection.java
index 7775ba826c8..8c6b3eb0f2e 100644
--- a/java/ql/test/experimental/query-tests/security/CWE-022/src/main/java/com/PathInjection/S3PathInjection.java
+++ b/java/ql/test/experimental/query-tests/security/CWE-022/src/main/java/com/PathInjection/S3PathInjection.java
@@ -19,7 +19,7 @@ public class S3PathInjection {
UploadFileRequest.builder()
.putObjectRequest(b -> b.bucket(this.bucketName).key(this.key))
.addTransferListener(LoggingTransferListener.create())
- .source(Paths.get(filePathURI)) // $ PathInjection
+ .source(Paths.get(filePathURI)) // $ hasTaintFlow
.build();
FileUpload fileUpload = this.transferManager.uploadFile(uploadFileRequest);
@@ -33,7 +33,7 @@ public class S3PathInjection {
UploadFileRequest.builder()
.putObjectRequest(b -> b.bucket(this.bucketName).key(this.key))
.addTransferListener(LoggingTransferListener.create())
- .source(Paths.get(filePathURI)) // $ PathInjection
+ .source(Paths.get(filePathURI)) // $ hasTaintFlow
.build();
// Initiate the transfer
@@ -41,10 +41,10 @@ public class S3PathInjection {
// Pause the upload
ResumableFileUpload resumableFileUpload = upload.pause();
// Optionally, persist the resumableFileUpload
- resumableFileUpload.serializeToFile(Paths.get(filePathURI)); // $ PathInjection
+ resumableFileUpload.serializeToFile(Paths.get(filePathURI)); // $ hasTaintFlow
// Retrieve the resumableFileUpload from the file
ResumableFileUpload persistedResumableFileUpload =
- ResumableFileUpload.fromFile(Paths.get(filePathURI)); // $ PathInjection
+ ResumableFileUpload.fromFile(Paths.get(filePathURI)); // $ hasTaintFlow
// Resume the upload
FileUpload resumedUpload = this.transferManager.resumeUploadFile(persistedResumableFileUpload);
// Wait for the transfer to complete
@@ -59,7 +59,7 @@ public class S3PathInjection {
DownloadFileRequest.builder()
.getObjectRequest(b -> b.bucket(this.bucketName).key(this.key))
.addTransferListener(LoggingTransferListener.create())
- .destination(Paths.get(downloadedFileWithPath)) // $ PathInjection
+ .destination(Paths.get(downloadedFileWithPath)) // $ hasTaintFlow
.build();
// Initiate the transfer
@@ -67,10 +67,10 @@ public class S3PathInjection {
// Pause the download
ResumableFileDownload resumableFileDownload = download.pause();
// Optionally, persist the resumableFileDownload
- resumableFileDownload.serializeToFile(Paths.get(downloadedFileWithPath)); // $ PathInjection
+ resumableFileDownload.serializeToFile(Paths.get(downloadedFileWithPath)); // $ hasTaintFlow
// Retrieve the resumableFileDownload from the file
ResumableFileDownload persistedResumableFileDownload =
- ResumableFileDownload.fromFile(Paths.get(downloadedFileWithPath)); // $ PathInjection
+ ResumableFileDownload.fromFile(Paths.get(downloadedFileWithPath)); // $ hasTaintFlow
// Resume the download
FileDownload resumedDownload =
this.transferManager.resumeDownloadFile(persistedResumableFileDownload);
@@ -85,7 +85,7 @@ public class S3PathInjection {
DirectoryUpload directoryUpload =
this.transferManager.uploadDirectory(
UploadDirectoryRequest.builder()
- .source(Paths.get(sourceDirectory)) // $ PathInjection
+ .source(Paths.get(sourceDirectory)) // $ hasTaintFlow
.bucket(this.bucketName)
.build());
@@ -98,7 +98,7 @@ public class S3PathInjection {
DownloadFileRequest.builder()
.getObjectRequest(b -> b.bucket(this.bucketName).key(this.key))
.addTransferListener(LoggingTransferListener.create())
- .destination(Paths.get(downloadedFileWithPath)) // $ PathInjection
+ .destination(Paths.get(downloadedFileWithPath)) // $ hasTaintFlow
.build();
FileDownload downloadFile = this.transferManager.downloadFile(downloadFileRequest);
@@ -111,7 +111,7 @@ public class S3PathInjection {
DirectoryDownload directoryDownload =
this.transferManager.downloadDirectory(
DownloadDirectoryRequest.builder()
- .destination(Paths.get(destinationPathURI)) // $ PathInjection
+ .destination(Paths.get(destinationPathURI)) // $ hasTaintFlow
.bucket(this.bucketName)
.build());
CompletedDirectoryDownload completedDirectoryDownload =
diff --git a/java/ql/test/experimental/query-tests/security/CWE-022/src/main/java/com/PathInjection/SpringIoPathInjection.java b/java/ql/test/experimental/query-tests/security/CWE-022/src/main/java/com/PathInjection/SpringIoPathInjection.java
index eb4c0807345..409e967663d 100755
--- a/java/ql/test/experimental/query-tests/security/CWE-022/src/main/java/com/PathInjection/SpringIoPathInjection.java
+++ b/java/ql/test/experimental/query-tests/security/CWE-022/src/main/java/com/PathInjection/SpringIoPathInjection.java
@@ -18,30 +18,30 @@ public class SpringIoPathInjection {
Path filePath = fileStorageLocation.resolve(path).normalize();
File pathFile = new File(path);
- new UrlResource(filePath.toUri()); // $ PathInjection
- new UrlResource(filePath.toUri().toURL()); // $ PathInjection
- new UrlResource("file", path); // $ PathInjection
- new UrlResource("file", path, "#"); // $ PathInjection
- new UrlResource(path); // $ PathInjection
+ new UrlResource(filePath.toUri()); // $ hasTaintFlow
+ new UrlResource(filePath.toUri().toURL()); // $ hasTaintFlow
+ new UrlResource("file", path); // $ hasTaintFlow
+ new UrlResource("file", path, "#"); // $ hasTaintFlow
+ new UrlResource(path); // $ hasTaintFlow
- new PathResource(path); // $ PathInjection
- new PathResource(filePath); // $ PathInjection
- new PathResource(filePath.toUri()); // $ PathInjection
+ new PathResource(path); // $ hasTaintFlow
+ new PathResource(filePath); // $ hasTaintFlow
+ new PathResource(filePath.toUri()); // $ hasTaintFlow
- new FileUrlResource(filePath.toUri().toURL()); // $ PathInjection
- new FileUrlResource(path); // $ PathInjection
+ new FileUrlResource(filePath.toUri().toURL()); // $ hasTaintFlow
+ new FileUrlResource(path); // $ hasTaintFlow
- new FileSystemResource(pathFile); // $ PathInjection
- new FileSystemResource(path); // $ PathInjection
- new FileSystemResource(filePath); // $ PathInjection
+ new FileSystemResource(pathFile); // $ hasTaintFlow
+ new FileSystemResource(path); // $ hasTaintFlow
+ new FileSystemResource(filePath); // $ hasTaintFlow
new FileSystemResource(
- FileSystems.getFileSystem(URI.create("file:///")), path); // $ PathInjection
+ FileSystems.getFileSystem(URI.create("file:///")), path); // $ hasTaintFlow
- FileSystemUtils.copyRecursively(filePath, filePath.resolve("/newPath")); // $ PathInjection
- FileSystemUtils.copyRecursively(pathFile, pathFile); // $ PathInjection
- FileSystemUtils.deleteRecursively(pathFile); // $ PathInjection
- FileSystemUtils.deleteRecursively(filePath); // $ PathInjection
- FileCopyUtils.copy(pathFile, pathFile); // $ PathInjection
- FileCopyUtils.copyToByteArray(pathFile); // $ PathInjection
+ FileSystemUtils.copyRecursively(filePath, filePath.resolve("/newPath")); // $ hasTaintFlow
+ FileSystemUtils.copyRecursively(pathFile, pathFile); // $ hasTaintFlow
+ FileSystemUtils.deleteRecursively(pathFile); // $ hasTaintFlow
+ FileSystemUtils.deleteRecursively(filePath); // $ hasTaintFlow
+ FileCopyUtils.copy(pathFile, pathFile); // $ hasTaintFlow
+ FileCopyUtils.copyToByteArray(pathFile); // $ hasTaintFlow
}
}
From 1d1c47667482d4c40ffd1523d90f207c7b2ef8ea Mon Sep 17 00:00:00 2001
From: am0o0 <77095239+am0o0@users.noreply.github.com>
Date: Sat, 13 Jul 2024 16:58:51 +0200
Subject: [PATCH 09/27] update tests and use TaintFlowTestArgString add stubs
add missed sink models
---
.../lib/ext/experimental/java.nio.model.yml | 8 +
.../ext/experimental/java.util.zip.model.yml | 6 +
.../s3-transfer-manager.model.yml | 2 +-
.../FrameworkModeEndpointsQuery.qll | 6 +-
.../modelgenerator/internal/CaptureModels.qll | 26 +-
.../internal/CaptureModelsSpecific.qll | 8 +
.../S3PathInjection.java => AmazonS3.java} | 41 +-
...mmonsIOPathInjection.java => JavaNio.java} | 41 +-
.../query-tests/security/CWE-022/Main.java | 35 ++
.../security/CWE-022/PathInjection.iml | 8 +
.../security/CWE-022/SpringIo.java | 46 ++
.../security/CWE-022/TaintedPath.expected | 0
.../security/CWE-022/TaintedPath.ql | 7 +-
.../query-tests/security/CWE-022/Zip4j.java | 9 +
.../query-tests/security/CWE-022/ZipFile.java | 7 +
.../query-tests/security/CWE-022/options | 1 +
.../java/com/PathInjection/HelloServlet.java | 45 --
.../PathInjection/SpringIoPathInjection.java | 47 --
.../net/lingala/zip4j/ZipFile.java | 78 ++++
.../zip4j/headers/HeaderSignature.java | 11 +
.../zip4j/io/inputstream/ZipInputStream.java | 31 ++
.../zip4j/model/AESExtraDataRecord.java | 23 +
.../zip4j/model/AbstractFileHeader.java | 54 +++
.../zip4j/model/ExcludeFileFilter.java | 10 +
.../lingala/zip4j/model/ExtraDataRecord.java | 16 +
.../net/lingala/zip4j/model/FileHeader.java | 27 ++
.../lingala/zip4j/model/LocalFileHeader.java | 16 +
.../lingala/zip4j/model/UnzipParameters.java | 11 +
.../net/lingala/zip4j/model/Zip4jConfig.java | 14 +
.../zip4j/model/Zip64ExtendedInfo.java | 20 +
.../net/lingala/zip4j/model/ZipHeader.java | 12 +
.../lingala/zip4j/model/ZipParameters.java | 63 +++
.../zip4j/model/enums/AesKeyStrength.java | 15 +
.../lingala/zip4j/model/enums/AesVersion.java | 12 +
.../zip4j/model/enums/CompressionLevel.java | 11 +
.../zip4j/model/enums/CompressionMethod.java | 12 +
.../zip4j/model/enums/EncryptionMethod.java | 10 +
.../zip4j/progress/ProgressMonitor.java | 47 ++
.../lingala/zip4j/util/PasswordCallback.java | 9 +
.../org/reactivestreams/Publisher.java | 10 +
.../org/reactivestreams/Subscriber.java | 13 +
.../org/reactivestreams/Subscription.java | 10 +
.../org/slf4j/Logger.java | 71 +++
.../org/slf4j/Marker.java | 22 +
.../io/AbstractFileResolvingResource.java | 27 ++
.../core/io/AbstractResource.java | 30 ++
.../core/io/FileSystemResource.java | 47 ++
.../core/io/FileUrlResource.java | 23 +
.../core/io/InputStreamSource.java | 10 +
.../springframework/core/io/PathResource.java | 45 ++
.../org/springframework/core/io/Resource.java | 29 ++
.../springframework/core/io/UrlResource.java | 35 ++
.../core/io/WritableResource.java | 14 +
.../springframework/util/FileCopyUtils.java | 24 +
.../springframework/util/FileSystemUtils.java | 15 +
.../auth/credentials/AwsCredentials.java | 10 +
.../credentials/AwsCredentialsProvider.java | 10 +
.../amazon/awssdk/awscore/AwsRequest.java | 25 ++
.../AwsRequestOverrideConfiguration.java | 25 ++
.../amazon/awssdk/awscore/AwsResponse.java | 22 +
.../awssdk/awscore/AwsResponseMetadata.java | 17 +
.../client/builder/AwsAsyncClientBuilder.java | 9 +
.../client/builder/AwsClientBuilder.java | 17 +
.../awscore/defaultsmode/DefaultsMode.java | 12 +
.../EventStreamResponseHandler.java | 27 ++
.../software/amazon/awssdk/core/ApiName.java | 18 +
.../amazon/awssdk/core/BytesWrapper.java | 21 +
.../amazon/awssdk/core/CredentialType.java | 14 +
.../core/FileTransformerConfiguration.java | 35 ++
.../core/RequestOverrideConfiguration.java | 58 +++
.../amazon/awssdk/core/ResponseBytes.java | 18 +
.../awssdk/core/ResponseInputStream.java | 17 +
.../software/amazon/awssdk/core/SdkBytes.java | 21 +
.../amazon/awssdk/core/SdkClient.java | 10 +
.../software/amazon/awssdk/core/SdkField.java | 40 ++
.../amazon/awssdk/core/SdkNumber.java | 29 ++
.../software/amazon/awssdk/core/SdkPojo.java | 12 +
.../amazon/awssdk/core/SdkRequest.java | 20 +
.../amazon/awssdk/core/SdkResponse.java | 24 +
.../awssdk/core/ServiceConfiguration.java | 8 +
.../awssdk/core/async/AsyncRequestBody.java | 32 ++
.../core/async/AsyncResponseTransformer.java | 32 ++
.../BlockingInputStreamAsyncRequestBody.java | 18 +
.../BlockingOutputStreamAsyncRequestBody.java | 17 +
.../awssdk/core/async/ResponsePublisher.java | 19 +
.../awssdk/core/async/SdkPublisher.java | 25 ++
.../client/builder/SdkAsyncClientBuilder.java | 15 +
.../core/client/builder/SdkClientBuilder.java | 16 +
.../config/ClientAsyncConfiguration.java | 21 +
.../core/client/config/ClientOption.java | 12 +
.../config/ClientOverrideConfiguration.java | 69 +++
.../config/SdkAdvancedAsyncClientOption.java | 12 +
.../config/SdkAdvancedClientOption.java | 17 +
.../amazon/awssdk/core/document/Document.java | 83 ++++
.../awssdk/core/document/DocumentVisitor.java | 18 +
.../core/document/VoidDocumentVisitor.java | 18 +
.../awssdk/core/exception/SdkException.java | 25 ++
.../awssdk/core/interceptor/Context.java | 71 +++
.../core/interceptor/ExecutionAttribute.java | 13 +
.../core/interceptor/ExecutionAttributes.java | 36 ++
.../interceptor/ExecutionInterceptor.java | 38 ++
.../awssdk/core/internal/io/Releasable.java | 12 +
.../internal/waiters/ResponseOrException.java | 16 +
.../awssdk/core/io/SdkFilterInputStream.java | 51 +++
.../core/protocol/MarshallLocation.java | 10 +
.../awssdk/core/protocol/MarshallingType.java | 32 ++
.../amazon/awssdk/core/retry/RetryMode.java | 22 +
.../amazon/awssdk/core/retry/RetryPolicy.java | 49 ++
.../awssdk/core/retry/RetryPolicyContext.java | 35 ++
.../core/retry/backoff/BackoffStrategy.java | 19 +
.../core/retry/conditions/RetryCondition.java | 14 +
.../amazon/awssdk/core/signer/Signer.java | 13 +
.../amazon/awssdk/core/sync/RequestBody.java | 31 ++
.../amazon/awssdk/core/traits/Trait.java | 8 +
.../waiters/WaiterOverrideConfiguration.java | 31 ++
.../awssdk/core/waiters/WaiterResponse.java | 11 +
.../amazon/awssdk/endpoints/Endpoint.java | 27 ++
.../endpoints/EndpointAttributeKey.java | 14 +
.../awssdk/endpoints/EndpointProvider.java | 8 +
.../amazon/awssdk/http/Abortable.java | 9 +
.../awssdk/http/AbortableInputStream.java | 33 ++
.../awssdk/http/ContentStreamProvider.java | 10 +
.../http/SdkHttpExecutionAttribute.java | 12 +
.../http/SdkHttpExecutionAttributes.java | 25 ++
.../awssdk/http/SdkHttpFullRequest.java | 52 +++
.../awssdk/http/SdkHttpFullResponse.java | 33 ++
.../amazon/awssdk/http/SdkHttpHeaders.java | 19 +
.../amazon/awssdk/http/SdkHttpMethod.java | 11 +
.../amazon/awssdk/http/SdkHttpRequest.java | 64 +++
.../amazon/awssdk/http/SdkHttpResponse.java | 34 ++
.../http/async/AsyncExecuteRequest.java | 34 ++
.../awssdk/http/async/SdkAsyncHttpClient.java | 20 +
.../async/SdkAsyncHttpResponseHandler.java | 14 +
.../http/async/SdkHttpContentPublisher.java | 12 +
.../amazon/awssdk/metrics/MetricCategory.java | 12 +
.../awssdk/metrics/MetricCollection.java | 19 +
.../awssdk/metrics/MetricCollector.java | 15 +
.../amazon/awssdk/metrics/MetricLevel.java | 11 +
.../awssdk/metrics/MetricPublisher.java | 12 +
.../amazon/awssdk/metrics/MetricRecord.java | 11 +
.../amazon/awssdk/metrics/SdkMetric.java | 17 +
.../amazon/awssdk/profiles/Profile.java | 28 ++
.../amazon/awssdk/profiles/ProfileFile.java | 43 ++
.../amazon/awssdk/regions/EndpointTag.java | 16 +
.../awssdk/regions/PartitionEndpointKey.java | 23 +
.../awssdk/regions/PartitionMetadata.java | 19 +
.../amazon/awssdk/regions/Region.java | 55 +++
.../amazon/awssdk/regions/RegionMetadata.java | 15 +
.../awssdk/services/s3/S3AsyncClient.java | 421 ++++++++++++++++++
.../services/s3/S3AsyncClientBuilder.java | 11 +
.../services/s3/S3BaseClientBuilder.java | 19 +
.../awssdk/services/s3/S3Configuration.java | 43 ++
.../services/s3/S3CrtAsyncClientBuilder.java | 22 +
.../awssdk/services/s3/S3Utilities.java | 28 ++
.../s3/endpoints/S3EndpointParams.java | 39 ++
.../s3/endpoints/S3EndpointProvider.java | 16 +
.../model/AbortIncompleteMultipartUpload.java | 30 ++
.../s3/model/AbortMultipartUploadRequest.java | 45 ++
.../model/AbortMultipartUploadResponse.java | 33 ++
.../s3/model/AccelerateConfiguration.java | 33 ++
.../s3/model/AccessControlPolicy.java | 40 ++
.../s3/model/AccessControlTranslation.java | 33 ++
.../s3/model/AnalyticsAndOperator.java | 38 ++
.../s3/model/AnalyticsConfiguration.java | 39 ++
.../s3/model/AnalyticsExportDestination.java | 33 ++
.../services/s3/model/AnalyticsFilter.java | 50 +++
.../model/AnalyticsS3BucketDestination.java | 39 ++
.../s3/model/AnalyticsS3ExportFileFormat.java | 14 +
.../services/s3/model/ArchiveStatus.java | 14 +
.../awssdk/services/s3/model/Bucket.java | 33 ++
.../s3/model/BucketAccelerateStatus.java | 14 +
.../services/s3/model/BucketCannedACL.java | 14 +
.../model/BucketLifecycleConfiguration.java | 36 ++
.../s3/model/BucketLocationConstraint.java | 14 +
.../s3/model/BucketLoggingStatus.java | 33 ++
.../s3/model/BucketLogsPermission.java | 14 +
.../s3/model/BucketVersioningStatus.java | 14 +
.../services/s3/model/CORSConfiguration.java | 36 ++
.../awssdk/services/s3/model/CORSRule.java | 49 ++
.../awssdk/services/s3/model/CSVInput.java | 45 ++
.../awssdk/services/s3/model/CSVOutput.java | 41 ++
.../awssdk/services/s3/model/Checksum.java | 36 ++
.../services/s3/model/ChecksumAlgorithm.java | 14 +
.../services/s3/model/ChecksumMode.java | 14 +
.../services/s3/model/CommonPrefix.java | 30 ++
.../model/CompleteMultipartUploadRequest.java | 63 +++
.../CompleteMultipartUploadResponse.java | 62 +++
.../s3/model/CompletedMultipartUpload.java | 36 ++
.../services/s3/model/CompletedPart.java | 40 ++
.../services/s3/model/CompressionType.java | 14 +
.../awssdk/services/s3/model/Condition.java | 32 ++
.../services/s3/model/ContinuationEvent.java | 41 ++
.../services/s3/model/CopyObjectRequest.java | 156 +++++++
.../services/s3/model/CopyObjectResponse.java | 59 +++
.../services/s3/model/CopyObjectResult.java | 41 ++
.../services/s3/model/CopyPartResult.java | 41 ++
.../s3/model/CreateBucketConfiguration.java | 33 ++
.../s3/model/CreateBucketRequest.java | 60 +++
.../s3/model/CreateBucketResponse.java | 30 ++
.../model/CreateMultipartUploadRequest.java | 118 +++++
.../model/CreateMultipartUploadResponse.java | 64 +++
.../services/s3/model/DefaultRetention.java | 37 ++
.../awssdk/services/s3/model/Delete.java | 38 ++
...teBucketAnalyticsConfigurationRequest.java | 38 ++
...eBucketAnalyticsConfigurationResponse.java | 28 ++
.../s3/model/DeleteBucketCorsRequest.java | 36 ++
.../s3/model/DeleteBucketCorsResponse.java | 28 ++
.../model/DeleteBucketEncryptionRequest.java | 36 ++
.../model/DeleteBucketEncryptionResponse.java | 28 ++
...ntelligentTieringConfigurationRequest.java | 36 ++
...telligentTieringConfigurationResponse.java | 28 ++
...teBucketInventoryConfigurationRequest.java | 38 ++
...eBucketInventoryConfigurationResponse.java | 28 ++
.../model/DeleteBucketLifecycleRequest.java | 36 ++
.../model/DeleteBucketLifecycleResponse.java | 28 ++
...leteBucketMetricsConfigurationRequest.java | 38 ++
...eteBucketMetricsConfigurationResponse.java | 28 ++
.../DeleteBucketOwnershipControlsRequest.java | 36 ++
...DeleteBucketOwnershipControlsResponse.java | 28 ++
.../s3/model/DeleteBucketPolicyRequest.java | 36 ++
.../s3/model/DeleteBucketPolicyResponse.java | 28 ++
.../model/DeleteBucketReplicationRequest.java | 36 ++
.../DeleteBucketReplicationResponse.java | 28 ++
.../s3/model/DeleteBucketRequest.java | 36 ++
.../s3/model/DeleteBucketResponse.java | 28 ++
.../s3/model/DeleteBucketTaggingRequest.java | 36 ++
.../s3/model/DeleteBucketTaggingResponse.java | 28 ++
.../s3/model/DeleteBucketWebsiteRequest.java | 36 ++
.../s3/model/DeleteBucketWebsiteResponse.java | 28 ++
.../services/s3/model/DeleteMarkerEntry.java | 42 ++
.../s3/model/DeleteMarkerReplication.java | 33 ++
.../model/DeleteMarkerReplicationStatus.java | 14 +
.../s3/model/DeleteObjectRequest.java | 49 ++
.../s3/model/DeleteObjectResponse.java | 37 ++
.../s3/model/DeleteObjectTaggingRequest.java | 40 ++
.../s3/model/DeleteObjectTaggingResponse.java | 30 ++
.../s3/model/DeleteObjectsRequest.java | 54 +++
.../s3/model/DeleteObjectsResponse.java | 47 ++
.../model/DeletePublicAccessBlockRequest.java | 36 ++
.../DeletePublicAccessBlockResponse.java | 28 ++
.../services/s3/model/DeletedObject.java | 36 ++
.../awssdk/services/s3/model/Destination.java | 54 +++
.../services/s3/model/EncodingType.java | 14 +
.../awssdk/services/s3/model/Encryption.java | 37 ++
.../s3/model/EncryptionConfiguration.java | 30 ++
.../awssdk/services/s3/model/EndEvent.java | 41 ++
.../services/s3/model/ErrorDocument.java | 30 ++
.../awssdk/services/s3/model/Event.java | 14 +
.../s3/model/EventBridgeConfiguration.java | 28 ++
.../s3/model/ExistingObjectReplication.java | 33 ++
.../ExistingObjectReplicationStatus.java | 14 +
.../services/s3/model/ExpirationStatus.java | 14 +
.../services/s3/model/ExpressionType.java | 14 +
.../services/s3/model/FileHeaderInfo.java | 14 +
.../awssdk/services/s3/model/FilterRule.java | 35 ++
.../services/s3/model/FilterRuleName.java | 14 +
...tBucketAccelerateConfigurationRequest.java | 36 ++
...BucketAccelerateConfigurationResponse.java | 33 ++
.../s3/model/GetBucketAclRequest.java | 36 ++
.../s3/model/GetBucketAclResponse.java | 40 ++
...etBucketAnalyticsConfigurationRequest.java | 38 ++
...tBucketAnalyticsConfigurationResponse.java | 33 ++
.../s3/model/GetBucketCorsRequest.java | 36 ++
.../s3/model/GetBucketCorsResponse.java | 36 ++
.../s3/model/GetBucketEncryptionRequest.java | 36 ++
.../s3/model/GetBucketEncryptionResponse.java | 33 ++
...ntelligentTieringConfigurationRequest.java | 36 ++
...telligentTieringConfigurationResponse.java | 33 ++
...etBucketInventoryConfigurationRequest.java | 38 ++
...tBucketInventoryConfigurationResponse.java | 33 ++
...etBucketLifecycleConfigurationRequest.java | 36 ++
...tBucketLifecycleConfigurationResponse.java | 36 ++
.../s3/model/GetBucketLocationRequest.java | 36 ++
.../s3/model/GetBucketLocationResponse.java | 33 ++
.../s3/model/GetBucketLoggingRequest.java | 36 ++
.../s3/model/GetBucketLoggingResponse.java | 33 ++
.../GetBucketMetricsConfigurationRequest.java | 38 ++
...GetBucketMetricsConfigurationResponse.java | 33 ++
...ucketNotificationConfigurationRequest.java | 36 ++
...cketNotificationConfigurationResponse.java | 52 +++
.../GetBucketOwnershipControlsRequest.java | 36 ++
.../GetBucketOwnershipControlsResponse.java | 33 ++
.../s3/model/GetBucketPolicyRequest.java | 36 ++
.../s3/model/GetBucketPolicyResponse.java | 30 ++
.../model/GetBucketPolicyStatusRequest.java | 36 ++
.../model/GetBucketPolicyStatusResponse.java | 33 ++
.../s3/model/GetBucketReplicationRequest.java | 36 ++
.../model/GetBucketReplicationResponse.java | 33 ++
.../model/GetBucketRequestPaymentRequest.java | 36 ++
.../GetBucketRequestPaymentResponse.java | 33 ++
.../s3/model/GetBucketTaggingRequest.java | 36 ++
.../s3/model/GetBucketTaggingResponse.java | 36 ++
.../s3/model/GetBucketVersioningRequest.java | 36 ++
.../s3/model/GetBucketVersioningResponse.java | 38 ++
.../s3/model/GetBucketWebsiteRequest.java | 36 ++
.../s3/model/GetBucketWebsiteResponse.java | 48 ++
.../s3/model/GetObjectAclRequest.java | 45 ++
.../s3/model/GetObjectAclResponse.java | 45 ++
.../s3/model/GetObjectAttributesParts.java | 46 ++
.../s3/model/GetObjectAttributesRequest.java | 64 +++
.../s3/model/GetObjectAttributesResponse.java | 58 +++
.../s3/model/GetObjectLegalHoldRequest.java | 45 ++
.../s3/model/GetObjectLegalHoldResponse.java | 33 ++
.../GetObjectLockConfigurationRequest.java | 36 ++
.../GetObjectLockConfigurationResponse.java | 33 ++
.../services/s3/model/GetObjectRequest.java | 81 ++++
.../services/s3/model/GetObjectResponse.java | 119 +++++
.../s3/model/GetObjectRetentionRequest.java | 45 ++
.../s3/model/GetObjectRetentionResponse.java | 33 ++
.../s3/model/GetObjectTaggingRequest.java | 45 ++
.../s3/model/GetObjectTaggingResponse.java | 38 ++
.../s3/model/GetObjectTorrentRequest.java | 43 ++
.../s3/model/GetObjectTorrentResponse.java | 33 ++
.../s3/model/GetPublicAccessBlockRequest.java | 36 ++
.../model/GetPublicAccessBlockResponse.java | 33 ++
.../services/s3/model/GetUrlRequest.java | 34 ++
.../s3/model/GlacierJobParameters.java | 33 ++
.../awssdk/services/s3/model/Grant.java | 38 ++
.../awssdk/services/s3/model/Grantee.java | 41 ++
.../services/s3/model/HeadBucketRequest.java | 36 ++
.../services/s3/model/HeadBucketResponse.java | 28 ++
.../services/s3/model/HeadObjectRequest.java | 69 +++
.../services/s3/model/HeadObjectResponse.java | 120 +++++
.../services/s3/model/IndexDocument.java | 30 ++
.../awssdk/services/s3/model/Initiator.java | 32 ++
.../services/s3/model/InputSerialization.java | 46 ++
.../model/IntelligentTieringAccessTier.java | 14 +
.../model/IntelligentTieringAndOperator.java | 38 ++
.../IntelligentTieringConfiguration.java | 47 ++
.../s3/model/IntelligentTieringFilter.java | 39 ++
.../s3/model/IntelligentTieringStatus.java | 14 +
.../s3/model/InventoryConfiguration.java | 59 +++
.../s3/model/InventoryDestination.java | 33 ++
.../s3/model/InventoryEncryption.java | 37 ++
.../services/s3/model/InventoryFilter.java | 30 ++
.../services/s3/model/InventoryFormat.java | 14 +
.../services/s3/model/InventoryFrequency.java | 14 +
.../InventoryIncludedObjectVersions.java | 14 +
.../s3/model/InventoryOptionalField.java | 14 +
.../model/InventoryS3BucketDestination.java | 44 ++
.../services/s3/model/InventorySchedule.java | 33 ++
.../awssdk/services/s3/model/JSONInput.java | 33 ++
.../awssdk/services/s3/model/JSONOutput.java | 30 ++
.../awssdk/services/s3/model/JSONType.java | 14 +
.../s3/model/LambdaFunctionConfiguration.java | 46 ++
.../s3/model/LifecycleExpiration.java | 35 ++
.../services/s3/model/LifecycleRule.java | 67 +++
.../s3/model/LifecycleRuleAndOperator.java | 42 ++
.../s3/model/LifecycleRuleFilter.java | 56 +++
...tBucketAnalyticsConfigurationsRequest.java | 38 ++
...BucketAnalyticsConfigurationsResponse.java | 42 ++
...telligentTieringConfigurationsRequest.java | 36 ++
...elligentTieringConfigurationsResponse.java | 42 ++
...tBucketInventoryConfigurationsRequest.java | 38 ++
...BucketInventoryConfigurationsResponse.java | 42 ++
...istBucketMetricsConfigurationsRequest.java | 38 ++
...stBucketMetricsConfigurationsResponse.java | 42 ++
.../services/s3/model/ListBucketsRequest.java | 32 ++
.../s3/model/ListBucketsResponse.java | 40 ++
.../s3/model/ListMultipartUploadsRequest.java | 51 +++
.../model/ListMultipartUploadsResponse.java | 65 +++
.../s3/model/ListObjectVersionsRequest.java | 51 +++
.../s3/model/ListObjectVersionsResponse.java | 71 +++
.../services/s3/model/ListObjectsRequest.java | 54 +++
.../s3/model/ListObjectsResponse.java | 61 +++
.../s3/model/ListObjectsV2Request.java | 58 +++
.../s3/model/ListObjectsV2Response.java | 65 +++
.../services/s3/model/ListPartsRequest.java | 55 +++
.../services/s3/model/ListPartsResponse.java | 78 ++++
.../services/s3/model/LoggingEnabled.java | 40 ++
.../awssdk/services/s3/model/MFADelete.java | 14 +
.../services/s3/model/MFADeleteStatus.java | 14 +
.../services/s3/model/MetadataDirective.java | 14 +
.../services/s3/model/MetadataEntry.java | 32 ++
.../awssdk/services/s3/model/Metrics.java | 38 ++
.../services/s3/model/MetricsAndOperator.java | 40 ++
.../s3/model/MetricsConfiguration.java | 35 ++
.../services/s3/model/MetricsFilter.java | 53 +++
.../services/s3/model/MetricsStatus.java | 14 +
.../services/s3/model/MultipartUpload.java | 54 +++
.../s3/model/NoncurrentVersionExpiration.java | 32 ++
.../s3/model/NoncurrentVersionTransition.java | 37 ++
.../s3/model/NotificationConfiguration.java | 52 +++
.../NotificationConfigurationFilter.java | 33 ++
.../services/s3/model/ObjectAttributes.java | 14 +
.../services/s3/model/ObjectCannedACL.java | 14 +
.../services/s3/model/ObjectIdentifier.java | 32 ++
.../s3/model/ObjectLockConfiguration.java | 38 ++
.../services/s3/model/ObjectLockEnabled.java | 14 +
.../s3/model/ObjectLockLegalHold.java | 33 ++
.../s3/model/ObjectLockLegalHoldStatus.java | 14 +
.../services/s3/model/ObjectLockMode.java | 14 +
.../s3/model/ObjectLockRetention.java | 36 ++
.../s3/model/ObjectLockRetentionMode.java | 14 +
.../services/s3/model/ObjectLockRule.java | 33 ++
.../services/s3/model/ObjectOwnership.java | 14 +
.../awssdk/services/s3/model/ObjectPart.java | 40 ++
.../services/s3/model/ObjectStorageClass.java | 14 +
.../services/s3/model/ObjectVersion.java | 60 +++
.../s3/model/ObjectVersionStorageClass.java | 14 +
.../services/s3/model/OutputLocation.java | 33 ++
.../s3/model/OutputSerialization.java | 37 ++
.../awssdk/services/s3/model/Owner.java | 32 ++
.../services/s3/model/OwnerOverride.java | 14 +
.../services/s3/model/OwnershipControls.java | 36 ++
.../s3/model/OwnershipControlsRule.java | 33 ++
.../services/s3/model/ParquetInput.java | 28 ++
.../amazon/awssdk/services/s3/model/Part.java | 45 ++
.../awssdk/services/s3/model/Payer.java | 14 +
.../awssdk/services/s3/model/Permission.java | 14 +
.../services/s3/model/PolicyStatus.java | 30 ++
.../awssdk/services/s3/model/Progress.java | 37 ++
.../services/s3/model/ProgressEvent.java | 48 ++
.../awssdk/services/s3/model/Protocol.java | 14 +
.../model/PublicAccessBlockConfiguration.java | 36 ++
...tBucketAccelerateConfigurationRequest.java | 45 ++
...BucketAccelerateConfigurationResponse.java | 28 ++
.../s3/model/PutBucketAclRequest.java | 62 +++
.../s3/model/PutBucketAclResponse.java | 28 ++
...utBucketAnalyticsConfigurationRequest.java | 42 ++
...tBucketAnalyticsConfigurationResponse.java | 28 ++
.../s3/model/PutBucketCorsRequest.java | 47 ++
.../s3/model/PutBucketCorsResponse.java | 28 ++
.../s3/model/PutBucketEncryptionRequest.java | 47 ++
.../s3/model/PutBucketEncryptionResponse.java | 28 ++
...ntelligentTieringConfigurationRequest.java | 40 ++
...telligentTieringConfigurationResponse.java | 28 ++
...utBucketInventoryConfigurationRequest.java | 42 ++
...tBucketInventoryConfigurationResponse.java | 28 ++
...utBucketLifecycleConfigurationRequest.java | 45 ++
...tBucketLifecycleConfigurationResponse.java | 28 ++
.../s3/model/PutBucketLoggingRequest.java | 47 ++
.../s3/model/PutBucketLoggingResponse.java | 28 ++
.../PutBucketMetricsConfigurationRequest.java | 42 ++
...PutBucketMetricsConfigurationResponse.java | 28 ++
...ucketNotificationConfigurationRequest.java | 42 ++
...cketNotificationConfigurationResponse.java | 28 ++
.../PutBucketOwnershipControlsRequest.java | 42 ++
.../PutBucketOwnershipControlsResponse.java | 28 ++
.../s3/model/PutBucketPolicyRequest.java | 47 ++
.../s3/model/PutBucketPolicyResponse.java | 28 ++
.../s3/model/PutBucketReplicationRequest.java | 49 ++
.../model/PutBucketReplicationResponse.java | 28 ++
.../model/PutBucketRequestPaymentRequest.java | 47 ++
.../PutBucketRequestPaymentResponse.java | 28 ++
.../s3/model/PutBucketTaggingRequest.java | 47 ++
.../s3/model/PutBucketTaggingResponse.java | 28 ++
.../s3/model/PutBucketVersioningRequest.java | 49 ++
.../s3/model/PutBucketVersioningResponse.java | 28 ++
.../s3/model/PutBucketWebsiteRequest.java | 47 ++
.../s3/model/PutBucketWebsiteResponse.java | 28 ++
.../s3/model/PutObjectAclRequest.java | 71 +++
.../s3/model/PutObjectAclResponse.java | 33 ++
.../s3/model/PutObjectLegalHoldRequest.java | 56 +++
.../s3/model/PutObjectLegalHoldResponse.java | 33 ++
.../PutObjectLockConfigurationRequest.java | 54 +++
.../PutObjectLockConfigurationResponse.java | 33 ++
.../services/s3/model/PutObjectRequest.java | 130 ++++++
.../services/s3/model/PutObjectResponse.java | 62 +++
.../s3/model/PutObjectRetentionRequest.java | 58 +++
.../s3/model/PutObjectRetentionResponse.java | 33 ++
.../s3/model/PutObjectTaggingRequest.java | 56 +++
.../s3/model/PutObjectTaggingResponse.java | 30 ++
.../s3/model/PutPublicAccessBlockRequest.java | 47 ++
.../model/PutPublicAccessBlockResponse.java | 28 ++
.../services/s3/model/QueueConfiguration.java | 46 ++
.../awssdk/services/s3/model/QuoteFields.java | 14 +
.../services/s3/model/RecordsEvent.java | 48 ++
.../awssdk/services/s3/model/Redirect.java | 41 ++
.../s3/model/RedirectAllRequestsTo.java | 35 ++
.../s3/model/ReplicaModifications.java | 33 ++
.../s3/model/ReplicaModificationsStatus.java | 14 +
.../s3/model/ReplicationConfiguration.java | 38 ++
.../services/s3/model/ReplicationRule.java | 60 +++
.../s3/model/ReplicationRuleAndOperator.java | 38 ++
.../s3/model/ReplicationRuleFilter.java | 50 +++
.../s3/model/ReplicationRuleStatus.java | 14 +
.../services/s3/model/ReplicationStatus.java | 14 +
.../services/s3/model/ReplicationTime.java | 38 ++
.../s3/model/ReplicationTimeStatus.java | 14 +
.../s3/model/ReplicationTimeValue.java | 30 ++
.../services/s3/model/RequestCharged.java | 14 +
.../services/s3/model/RequestPayer.java | 14 +
.../s3/model/RequestPaymentConfiguration.java | 33 ++
.../services/s3/model/RequestProgress.java | 30 ++
.../s3/model/RestoreObjectRequest.java | 54 +++
.../s3/model/RestoreObjectResponse.java | 35 ++
.../services/s3/model/RestoreRequest.java | 55 +++
.../services/s3/model/RestoreRequestType.java | 14 +
.../awssdk/services/s3/model/RoutingRule.java | 37 ++
.../awssdk/services/s3/model/S3Error.java | 36 ++
.../awssdk/services/s3/model/S3KeyFilter.java | 36 ++
.../awssdk/services/s3/model/S3Location.java | 64 +++
.../awssdk/services/s3/model/S3Object.java | 56 +++
.../awssdk/services/s3/model/S3Request.java | 16 +
.../awssdk/services/s3/model/S3Response.java | 20 +
.../services/s3/model/S3ResponseMetadata.java | 14 +
.../awssdk/services/s3/model/SSEKMS.java | 30 ++
.../awssdk/services/s3/model/SSES3.java | 28 ++
.../awssdk/services/s3/model/ScanRange.java | 32 ++
.../model/SelectObjectContentEventStream.java | 32 ++
.../s3/model/SelectObjectContentRequest.java | 67 +++
.../s3/model/SelectObjectContentResponse.java | 28 ++
.../SelectObjectContentResponseHandler.java | 43 ++
.../services/s3/model/SelectParameters.java | 44 ++
.../s3/model/ServerSideEncryption.java | 14 +
.../model/ServerSideEncryptionByDefault.java | 35 ++
.../ServerSideEncryptionConfiguration.java | 36 ++
.../s3/model/ServerSideEncryptionRule.java | 35 ++
.../s3/model/SourceSelectionCriteria.java | 37 ++
.../s3/model/SseKmsEncryptedObjects.java | 33 ++
.../model/SseKmsEncryptedObjectsStatus.java | 14 +
.../awssdk/services/s3/model/Stats.java | 37 ++
.../awssdk/services/s3/model/StatsEvent.java | 48 ++
.../services/s3/model/StorageClass.java | 14 +
.../s3/model/StorageClassAnalysis.java | 33 ++
.../model/StorageClassAnalysisDataExport.java | 38 ++
.../StorageClassAnalysisSchemaVersion.java | 14 +
.../amazon/awssdk/services/s3/model/Tag.java | 32 ++
.../awssdk/services/s3/model/Tagging.java | 36 ++
.../services/s3/model/TaggingDirective.java | 14 +
.../awssdk/services/s3/model/TargetGrant.java | 38 ++
.../amazon/awssdk/services/s3/model/Tier.java | 14 +
.../awssdk/services/s3/model/Tiering.java | 35 ++
.../services/s3/model/TopicConfiguration.java | 46 ++
.../awssdk/services/s3/model/Transition.java | 38 ++
.../s3/model/TransitionStorageClass.java | 14 +
.../amazon/awssdk/services/s3/model/Type.java | 14 +
.../s3/model/UploadPartCopyRequest.java | 84 ++++
.../s3/model/UploadPartCopyResponse.java | 53 +++
.../services/s3/model/UploadPartRequest.java | 70 +++
.../services/s3/model/UploadPartResponse.java | 56 +++
.../s3/model/VersioningConfiguration.java | 38 ++
.../s3/model/WebsiteConfiguration.java | 48 ++
.../model/WriteGetObjectResponseRequest.java | 131 ++++++
.../model/WriteGetObjectResponseResponse.java | 28 ++
.../ListMultipartUploadsPublisher.java | 20 +
.../ListObjectVersionsPublisher.java | 22 +
.../s3/paginators/ListObjectsV2Publisher.java | 20 +
.../s3/paginators/ListPartsPublisher.java | 18 +
.../services/s3/waiters/S3AsyncWaiter.java | 45 ++
.../awssdk/transfer/s3/S3TransferManager.java | 55 +++
.../transfer/s3/config/DownloadFilter.java | 12 +
.../transfer/s3/model/CompletedCopy.java | 22 +
.../s3/model/CompletedDirectoryDownload.java | 28 ++
.../s3/model/CompletedDirectoryTransfer.java | 12 +
.../s3/model/CompletedDirectoryUpload.java | 28 ++
.../transfer/s3/model/CompletedDownload.java | 26 ++
.../s3/model/CompletedFileDownload.java | 21 +
.../s3/model/CompletedFileUpload.java | 22 +
.../s3/model/CompletedObjectTransfer.java | 11 +
.../transfer/s3/model/CompletedTransfer.java | 8 +
.../transfer/s3/model/CompletedUpload.java | 22 +
.../amazon/awssdk/transfer/s3/model/Copy.java | 12 +
.../awssdk/transfer/s3/model/CopyRequest.java | 33 ++
.../transfer/s3/model/DirectoryDownload.java | 12 +
.../transfer/s3/model/DirectoryTransfer.java | 9 +
.../transfer/s3/model/DirectoryUpload.java | 12 +
.../awssdk/transfer/s3/model/Download.java | 12 +
.../s3/model/DownloadDirectoryRequest.java | 83 ++++
.../s3/model/DownloadFileRequest.java | 37 ++
.../transfer/s3/model/DownloadRequest.java | 43 ++
.../transfer/s3/model/FailedFileDownload.java | 26 ++
.../transfer/s3/model/FailedFileUpload.java | 26 ++
.../s3/model/FailedObjectTransfer.java | 11 +
.../transfer/s3/model/FileDownload.java | 14 +
.../awssdk/transfer/s3/model/FileUpload.java | 14 +
.../transfer/s3/model/ObjectTransfer.java | 11 +
.../s3/model/ResumableFileDownload.java | 48 ++
.../s3/model/ResumableFileUpload.java | 52 +++
.../transfer/s3/model/ResumableTransfer.java | 17 +
.../awssdk/transfer/s3/model/Transfer.java | 11 +
.../s3/model/TransferDirectoryRequest.java | 9 +
.../s3/model/TransferObjectRequest.java | 12 +
.../transfer/s3/model/TransferRequest.java | 8 +
.../awssdk/transfer/s3/model/Upload.java | 12 +
.../s3/model/UploadDirectoryRequest.java | 96 ++++
.../transfer/s3/model/UploadFileRequest.java | 37 ++
.../transfer/s3/model/UploadRequest.java | 36 ++
.../s3/progress/LoggingTransferListener.java | 16 +
.../s3/progress/TransferListener.java | 35 ++
.../s3/progress/TransferProgress.java | 10 +
.../s3/progress/TransferProgressSnapshot.java | 17 +
.../amazon/awssdk/utils/AttributeMap.java | 44 ++
.../awssdk/utils/CancellableOutputStream.java | 11 +
.../amazon/awssdk/utils/SdkAutoCloseable.java | 9 +
.../awssdk/utils/builder/Buildable.java | 9 +
.../awssdk/utils/builder/CopyableBuilder.java | 11 +
.../awssdk/utils/builder/SdkBuilder.java | 12 +
.../utils/builder/ToCopyableBuilder.java | 12 +
590 files changed, 19283 insertions(+), 143 deletions(-)
create mode 100644 java/ql/lib/ext/experimental/java.nio.model.yml
create mode 100644 java/ql/lib/ext/experimental/java.util.zip.model.yml
rename java/ql/test/experimental/query-tests/security/CWE-022/{src/main/java/com/PathInjection/S3PathInjection.java => AmazonS3.java} (78%)
rename java/ql/test/experimental/query-tests/security/CWE-022/{src/main/java/com/PathInjection/CommonsIOPathInjection.java => JavaNio.java} (53%)
create mode 100755 java/ql/test/experimental/query-tests/security/CWE-022/Main.java
create mode 100644 java/ql/test/experimental/query-tests/security/CWE-022/PathInjection.iml
create mode 100755 java/ql/test/experimental/query-tests/security/CWE-022/SpringIo.java
create mode 100644 java/ql/test/experimental/query-tests/security/CWE-022/TaintedPath.expected
create mode 100755 java/ql/test/experimental/query-tests/security/CWE-022/Zip4j.java
create mode 100755 java/ql/test/experimental/query-tests/security/CWE-022/ZipFile.java
create mode 100644 java/ql/test/experimental/query-tests/security/CWE-022/options
delete mode 100755 java/ql/test/experimental/query-tests/security/CWE-022/src/main/java/com/PathInjection/HelloServlet.java
delete mode 100755 java/ql/test/experimental/query-tests/security/CWE-022/src/main/java/com/PathInjection/SpringIoPathInjection.java
create mode 100644 java/ql/test/experimental/stubs/lingala-zip4j-2.11.5/net/lingala/zip4j/ZipFile.java
create mode 100644 java/ql/test/experimental/stubs/lingala-zip4j-2.11.5/net/lingala/zip4j/headers/HeaderSignature.java
create mode 100644 java/ql/test/experimental/stubs/lingala-zip4j-2.11.5/net/lingala/zip4j/io/inputstream/ZipInputStream.java
create mode 100644 java/ql/test/experimental/stubs/lingala-zip4j-2.11.5/net/lingala/zip4j/model/AESExtraDataRecord.java
create mode 100644 java/ql/test/experimental/stubs/lingala-zip4j-2.11.5/net/lingala/zip4j/model/AbstractFileHeader.java
create mode 100644 java/ql/test/experimental/stubs/lingala-zip4j-2.11.5/net/lingala/zip4j/model/ExcludeFileFilter.java
create mode 100644 java/ql/test/experimental/stubs/lingala-zip4j-2.11.5/net/lingala/zip4j/model/ExtraDataRecord.java
create mode 100644 java/ql/test/experimental/stubs/lingala-zip4j-2.11.5/net/lingala/zip4j/model/FileHeader.java
create mode 100644 java/ql/test/experimental/stubs/lingala-zip4j-2.11.5/net/lingala/zip4j/model/LocalFileHeader.java
create mode 100644 java/ql/test/experimental/stubs/lingala-zip4j-2.11.5/net/lingala/zip4j/model/UnzipParameters.java
create mode 100644 java/ql/test/experimental/stubs/lingala-zip4j-2.11.5/net/lingala/zip4j/model/Zip4jConfig.java
create mode 100644 java/ql/test/experimental/stubs/lingala-zip4j-2.11.5/net/lingala/zip4j/model/Zip64ExtendedInfo.java
create mode 100644 java/ql/test/experimental/stubs/lingala-zip4j-2.11.5/net/lingala/zip4j/model/ZipHeader.java
create mode 100644 java/ql/test/experimental/stubs/lingala-zip4j-2.11.5/net/lingala/zip4j/model/ZipParameters.java
create mode 100644 java/ql/test/experimental/stubs/lingala-zip4j-2.11.5/net/lingala/zip4j/model/enums/AesKeyStrength.java
create mode 100644 java/ql/test/experimental/stubs/lingala-zip4j-2.11.5/net/lingala/zip4j/model/enums/AesVersion.java
create mode 100644 java/ql/test/experimental/stubs/lingala-zip4j-2.11.5/net/lingala/zip4j/model/enums/CompressionLevel.java
create mode 100644 java/ql/test/experimental/stubs/lingala-zip4j-2.11.5/net/lingala/zip4j/model/enums/CompressionMethod.java
create mode 100644 java/ql/test/experimental/stubs/lingala-zip4j-2.11.5/net/lingala/zip4j/model/enums/EncryptionMethod.java
create mode 100644 java/ql/test/experimental/stubs/lingala-zip4j-2.11.5/net/lingala/zip4j/progress/ProgressMonitor.java
create mode 100644 java/ql/test/experimental/stubs/lingala-zip4j-2.11.5/net/lingala/zip4j/util/PasswordCallback.java
create mode 100644 java/ql/test/experimental/stubs/org-springframework-6.1.4/org/reactivestreams/Publisher.java
create mode 100644 java/ql/test/experimental/stubs/org-springframework-6.1.4/org/reactivestreams/Subscriber.java
create mode 100644 java/ql/test/experimental/stubs/org-springframework-6.1.4/org/reactivestreams/Subscription.java
create mode 100644 java/ql/test/experimental/stubs/org-springframework-6.1.4/org/slf4j/Logger.java
create mode 100644 java/ql/test/experimental/stubs/org-springframework-6.1.4/org/slf4j/Marker.java
create mode 100644 java/ql/test/experimental/stubs/org-springframework-6.1.4/org/springframework/core/io/AbstractFileResolvingResource.java
create mode 100644 java/ql/test/experimental/stubs/org-springframework-6.1.4/org/springframework/core/io/AbstractResource.java
create mode 100644 java/ql/test/experimental/stubs/org-springframework-6.1.4/org/springframework/core/io/FileSystemResource.java
create mode 100644 java/ql/test/experimental/stubs/org-springframework-6.1.4/org/springframework/core/io/FileUrlResource.java
create mode 100644 java/ql/test/experimental/stubs/org-springframework-6.1.4/org/springframework/core/io/InputStreamSource.java
create mode 100644 java/ql/test/experimental/stubs/org-springframework-6.1.4/org/springframework/core/io/PathResource.java
create mode 100644 java/ql/test/experimental/stubs/org-springframework-6.1.4/org/springframework/core/io/Resource.java
create mode 100644 java/ql/test/experimental/stubs/org-springframework-6.1.4/org/springframework/core/io/UrlResource.java
create mode 100644 java/ql/test/experimental/stubs/org-springframework-6.1.4/org/springframework/core/io/WritableResource.java
create mode 100644 java/ql/test/experimental/stubs/org-springframework-6.1.4/org/springframework/util/FileCopyUtils.java
create mode 100644 java/ql/test/experimental/stubs/org-springframework-6.1.4/org/springframework/util/FileSystemUtils.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/auth/credentials/AwsCredentials.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/auth/credentials/AwsCredentialsProvider.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/awscore/AwsRequest.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/awscore/AwsRequestOverrideConfiguration.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/awscore/AwsResponse.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/awscore/AwsResponseMetadata.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/awscore/client/builder/AwsAsyncClientBuilder.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/awscore/client/builder/AwsClientBuilder.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/awscore/defaultsmode/DefaultsMode.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/awscore/eventstream/EventStreamResponseHandler.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/core/ApiName.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/core/BytesWrapper.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/core/CredentialType.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/core/FileTransformerConfiguration.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/core/RequestOverrideConfiguration.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/core/ResponseBytes.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/core/ResponseInputStream.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/core/SdkBytes.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/core/SdkClient.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/core/SdkField.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/core/SdkNumber.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/core/SdkPojo.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/core/SdkRequest.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/core/SdkResponse.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/core/ServiceConfiguration.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/core/async/AsyncRequestBody.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/core/async/AsyncResponseTransformer.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/core/async/BlockingInputStreamAsyncRequestBody.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/core/async/BlockingOutputStreamAsyncRequestBody.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/core/async/ResponsePublisher.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/core/async/SdkPublisher.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/core/client/builder/SdkAsyncClientBuilder.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/core/client/builder/SdkClientBuilder.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/core/client/config/ClientAsyncConfiguration.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/core/client/config/ClientOption.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/core/client/config/ClientOverrideConfiguration.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/core/client/config/SdkAdvancedAsyncClientOption.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/core/client/config/SdkAdvancedClientOption.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/core/document/Document.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/core/document/DocumentVisitor.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/core/document/VoidDocumentVisitor.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/core/exception/SdkException.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/core/interceptor/Context.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/core/interceptor/ExecutionAttribute.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/core/interceptor/ExecutionAttributes.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/core/interceptor/ExecutionInterceptor.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/core/internal/io/Releasable.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/core/internal/waiters/ResponseOrException.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/core/io/SdkFilterInputStream.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/core/protocol/MarshallLocation.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/core/protocol/MarshallingType.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/core/retry/RetryMode.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/core/retry/RetryPolicy.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/core/retry/RetryPolicyContext.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/core/retry/backoff/BackoffStrategy.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/core/retry/conditions/RetryCondition.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/core/signer/Signer.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/core/sync/RequestBody.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/core/traits/Trait.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/core/waiters/WaiterOverrideConfiguration.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/core/waiters/WaiterResponse.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/endpoints/Endpoint.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/endpoints/EndpointAttributeKey.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/endpoints/EndpointProvider.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/http/Abortable.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/http/AbortableInputStream.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/http/ContentStreamProvider.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/http/SdkHttpExecutionAttribute.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/http/SdkHttpExecutionAttributes.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/http/SdkHttpFullRequest.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/http/SdkHttpFullResponse.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/http/SdkHttpHeaders.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/http/SdkHttpMethod.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/http/SdkHttpRequest.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/http/SdkHttpResponse.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/http/async/AsyncExecuteRequest.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/http/async/SdkAsyncHttpClient.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/http/async/SdkAsyncHttpResponseHandler.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/http/async/SdkHttpContentPublisher.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/metrics/MetricCategory.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/metrics/MetricCollection.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/metrics/MetricCollector.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/metrics/MetricLevel.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/metrics/MetricPublisher.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/metrics/MetricRecord.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/metrics/SdkMetric.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/profiles/Profile.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/profiles/ProfileFile.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/regions/EndpointTag.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/regions/PartitionEndpointKey.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/regions/PartitionMetadata.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/regions/Region.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/regions/RegionMetadata.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/S3AsyncClient.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/S3AsyncClientBuilder.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/S3BaseClientBuilder.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/S3Configuration.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/S3CrtAsyncClientBuilder.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/S3Utilities.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/endpoints/S3EndpointParams.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/endpoints/S3EndpointProvider.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/AbortIncompleteMultipartUpload.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/AbortMultipartUploadRequest.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/AbortMultipartUploadResponse.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/AccelerateConfiguration.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/AccessControlPolicy.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/AccessControlTranslation.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/AnalyticsAndOperator.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/AnalyticsConfiguration.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/AnalyticsExportDestination.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/AnalyticsFilter.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/AnalyticsS3BucketDestination.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/AnalyticsS3ExportFileFormat.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/ArchiveStatus.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/Bucket.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/BucketAccelerateStatus.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/BucketCannedACL.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/BucketLifecycleConfiguration.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/BucketLocationConstraint.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/BucketLoggingStatus.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/BucketLogsPermission.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/BucketVersioningStatus.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/CORSConfiguration.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/CORSRule.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/CSVInput.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/CSVOutput.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/Checksum.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/ChecksumAlgorithm.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/ChecksumMode.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/CommonPrefix.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/CompleteMultipartUploadRequest.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/CompleteMultipartUploadResponse.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/CompletedMultipartUpload.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/CompletedPart.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/CompressionType.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/Condition.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/ContinuationEvent.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/CopyObjectRequest.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/CopyObjectResponse.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/CopyObjectResult.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/CopyPartResult.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/CreateBucketConfiguration.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/CreateBucketRequest.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/CreateBucketResponse.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/CreateMultipartUploadRequest.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/CreateMultipartUploadResponse.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/DefaultRetention.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/Delete.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/DeleteBucketAnalyticsConfigurationRequest.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/DeleteBucketAnalyticsConfigurationResponse.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/DeleteBucketCorsRequest.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/DeleteBucketCorsResponse.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/DeleteBucketEncryptionRequest.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/DeleteBucketEncryptionResponse.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/DeleteBucketIntelligentTieringConfigurationRequest.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/DeleteBucketIntelligentTieringConfigurationResponse.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/DeleteBucketInventoryConfigurationRequest.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/DeleteBucketInventoryConfigurationResponse.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/DeleteBucketLifecycleRequest.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/DeleteBucketLifecycleResponse.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/DeleteBucketMetricsConfigurationRequest.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/DeleteBucketMetricsConfigurationResponse.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/DeleteBucketOwnershipControlsRequest.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/DeleteBucketOwnershipControlsResponse.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/DeleteBucketPolicyRequest.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/DeleteBucketPolicyResponse.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/DeleteBucketReplicationRequest.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/DeleteBucketReplicationResponse.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/DeleteBucketRequest.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/DeleteBucketResponse.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/DeleteBucketTaggingRequest.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/DeleteBucketTaggingResponse.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/DeleteBucketWebsiteRequest.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/DeleteBucketWebsiteResponse.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/DeleteMarkerEntry.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/DeleteMarkerReplication.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/DeleteMarkerReplicationStatus.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/DeleteObjectRequest.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/DeleteObjectResponse.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/DeleteObjectTaggingRequest.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/DeleteObjectTaggingResponse.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/DeleteObjectsRequest.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/DeleteObjectsResponse.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/DeletePublicAccessBlockRequest.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/DeletePublicAccessBlockResponse.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/DeletedObject.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/Destination.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/EncodingType.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/Encryption.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/EncryptionConfiguration.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/EndEvent.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/ErrorDocument.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/Event.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/EventBridgeConfiguration.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/ExistingObjectReplication.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/ExistingObjectReplicationStatus.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/ExpirationStatus.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/ExpressionType.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/FileHeaderInfo.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/FilterRule.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/FilterRuleName.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/GetBucketAccelerateConfigurationRequest.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/GetBucketAccelerateConfigurationResponse.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/GetBucketAclRequest.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/GetBucketAclResponse.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/GetBucketAnalyticsConfigurationRequest.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/GetBucketAnalyticsConfigurationResponse.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/GetBucketCorsRequest.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/GetBucketCorsResponse.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/GetBucketEncryptionRequest.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/GetBucketEncryptionResponse.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/GetBucketIntelligentTieringConfigurationRequest.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/GetBucketIntelligentTieringConfigurationResponse.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/GetBucketInventoryConfigurationRequest.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/GetBucketInventoryConfigurationResponse.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/GetBucketLifecycleConfigurationRequest.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/GetBucketLifecycleConfigurationResponse.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/GetBucketLocationRequest.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/GetBucketLocationResponse.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/GetBucketLoggingRequest.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/GetBucketLoggingResponse.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/GetBucketMetricsConfigurationRequest.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/GetBucketMetricsConfigurationResponse.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/GetBucketNotificationConfigurationRequest.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/GetBucketNotificationConfigurationResponse.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/GetBucketOwnershipControlsRequest.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/GetBucketOwnershipControlsResponse.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/GetBucketPolicyRequest.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/GetBucketPolicyResponse.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/GetBucketPolicyStatusRequest.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/GetBucketPolicyStatusResponse.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/GetBucketReplicationRequest.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/GetBucketReplicationResponse.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/GetBucketRequestPaymentRequest.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/GetBucketRequestPaymentResponse.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/GetBucketTaggingRequest.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/GetBucketTaggingResponse.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/GetBucketVersioningRequest.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/GetBucketVersioningResponse.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/GetBucketWebsiteRequest.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/GetBucketWebsiteResponse.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/GetObjectAclRequest.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/GetObjectAclResponse.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/GetObjectAttributesParts.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/GetObjectAttributesRequest.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/GetObjectAttributesResponse.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/GetObjectLegalHoldRequest.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/GetObjectLegalHoldResponse.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/GetObjectLockConfigurationRequest.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/GetObjectLockConfigurationResponse.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/GetObjectRequest.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/GetObjectResponse.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/GetObjectRetentionRequest.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/GetObjectRetentionResponse.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/GetObjectTaggingRequest.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/GetObjectTaggingResponse.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/GetObjectTorrentRequest.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/GetObjectTorrentResponse.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/GetPublicAccessBlockRequest.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/GetPublicAccessBlockResponse.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/GetUrlRequest.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/GlacierJobParameters.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/Grant.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/Grantee.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/HeadBucketRequest.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/HeadBucketResponse.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/HeadObjectRequest.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/HeadObjectResponse.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/IndexDocument.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/Initiator.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/InputSerialization.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/IntelligentTieringAccessTier.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/IntelligentTieringAndOperator.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/IntelligentTieringConfiguration.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/IntelligentTieringFilter.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/IntelligentTieringStatus.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/InventoryConfiguration.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/InventoryDestination.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/InventoryEncryption.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/InventoryFilter.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/InventoryFormat.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/InventoryFrequency.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/InventoryIncludedObjectVersions.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/InventoryOptionalField.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/InventoryS3BucketDestination.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/InventorySchedule.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/JSONInput.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/JSONOutput.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/JSONType.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/LambdaFunctionConfiguration.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/LifecycleExpiration.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/LifecycleRule.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/LifecycleRuleAndOperator.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/LifecycleRuleFilter.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/ListBucketAnalyticsConfigurationsRequest.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/ListBucketAnalyticsConfigurationsResponse.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/ListBucketIntelligentTieringConfigurationsRequest.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/ListBucketIntelligentTieringConfigurationsResponse.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/ListBucketInventoryConfigurationsRequest.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/ListBucketInventoryConfigurationsResponse.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/ListBucketMetricsConfigurationsRequest.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/ListBucketMetricsConfigurationsResponse.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/ListBucketsRequest.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/ListBucketsResponse.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/ListMultipartUploadsRequest.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/ListMultipartUploadsResponse.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/ListObjectVersionsRequest.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/ListObjectVersionsResponse.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/ListObjectsRequest.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/ListObjectsResponse.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/ListObjectsV2Request.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/ListObjectsV2Response.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/ListPartsRequest.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/ListPartsResponse.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/LoggingEnabled.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/MFADelete.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/MFADeleteStatus.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/MetadataDirective.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/MetadataEntry.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/Metrics.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/MetricsAndOperator.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/MetricsConfiguration.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/MetricsFilter.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/MetricsStatus.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/MultipartUpload.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/NoncurrentVersionExpiration.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/NoncurrentVersionTransition.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/NotificationConfiguration.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/NotificationConfigurationFilter.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/ObjectAttributes.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/ObjectCannedACL.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/ObjectIdentifier.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/ObjectLockConfiguration.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/ObjectLockEnabled.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/ObjectLockLegalHold.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/ObjectLockLegalHoldStatus.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/ObjectLockMode.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/ObjectLockRetention.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/ObjectLockRetentionMode.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/ObjectLockRule.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/ObjectOwnership.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/ObjectPart.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/ObjectStorageClass.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/ObjectVersion.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/ObjectVersionStorageClass.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/OutputLocation.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/OutputSerialization.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/Owner.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/OwnerOverride.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/OwnershipControls.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/OwnershipControlsRule.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/ParquetInput.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/Part.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/Payer.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/Permission.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/PolicyStatus.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/Progress.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/ProgressEvent.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/Protocol.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/PublicAccessBlockConfiguration.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/PutBucketAccelerateConfigurationRequest.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/PutBucketAccelerateConfigurationResponse.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/PutBucketAclRequest.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/PutBucketAclResponse.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/PutBucketAnalyticsConfigurationRequest.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/PutBucketAnalyticsConfigurationResponse.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/PutBucketCorsRequest.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/PutBucketCorsResponse.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/PutBucketEncryptionRequest.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/PutBucketEncryptionResponse.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/PutBucketIntelligentTieringConfigurationRequest.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/PutBucketIntelligentTieringConfigurationResponse.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/PutBucketInventoryConfigurationRequest.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/PutBucketInventoryConfigurationResponse.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/PutBucketLifecycleConfigurationRequest.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/PutBucketLifecycleConfigurationResponse.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/PutBucketLoggingRequest.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/PutBucketLoggingResponse.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/PutBucketMetricsConfigurationRequest.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/PutBucketMetricsConfigurationResponse.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/PutBucketNotificationConfigurationRequest.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/PutBucketNotificationConfigurationResponse.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/PutBucketOwnershipControlsRequest.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/PutBucketOwnershipControlsResponse.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/PutBucketPolicyRequest.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/PutBucketPolicyResponse.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/PutBucketReplicationRequest.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/PutBucketReplicationResponse.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/PutBucketRequestPaymentRequest.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/PutBucketRequestPaymentResponse.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/PutBucketTaggingRequest.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/PutBucketTaggingResponse.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/PutBucketVersioningRequest.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/PutBucketVersioningResponse.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/PutBucketWebsiteRequest.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/PutBucketWebsiteResponse.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/PutObjectAclRequest.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/PutObjectAclResponse.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/PutObjectLegalHoldRequest.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/PutObjectLegalHoldResponse.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/PutObjectLockConfigurationRequest.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/PutObjectLockConfigurationResponse.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/PutObjectRequest.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/PutObjectResponse.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/PutObjectRetentionRequest.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/PutObjectRetentionResponse.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/PutObjectTaggingRequest.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/PutObjectTaggingResponse.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/PutPublicAccessBlockRequest.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/PutPublicAccessBlockResponse.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/QueueConfiguration.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/QuoteFields.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/RecordsEvent.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/Redirect.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/RedirectAllRequestsTo.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/ReplicaModifications.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/ReplicaModificationsStatus.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/ReplicationConfiguration.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/ReplicationRule.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/ReplicationRuleAndOperator.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/ReplicationRuleFilter.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/ReplicationRuleStatus.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/ReplicationStatus.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/ReplicationTime.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/ReplicationTimeStatus.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/ReplicationTimeValue.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/RequestCharged.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/RequestPayer.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/RequestPaymentConfiguration.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/RequestProgress.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/RestoreObjectRequest.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/RestoreObjectResponse.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/RestoreRequest.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/RestoreRequestType.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/RoutingRule.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/S3Error.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/S3KeyFilter.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/S3Location.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/S3Object.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/S3Request.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/S3Response.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/S3ResponseMetadata.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/SSEKMS.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/SSES3.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/ScanRange.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/SelectObjectContentEventStream.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/SelectObjectContentRequest.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/SelectObjectContentResponse.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/SelectObjectContentResponseHandler.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/SelectParameters.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/ServerSideEncryption.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/ServerSideEncryptionByDefault.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/ServerSideEncryptionConfiguration.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/ServerSideEncryptionRule.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/SourceSelectionCriteria.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/SseKmsEncryptedObjects.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/SseKmsEncryptedObjectsStatus.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/Stats.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/StatsEvent.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/StorageClass.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/StorageClassAnalysis.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/StorageClassAnalysisDataExport.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/StorageClassAnalysisSchemaVersion.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/Tag.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/Tagging.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/TaggingDirective.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/TargetGrant.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/Tier.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/Tiering.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/TopicConfiguration.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/Transition.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/TransitionStorageClass.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/Type.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/UploadPartCopyRequest.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/UploadPartCopyResponse.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/UploadPartRequest.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/UploadPartResponse.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/VersioningConfiguration.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/WebsiteConfiguration.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/WriteGetObjectResponseRequest.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/model/WriteGetObjectResponseResponse.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/paginators/ListMultipartUploadsPublisher.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/paginators/ListObjectVersionsPublisher.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/paginators/ListObjectsV2Publisher.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/paginators/ListPartsPublisher.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/services/s3/waiters/S3AsyncWaiter.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/transfer/s3/S3TransferManager.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/transfer/s3/config/DownloadFilter.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/transfer/s3/model/CompletedCopy.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/transfer/s3/model/CompletedDirectoryDownload.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/transfer/s3/model/CompletedDirectoryTransfer.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/transfer/s3/model/CompletedDirectoryUpload.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/transfer/s3/model/CompletedDownload.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/transfer/s3/model/CompletedFileDownload.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/transfer/s3/model/CompletedFileUpload.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/transfer/s3/model/CompletedObjectTransfer.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/transfer/s3/model/CompletedTransfer.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/transfer/s3/model/CompletedUpload.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/transfer/s3/model/Copy.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/transfer/s3/model/CopyRequest.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/transfer/s3/model/DirectoryDownload.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/transfer/s3/model/DirectoryTransfer.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/transfer/s3/model/DirectoryUpload.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/transfer/s3/model/Download.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/transfer/s3/model/DownloadDirectoryRequest.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/transfer/s3/model/DownloadFileRequest.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/transfer/s3/model/DownloadRequest.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/transfer/s3/model/FailedFileDownload.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/transfer/s3/model/FailedFileUpload.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/transfer/s3/model/FailedObjectTransfer.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/transfer/s3/model/FileDownload.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/transfer/s3/model/FileUpload.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/transfer/s3/model/ObjectTransfer.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/transfer/s3/model/ResumableFileDownload.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/transfer/s3/model/ResumableFileUpload.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/transfer/s3/model/ResumableTransfer.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/transfer/s3/model/Transfer.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/transfer/s3/model/TransferDirectoryRequest.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/transfer/s3/model/TransferObjectRequest.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/transfer/s3/model/TransferRequest.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/transfer/s3/model/Upload.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/transfer/s3/model/UploadDirectoryRequest.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/transfer/s3/model/UploadFileRequest.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/transfer/s3/model/UploadRequest.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/transfer/s3/progress/LoggingTransferListener.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/transfer/s3/progress/TransferListener.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/transfer/s3/progress/TransferProgress.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/transfer/s3/progress/TransferProgressSnapshot.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/utils/AttributeMap.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/utils/CancellableOutputStream.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/utils/SdkAutoCloseable.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/utils/builder/Buildable.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/utils/builder/CopyableBuilder.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/utils/builder/SdkBuilder.java
create mode 100644 java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/utils/builder/ToCopyableBuilder.java
diff --git a/java/ql/lib/ext/experimental/java.nio.model.yml b/java/ql/lib/ext/experimental/java.nio.model.yml
new file mode 100644
index 00000000000..6d6af865a39
--- /dev/null
+++ b/java/ql/lib/ext/experimental/java.nio.model.yml
@@ -0,0 +1,8 @@
+extensions:
+ - addsTo:
+ pack: codeql/java-all
+ extensible: sinkModel
+ data:
+ - ["java.nio.file","FileSystems",true,"getFileSystem","(URI)","","Argument[0]","path-injection","manual"]
+ - ["java.nio.channels","AsynchronousFileChannel",true,"open","(Path,OpenOption[])","","Argument[0]","path-injection","manual"]
+ - ["java.nio.channels","AsynchronousFileChannel",true,"open","(Path,Set,ExecutorService,FileAttribute[])","","Argument[0]","path-injection","manual"]
\ No newline at end of file
diff --git a/java/ql/lib/ext/experimental/java.util.zip.model.yml b/java/ql/lib/ext/experimental/java.util.zip.model.yml
new file mode 100644
index 00000000000..fb7b8f6671b
--- /dev/null
+++ b/java/ql/lib/ext/experimental/java.util.zip.model.yml
@@ -0,0 +1,6 @@
+extensions:
+ - addsTo:
+ pack: codeql/java-all
+ extensible: sinkModel
+ data:
+ - ["java.util.zip","ZipFile",true,"ZipFile","(String)","","Argument[0]","path-injection","manual"]
\ No newline at end of file
diff --git a/java/ql/lib/ext/experimental/s3-transfer-manager.model.yml b/java/ql/lib/ext/experimental/s3-transfer-manager.model.yml
index 8357414db3d..bd3a385ac04 100644
--- a/java/ql/lib/ext/experimental/s3-transfer-manager.model.yml
+++ b/java/ql/lib/ext/experimental/s3-transfer-manager.model.yml
@@ -10,4 +10,4 @@ extensions:
- ["software.amazon.awssdk.transfer.s3.model","ResumableFileDownload",true,"fromFile","(Path)","","Argument[0]","path-injection","manual"]
- ["software.amazon.awssdk.transfer.s3.model","ResumableFileDownload",true,"serializeToFile","(Path)","","Argument[0]","path-injection","manual"]
- ["software.amazon.awssdk.transfer.s3.model","ResumableFileUpload",true,"fromFile","(Path)","","Argument[0]","path-injection","manual"]
- - ["software.amazon.awssdk.transfer.s3.model","UploadDirectoryRequest$Builder",true,"source","(Path)","","Argument[0]","code-injection","manual"]
+ - ["software.amazon.awssdk.transfer.s3.model","UploadDirectoryRequest$Builder",true,"source","(Path)","","Argument[0]","path-injection","manual"]
diff --git a/java/ql/src/utils/modeleditor/FrameworkModeEndpointsQuery.qll b/java/ql/src/utils/modeleditor/FrameworkModeEndpointsQuery.qll
index 1853e54eef0..2990c4e94a1 100644
--- a/java/ql/src/utils/modeleditor/FrameworkModeEndpointsQuery.qll
+++ b/java/ql/src/utils/modeleditor/FrameworkModeEndpointsQuery.qll
@@ -1,6 +1,6 @@
private import java
+private import semmle.code.java.dataflow.ExternalFlow
private import semmle.code.java.dataflow.internal.DataFlowPrivate
-private import semmle.code.java.dataflow.internal.FlowSummaryImpl
private import semmle.code.java.dataflow.internal.ModelExclusions
private import ModelEditor
@@ -8,7 +8,7 @@ private import ModelEditor
* A class of effectively public callables from source code.
*/
class PublicEndpointFromSource extends Endpoint, ModelApi {
- override predicate isSource() { SourceSinkInterpretationInput::sourceElement(this, _, _, _, _) }
+ override predicate isSource() { this instanceof SourceCallable }
- override predicate isSink() { SourceSinkInterpretationInput::sinkElement(this, _, _, _, _) }
+ override predicate isSink() { this instanceof SinkCallable }
}
diff --git a/java/ql/src/utils/modelgenerator/internal/CaptureModels.qll b/java/ql/src/utils/modelgenerator/internal/CaptureModels.qll
index 4a7d97c6c60..0237e3fdc68 100644
--- a/java/ql/src/utils/modelgenerator/internal/CaptureModels.qll
+++ b/java/ql/src/utils/modelgenerator/internal/CaptureModels.qll
@@ -41,18 +41,21 @@ private module Printing implements PrintingSig {
module ModelPrinting = PrintingImpl;
+/**
+ * Holds if `c` is a relevant content kind, where the underlying type is relevant.
+ */
+private predicate isRelevantTypeInContent(DataFlow::Content c) {
+ isRelevantType(getUnderlyingContentType(c))
+}
+
/**
* Holds if data can flow from `node1` to `node2` either via a read or a write of an intermediate field `f`.
*/
private predicate isRelevantTaintStep(DataFlow::Node node1, DataFlow::Node node2) {
exists(DataFlow::Content f |
DataFlowPrivate::readStep(node1, f, node2) and
- if f instanceof DataFlow::FieldContent
- then isRelevantType(f.(DataFlow::FieldContent).getField().getType())
- else
- if f instanceof DataFlow::SyntheticFieldContent
- then isRelevantType(f.(DataFlow::SyntheticFieldContent).getField().getType())
- else any()
+ // Partially restrict the content types used for intermediate steps.
+ (not exists(getUnderlyingContentType(f)) or isRelevantTypeInContent(f))
)
or
exists(DataFlow::Content f | DataFlowPrivate::storeStep(node1, f, node2) |
@@ -61,12 +64,11 @@ private predicate isRelevantTaintStep(DataFlow::Node node1, DataFlow::Node node2
}
/**
- * Holds if content `c` is either a field or synthetic field of a relevant type
- * or a container like content.
+ * Holds if content `c` is either a field, a synthetic field or language specific
+ * content of a relevant type or a container like content.
*/
private predicate isRelevantContent(DataFlow::Content c) {
- isRelevantType(c.(DataFlow::FieldContent).getField().getType()) or
- isRelevantType(c.(DataFlow::SyntheticFieldContent).getField().getType()) or
+ isRelevantTypeInContent(c) or
DataFlowPrivate::containerContent(c)
}
@@ -258,6 +260,10 @@ module PropagateToSinkConfig implements DataFlow::ConfigSig {
predicate isBarrier(DataFlow::Node node) { sinkModelSanitizer(node) }
DataFlow::FlowFeature getAFeature() { result instanceof DataFlow::FeatureHasSourceCallContext }
+
+ predicate isAdditionalFlowStep(DataFlow::Node node1, DataFlow::Node node2) {
+ isRelevantTaintStep(node1, node2)
+ }
}
private module PropagateToSink = TaintTracking::Global;
diff --git a/java/ql/src/utils/modelgenerator/internal/CaptureModelsSpecific.qll b/java/ql/src/utils/modelgenerator/internal/CaptureModelsSpecific.qll
index 70e750b2ee8..1ba7ece8e8e 100644
--- a/java/ql/src/utils/modelgenerator/internal/CaptureModelsSpecific.qll
+++ b/java/ql/src/utils/modelgenerator/internal/CaptureModelsSpecific.qll
@@ -186,6 +186,14 @@ predicate isRelevantType(J::Type t) {
)
}
+/**
+ * Gets the underlying type of the content `c`.
+ */
+J::Type getUnderlyingContentType(DataFlow::Content c) {
+ result = c.(DataFlow::FieldContent).getField().getType() or
+ result = c.(DataFlow::SyntheticFieldContent).getField().getType()
+}
+
/**
* Gets the MaD string representation of the qualifier.
*/
diff --git a/java/ql/test/experimental/query-tests/security/CWE-022/src/main/java/com/PathInjection/S3PathInjection.java b/java/ql/test/experimental/query-tests/security/CWE-022/AmazonS3.java
similarity index 78%
rename from java/ql/test/experimental/query-tests/security/CWE-022/src/main/java/com/PathInjection/S3PathInjection.java
rename to java/ql/test/experimental/query-tests/security/CWE-022/AmazonS3.java
index 8c6b3eb0f2e..2d737c64f4d 100644
--- a/java/ql/test/experimental/query-tests/security/CWE-022/src/main/java/com/PathInjection/S3PathInjection.java
+++ b/java/ql/test/experimental/query-tests/security/CWE-022/AmazonS3.java
@@ -1,15 +1,24 @@
-package com.PathInjection;
-
import software.amazon.awssdk.transfer.s3.S3TransferManager;
-import software.amazon.awssdk.transfer.s3.model.*;
+import software.amazon.awssdk.transfer.s3.model.UploadFileRequest;
+import software.amazon.awssdk.transfer.s3.model.FileUpload;
+import software.amazon.awssdk.transfer.s3.model.FileDownload;
+import software.amazon.awssdk.transfer.s3.model.DirectoryUpload;
+import software.amazon.awssdk.transfer.s3.model.CompletedDirectoryUpload;
+import software.amazon.awssdk.transfer.s3.model.DirectoryDownload;
+import software.amazon.awssdk.transfer.s3.model.CompletedDirectoryDownload;
+import software.amazon.awssdk.transfer.s3.model.DownloadDirectoryRequest;
+import software.amazon.awssdk.transfer.s3.model.DownloadFileRequest;
+import software.amazon.awssdk.transfer.s3.model.ResumableFileUpload;
+import software.amazon.awssdk.transfer.s3.model.UploadDirectoryRequest;
+import software.amazon.awssdk.transfer.s3.model.ResumableFileDownload;
+import software.amazon.awssdk.transfer.s3.model.CompletedFileUpload;
+import software.amazon.awssdk.transfer.s3.model.CompletedFileDownload;
import software.amazon.awssdk.transfer.s3.progress.LoggingTransferListener;
-import java.net.MalformedURLException;
import java.net.URI;
-import java.net.URISyntaxException;
import java.nio.file.Paths;
-public class S3PathInjection {
+public class AmazonS3 {
S3TransferManager transferManager = S3TransferManager.create();
String bucketName = "bucketTest";
String key = "keyTest";
@@ -19,7 +28,7 @@ public class S3PathInjection {
UploadFileRequest.builder()
.putObjectRequest(b -> b.bucket(this.bucketName).key(this.key))
.addTransferListener(LoggingTransferListener.create())
- .source(Paths.get(filePathURI)) // $ hasTaintFlow
+ .source(Paths.get(filePathURI)) // $ hasTaintFlow="get(...)"
.build();
FileUpload fileUpload = this.transferManager.uploadFile(uploadFileRequest);
@@ -33,7 +42,7 @@ public class S3PathInjection {
UploadFileRequest.builder()
.putObjectRequest(b -> b.bucket(this.bucketName).key(this.key))
.addTransferListener(LoggingTransferListener.create())
- .source(Paths.get(filePathURI)) // $ hasTaintFlow
+ .source(Paths.get(filePathURI)) // $ hasTaintFlow="get(...)"
.build();
// Initiate the transfer
@@ -41,10 +50,10 @@ public class S3PathInjection {
// Pause the upload
ResumableFileUpload resumableFileUpload = upload.pause();
// Optionally, persist the resumableFileUpload
- resumableFileUpload.serializeToFile(Paths.get(filePathURI)); // $ hasTaintFlow
+ resumableFileUpload.serializeToFile(Paths.get(filePathURI)); // $ hasTaintFlow="get(...)"
// Retrieve the resumableFileUpload from the file
ResumableFileUpload persistedResumableFileUpload =
- ResumableFileUpload.fromFile(Paths.get(filePathURI)); // $ hasTaintFlow
+ ResumableFileUpload.fromFile(Paths.get(filePathURI)); // $ hasTaintFlow="get(...)"
// Resume the upload
FileUpload resumedUpload = this.transferManager.resumeUploadFile(persistedResumableFileUpload);
// Wait for the transfer to complete
@@ -59,7 +68,7 @@ public class S3PathInjection {
DownloadFileRequest.builder()
.getObjectRequest(b -> b.bucket(this.bucketName).key(this.key))
.addTransferListener(LoggingTransferListener.create())
- .destination(Paths.get(downloadedFileWithPath)) // $ hasTaintFlow
+ .destination(Paths.get(downloadedFileWithPath)) // $ hasTaintFlow="get(...)"
.build();
// Initiate the transfer
@@ -67,10 +76,10 @@ public class S3PathInjection {
// Pause the download
ResumableFileDownload resumableFileDownload = download.pause();
// Optionally, persist the resumableFileDownload
- resumableFileDownload.serializeToFile(Paths.get(downloadedFileWithPath)); // $ hasTaintFlow
+ resumableFileDownload.serializeToFile(Paths.get(downloadedFileWithPath)); // $ hasTaintFlow="get(...)"
// Retrieve the resumableFileDownload from the file
ResumableFileDownload persistedResumableFileDownload =
- ResumableFileDownload.fromFile(Paths.get(downloadedFileWithPath)); // $ hasTaintFlow
+ ResumableFileDownload.fromFile(Paths.get(downloadedFileWithPath)); // $ hasTaintFlow="get(...)"
// Resume the download
FileDownload resumedDownload =
this.transferManager.resumeDownloadFile(persistedResumableFileDownload);
@@ -85,7 +94,7 @@ public class S3PathInjection {
DirectoryUpload directoryUpload =
this.transferManager.uploadDirectory(
UploadDirectoryRequest.builder()
- .source(Paths.get(sourceDirectory)) // $ hasTaintFlow
+ .source(Paths.get(sourceDirectory)) // $ hasTaintFlow="get(...)"
.bucket(this.bucketName)
.build());
@@ -98,7 +107,7 @@ public class S3PathInjection {
DownloadFileRequest.builder()
.getObjectRequest(b -> b.bucket(this.bucketName).key(this.key))
.addTransferListener(LoggingTransferListener.create())
- .destination(Paths.get(downloadedFileWithPath)) // $ hasTaintFlow
+ .destination(Paths.get(downloadedFileWithPath)) // $ hasTaintFlow="get(...)"
.build();
FileDownload downloadFile = this.transferManager.downloadFile(downloadFileRequest);
@@ -111,7 +120,7 @@ public class S3PathInjection {
DirectoryDownload directoryDownload =
this.transferManager.downloadDirectory(
DownloadDirectoryRequest.builder()
- .destination(Paths.get(destinationPathURI)) // $ hasTaintFlow
+ .destination(Paths.get(destinationPathURI)) // $ hasTaintFlow="get(...)"
.bucket(this.bucketName)
.build());
CompletedDirectoryDownload completedDirectoryDownload =
diff --git a/java/ql/test/experimental/query-tests/security/CWE-022/src/main/java/com/PathInjection/CommonsIOPathInjection.java b/java/ql/test/experimental/query-tests/security/CWE-022/JavaNio.java
similarity index 53%
rename from java/ql/test/experimental/query-tests/security/CWE-022/src/main/java/com/PathInjection/CommonsIOPathInjection.java
rename to java/ql/test/experimental/query-tests/security/CWE-022/JavaNio.java
index f3dbe21cbfc..f8258bcc173 100644
--- a/java/ql/test/experimental/query-tests/security/CWE-022/src/main/java/com/PathInjection/CommonsIOPathInjection.java
+++ b/java/ql/test/experimental/query-tests/security/CWE-022/JavaNio.java
@@ -1,38 +1,39 @@
-package com.PathInjection;
-
-import java.io.*;
+import java.io.IOException;
+import java.io.File;
import java.nio.channels.AsynchronousFileChannel;
-import java.nio.file.*;
+import java.nio.file.Path;
+import java.nio.file.LinkOption;
+import java.nio.file.FileSystems;
import java.nio.file.attribute.FileAttribute;
import java.util.Set;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
-class fileAttr implements FileAttribute {
- public String name() {
- return "file";
+public class JavaNio {
+ static class FileAttr implements FileAttribute {
+ public String name() {
+ return "file";
+ }
+
+ public String value() {
+ return "value";
+ }
}
- public String value() {
- return "value";
- }
-}
-
-public class CommonsIOPathInjection {
public void PathInjection(Path src, File srcF) throws IOException {
- AsynchronousFileChannel.open(src); // $ hasTaintFlow
- AsynchronousFileChannel.open(src, LinkOption.NOFOLLOW_LINKS); // $ hasTaintFlow
+ AsynchronousFileChannel.open(src); // $ hasTaintFlow="src"
+ AsynchronousFileChannel.open(src, LinkOption.NOFOLLOW_LINKS); // $ hasTaintFlow="src"
AsynchronousFileChannel.open(
- src, LinkOption.NOFOLLOW_LINKS, LinkOption.NOFOLLOW_LINKS); // $ hasTaintFlow
+ src, LinkOption.NOFOLLOW_LINKS, LinkOption.NOFOLLOW_LINKS); // $ hasTaintFlow="src"
ExecutorService executor = Executors.newFixedThreadPool(10);
AsynchronousFileChannel.open(
- src, Set.of(LinkOption.NOFOLLOW_LINKS), executor); // $ hasTaintFlow
+ src, Set.of(LinkOption.NOFOLLOW_LINKS), executor); // $ hasTaintFlow="src"
AsynchronousFileChannel.open(
- src, // $ hasTaintFlow
+ src, // $ hasTaintFlow="src"
Set.of(LinkOption.NOFOLLOW_LINKS),
executor,
- new fileAttr());
+ new FileAttr());
- FileSystems.getFileSystem(srcF.toURI()); // $ hasTaintFlow
+ FileSystems.getFileSystem(srcF.toURI()); // $ hasTaintFlow="toURI(...)"
}
}
diff --git a/java/ql/test/experimental/query-tests/security/CWE-022/Main.java b/java/ql/test/experimental/query-tests/security/CWE-022/Main.java
new file mode 100755
index 00000000000..24f92764062
--- /dev/null
+++ b/java/ql/test/experimental/query-tests/security/CWE-022/Main.java
@@ -0,0 +1,35 @@
+import java.io.BufferedReader;
+import java.io.InputStreamReader;
+import java.io.File;
+import java.io.IOException;
+import java.nio.charset.StandardCharsets;
+import java.nio.file.Path;
+import java.net.Socket;
+
+public class Main {
+ public void sendUserFileGood(Socket sock) throws IOException {
+ BufferedReader filenameReader =
+ new BufferedReader(new InputStreamReader(sock.getInputStream(), StandardCharsets.UTF_8));
+ String path = filenameReader.readLine();
+ Path src = Path.of(path);
+ File srcF = new File(path);
+
+ new JavaNio().PathInjection(src, srcF);
+
+ new SpringIo().PathInjection(path);
+
+ AmazonS3 s3PathInjection = new AmazonS3();
+ s3PathInjection.downloadFileResumable(src.toUri());
+ s3PathInjection.downloadFile(path);
+ s3PathInjection.downloadObjectsToDirectory(src.toUri());
+ s3PathInjection.uploadFileResumable(src.toUri());
+ s3PathInjection.uploadDirectory(src.toUri());
+ s3PathInjection.uploadFile(src.toUri());
+
+ Zip4j zip4jfile = new Zip4j();
+ zip4jfile.PathInjection(path);
+
+ ZipFile zipfile = new ZipFile();
+ zipfile.PathInjection(path);
+ }
+}
diff --git a/java/ql/test/experimental/query-tests/security/CWE-022/PathInjection.iml b/java/ql/test/experimental/query-tests/security/CWE-022/PathInjection.iml
new file mode 100644
index 00000000000..e6989da962e
--- /dev/null
+++ b/java/ql/test/experimental/query-tests/security/CWE-022/PathInjection.iml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/java/ql/test/experimental/query-tests/security/CWE-022/SpringIo.java b/java/ql/test/experimental/query-tests/security/CWE-022/SpringIo.java
new file mode 100755
index 00000000000..1293c0f122d
--- /dev/null
+++ b/java/ql/test/experimental/query-tests/security/CWE-022/SpringIo.java
@@ -0,0 +1,46 @@
+import java.io.File;
+import java.io.IOException;
+import java.net.URI;
+import java.nio.file.FileSystems;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import org.springframework.core.io.FileUrlResource;
+import org.springframework.core.io.FileSystemResource;
+import org.springframework.core.io.PathResource;
+import org.springframework.core.io.UrlResource;
+import org.springframework.util.FileCopyUtils;
+import org.springframework.util.FileSystemUtils;
+
+public class SpringIo {
+ public void PathInjection(String path) throws IOException {
+ Path fileStorageLocation = Paths.get(path).toAbsolutePath().normalize();
+ Path filePath = fileStorageLocation.resolve(path).normalize();
+ File pathFile = new File(path);
+
+ new UrlResource(filePath.toUri()); // $ hasTaintFlow="toUri(...)"
+ new UrlResource(filePath.toUri().toURL()); // $ hasTaintFlow="toURL(...)"
+ new UrlResource("file", path); // $ hasTaintFlow="path"
+ new UrlResource("file", path, "#"); // $ hasTaintFlow="path"
+ new UrlResource(path); // $ hasTaintFlow="path"
+
+ new PathResource(path); // $ hasTaintFlow="path"
+ new PathResource(filePath); // $ hasTaintFlow="filePath"
+ new PathResource(filePath.toUri()); // $ hasTaintFlow="toUri(...)"
+
+ new FileUrlResource(filePath.toUri().toURL()); // $ hasTaintFlow="toURL(...)"
+ new FileUrlResource(path); // $ hasTaintFlow="path"
+
+ new FileSystemResource(pathFile); // $ hasTaintFlow="pathFile"
+ new FileSystemResource(path); // $ hasTaintFlow="path"
+ new FileSystemResource(filePath); // $ hasTaintFlow="filePath"
+ new FileSystemResource(
+ FileSystems.getFileSystem(URI.create("file:///")), path); // $ hasTaintFlow="path"
+
+ FileSystemUtils.copyRecursively(filePath, filePath.resolve("/newPath")); // $ hasTaintFlow="filePath" hasTaintFlow="resolve(...)"
+ FileSystemUtils.copyRecursively(pathFile, pathFile); // $ hasTaintFlow="pathFile"
+ FileSystemUtils.deleteRecursively(pathFile); // $ hasTaintFlow="pathFile"
+ FileSystemUtils.deleteRecursively(filePath); // $ hasTaintFlow="filePath"
+ FileCopyUtils.copy(pathFile, pathFile); // $ hasTaintFlow="pathFile"
+ FileCopyUtils.copyToByteArray(pathFile); // $ hasTaintFlow="pathFile"
+ }
+}
diff --git a/java/ql/test/experimental/query-tests/security/CWE-022/TaintedPath.expected b/java/ql/test/experimental/query-tests/security/CWE-022/TaintedPath.expected
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/java/ql/test/experimental/query-tests/security/CWE-022/TaintedPath.ql b/java/ql/test/experimental/query-tests/security/CWE-022/TaintedPath.ql
index 25e5bf1df87..36efd8724cc 100644
--- a/java/ql/test/experimental/query-tests/security/CWE-022/TaintedPath.ql
+++ b/java/ql/test/experimental/query-tests/security/CWE-022/TaintedPath.ql
@@ -1,4 +1,9 @@
import java
import TestUtilities.InlineFlowTest
import semmle.code.java.security.TaintedPathQuery
-import TaintFlowTest
+import TaintFlowTestArgString
+
+string getArgString(DataFlow::Node src, DataFlow::Node sink) {
+ exists(src) and
+ result = "\"" + sink.toString() + "\""
+}
diff --git a/java/ql/test/experimental/query-tests/security/CWE-022/Zip4j.java b/java/ql/test/experimental/query-tests/security/CWE-022/Zip4j.java
new file mode 100755
index 00000000000..d600b2a0e26
--- /dev/null
+++ b/java/ql/test/experimental/query-tests/security/CWE-022/Zip4j.java
@@ -0,0 +1,9 @@
+import java.io.IOException;
+import net.lingala.zip4j.ZipFile;
+
+public class Zip4j {
+ public void PathInjection(String path) throws IOException {
+ ZipFile zipfile = new ZipFile(path); // $ hasTaintFlow="path"
+ zipfile.extractAll(path); // $ hasTaintFlow="path"
+ }
+}
diff --git a/java/ql/test/experimental/query-tests/security/CWE-022/ZipFile.java b/java/ql/test/experimental/query-tests/security/CWE-022/ZipFile.java
new file mode 100755
index 00000000000..0cd0d3421e9
--- /dev/null
+++ b/java/ql/test/experimental/query-tests/security/CWE-022/ZipFile.java
@@ -0,0 +1,7 @@
+import java.io.IOException;
+
+public class ZipFile {
+ public void PathInjection(String path) throws IOException {
+ new java.util.zip.ZipFile(path); // $ hasTaintFlow="path"
+ }
+}
diff --git a/java/ql/test/experimental/query-tests/security/CWE-022/options b/java/ql/test/experimental/query-tests/security/CWE-022/options
new file mode 100644
index 00000000000..8e0e003f775
--- /dev/null
+++ b/java/ql/test/experimental/query-tests/security/CWE-022/options
@@ -0,0 +1 @@
+//semmle-extractor-options: --javac-args -cp ${testdir}/../../../stubs/lingala-zip4j-2.11.5:${testdir}/../../../stubs/software-amazon-awssdk-crt-0.20.3:${testdir}/../../../stubs/org-springframework-6.1.4
diff --git a/java/ql/test/experimental/query-tests/security/CWE-022/src/main/java/com/PathInjection/HelloServlet.java b/java/ql/test/experimental/query-tests/security/CWE-022/src/main/java/com/PathInjection/HelloServlet.java
deleted file mode 100755
index 45a231dc898..00000000000
--- a/java/ql/test/experimental/query-tests/security/CWE-022/src/main/java/com/PathInjection/HelloServlet.java
+++ /dev/null
@@ -1,45 +0,0 @@
-package com.PathInjection;
-
-import java.io.*;
-import java.io.IOException;
-import java.net.URISyntaxException;
-import java.nio.file.Path;
-import javax.servlet.annotation.MultipartConfig;
-import javax.servlet.annotation.WebServlet;
-import javax.servlet.http.HttpServlet;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import net.lingala.zip4j.ZipFile;
-
-@WebServlet(
- name = "helloServlet",
- urlPatterns = {"/hello"})
-@MultipartConfig()
-public class HelloServlet extends HttpServlet {
-
- public void init() {}
-
- public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
- String path = request.getParameter("path");
- Path src = Path.of(path);
- File srcF = new File(path);
- new CommonsIOPathInjection().PathInjection(src, srcF);
- new SpringIoPathInjection().PathInjection(path);
- S3PathInjection s3PathInjection = new S3PathInjection();
- s3PathInjection.downloadFileResumable(src.toUri());
- s3PathInjection.downloadFile(path);
- s3PathInjection.downloadObjectsToDirectory(src.toUri());
- s3PathInjection.uploadFileResumable(src.toUri());
- s3PathInjection.uploadDirectory(src.toUri());
- s3PathInjection.uploadFile(src.toUri());
-
- ZipFile zipfile = new ZipFile(path);
- zipfile.extractAll(path);
- new java.util.zip.ZipFile(path);
-
- PrintWriter out = response.getWriter();
- response.setContentType("text/html");
- out.println("end");
- }
-}
diff --git a/java/ql/test/experimental/query-tests/security/CWE-022/src/main/java/com/PathInjection/SpringIoPathInjection.java b/java/ql/test/experimental/query-tests/security/CWE-022/src/main/java/com/PathInjection/SpringIoPathInjection.java
deleted file mode 100755
index 409e967663d..00000000000
--- a/java/ql/test/experimental/query-tests/security/CWE-022/src/main/java/com/PathInjection/SpringIoPathInjection.java
+++ /dev/null
@@ -1,47 +0,0 @@
-package com.PathInjection;
-
-import java.io.*;
-import java.io.IOException;
-import java.net.URI;
-import java.nio.file.FileSystems;
-import java.nio.file.Path;
-import java.nio.file.Paths;
-
-import org.springframework.core.io.*;
-import org.springframework.util.FileCopyUtils;
-import org.springframework.util.FileSystemUtils;
-import org.springframework.util.ResourceUtils;
-
-public class SpringIoPathInjection {
- public void PathInjection(String path) throws IOException {
- Path fileStorageLocation = Paths.get(path).toAbsolutePath().normalize();
- Path filePath = fileStorageLocation.resolve(path).normalize();
- File pathFile = new File(path);
-
- new UrlResource(filePath.toUri()); // $ hasTaintFlow
- new UrlResource(filePath.toUri().toURL()); // $ hasTaintFlow
- new UrlResource("file", path); // $ hasTaintFlow
- new UrlResource("file", path, "#"); // $ hasTaintFlow
- new UrlResource(path); // $ hasTaintFlow
-
- new PathResource(path); // $ hasTaintFlow
- new PathResource(filePath); // $ hasTaintFlow
- new PathResource(filePath.toUri()); // $ hasTaintFlow
-
- new FileUrlResource(filePath.toUri().toURL()); // $ hasTaintFlow
- new FileUrlResource(path); // $ hasTaintFlow
-
- new FileSystemResource(pathFile); // $ hasTaintFlow
- new FileSystemResource(path); // $ hasTaintFlow
- new FileSystemResource(filePath); // $ hasTaintFlow
- new FileSystemResource(
- FileSystems.getFileSystem(URI.create("file:///")), path); // $ hasTaintFlow
-
- FileSystemUtils.copyRecursively(filePath, filePath.resolve("/newPath")); // $ hasTaintFlow
- FileSystemUtils.copyRecursively(pathFile, pathFile); // $ hasTaintFlow
- FileSystemUtils.deleteRecursively(pathFile); // $ hasTaintFlow
- FileSystemUtils.deleteRecursively(filePath); // $ hasTaintFlow
- FileCopyUtils.copy(pathFile, pathFile); // $ hasTaintFlow
- FileCopyUtils.copyToByteArray(pathFile); // $ hasTaintFlow
- }
-}
diff --git a/java/ql/test/experimental/stubs/lingala-zip4j-2.11.5/net/lingala/zip4j/ZipFile.java b/java/ql/test/experimental/stubs/lingala-zip4j-2.11.5/net/lingala/zip4j/ZipFile.java
new file mode 100644
index 00000000000..243f3fd2f56
--- /dev/null
+++ b/java/ql/test/experimental/stubs/lingala-zip4j-2.11.5/net/lingala/zip4j/ZipFile.java
@@ -0,0 +1,78 @@
+// Generated automatically from net.lingala.zip4j.ZipFile for testing purposes
+
+package net.lingala.zip4j;
+
+import java.io.Closeable;
+import java.io.File;
+import java.io.InputStream;
+import java.nio.charset.Charset;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.ThreadFactory;
+import net.lingala.zip4j.io.inputstream.ZipInputStream;
+import net.lingala.zip4j.model.FileHeader;
+import net.lingala.zip4j.model.UnzipParameters;
+import net.lingala.zip4j.model.ZipParameters;
+import net.lingala.zip4j.progress.ProgressMonitor;
+
+public class ZipFile implements Closeable
+{
+ protected ZipFile() {}
+ public Charset getCharset(){ return null; }
+ public ExecutorService getExecutorService(){ return null; }
+ public File getFile(){ return null; }
+ public FileHeader getFileHeader(String p0){ return null; }
+ public List getSplitZipFiles(){ return null; }
+ public List getFileHeaders(){ return null; }
+ public ProgressMonitor getProgressMonitor(){ return null; }
+ public String getComment(){ return null; }
+ public String toString(){ return null; }
+ public ZipFile(File p0){}
+ public ZipFile(File p0, char[] p1){}
+ public ZipFile(String p0){}
+ public ZipFile(String p0, char[] p1){}
+ public ZipInputStream getInputStream(FileHeader p0){ return null; }
+ public boolean isEncrypted(){ return false; }
+ public boolean isRunInThread(){ return false; }
+ public boolean isSplitArchive(){ return false; }
+ public boolean isUseUtf8CharsetForPasswords(){ return false; }
+ public boolean isValidZipFile(){ return false; }
+ public int getBufferSize(){ return 0; }
+ public void addFile(File p0){}
+ public void addFile(File p0, ZipParameters p1){}
+ public void addFile(String p0){}
+ public void addFile(String p0, ZipParameters p1){}
+ public void addFiles(List p0){}
+ public void addFiles(List p0, ZipParameters p1){}
+ public void addFolder(File p0){}
+ public void addFolder(File p0, ZipParameters p1){}
+ public void addStream(InputStream p0, ZipParameters p1){}
+ public void close(){}
+ public void createSplitZipFile(List p0, ZipParameters p1, boolean p2, long p3){}
+ public void createSplitZipFileFromFolder(File p0, ZipParameters p1, boolean p2, long p3){}
+ public void extractAll(String p0){}
+ public void extractAll(String p0, UnzipParameters p1){}
+ public void extractFile(FileHeader p0, String p1){}
+ public void extractFile(FileHeader p0, String p1, String p2){}
+ public void extractFile(FileHeader p0, String p1, String p2, UnzipParameters p3){}
+ public void extractFile(FileHeader p0, String p1, UnzipParameters p2){}
+ public void extractFile(String p0, String p1){}
+ public void extractFile(String p0, String p1, String p2){}
+ public void extractFile(String p0, String p1, String p2, UnzipParameters p3){}
+ public void extractFile(String p0, String p1, UnzipParameters p2){}
+ public void mergeSplitFiles(File p0){}
+ public void removeFile(FileHeader p0){}
+ public void removeFile(String p0){}
+ public void removeFiles(List p0){}
+ public void renameFile(FileHeader p0, String p1){}
+ public void renameFile(String p0, String p1){}
+ public void renameFiles(Map p0){}
+ public void setBufferSize(int p0){}
+ public void setCharset(Charset p0){}
+ public void setComment(String p0){}
+ public void setPassword(char[] p0){}
+ public void setRunInThread(boolean p0){}
+ public void setThreadFactory(ThreadFactory p0){}
+ public void setUseUtf8CharsetForPasswords(boolean p0){}
+}
diff --git a/java/ql/test/experimental/stubs/lingala-zip4j-2.11.5/net/lingala/zip4j/headers/HeaderSignature.java b/java/ql/test/experimental/stubs/lingala-zip4j-2.11.5/net/lingala/zip4j/headers/HeaderSignature.java
new file mode 100644
index 00000000000..ec37ad9ab8e
--- /dev/null
+++ b/java/ql/test/experimental/stubs/lingala-zip4j-2.11.5/net/lingala/zip4j/headers/HeaderSignature.java
@@ -0,0 +1,11 @@
+// Generated automatically from net.lingala.zip4j.headers.HeaderSignature for testing purposes
+
+package net.lingala.zip4j.headers;
+
+
+public enum HeaderSignature
+{
+ AES_EXTRA_DATA_RECORD, ARCEXTDATREC, CENTRAL_DIRECTORY, DIGITAL_SIGNATURE, END_OF_CENTRAL_DIRECTORY, EXTRA_DATA_RECORD, LOCAL_FILE_HEADER, SPLIT_ZIP, TEMPORARY_SPANNING_MARKER, ZIP64_END_CENTRAL_DIRECTORY_LOCATOR, ZIP64_END_CENTRAL_DIRECTORY_RECORD, ZIP64_EXTRA_FIELD_SIGNATURE;
+ private HeaderSignature() {}
+ public long getValue(){ return 0; }
+}
diff --git a/java/ql/test/experimental/stubs/lingala-zip4j-2.11.5/net/lingala/zip4j/io/inputstream/ZipInputStream.java b/java/ql/test/experimental/stubs/lingala-zip4j-2.11.5/net/lingala/zip4j/io/inputstream/ZipInputStream.java
new file mode 100644
index 00000000000..66fb776ba85
--- /dev/null
+++ b/java/ql/test/experimental/stubs/lingala-zip4j-2.11.5/net/lingala/zip4j/io/inputstream/ZipInputStream.java
@@ -0,0 +1,31 @@
+// Generated automatically from net.lingala.zip4j.io.inputstream.ZipInputStream for testing purposes
+
+package net.lingala.zip4j.io.inputstream;
+
+import java.io.InputStream;
+import java.nio.charset.Charset;
+import net.lingala.zip4j.model.FileHeader;
+import net.lingala.zip4j.model.LocalFileHeader;
+import net.lingala.zip4j.model.Zip4jConfig;
+import net.lingala.zip4j.util.PasswordCallback;
+
+public class ZipInputStream extends InputStream
+{
+ protected ZipInputStream() {}
+ public LocalFileHeader getNextEntry(){ return null; }
+ public LocalFileHeader getNextEntry(FileHeader p0, boolean p1){ return null; }
+ public ZipInputStream(InputStream p0){}
+ public ZipInputStream(InputStream p0, Charset p1){}
+ public ZipInputStream(InputStream p0, PasswordCallback p1){}
+ public ZipInputStream(InputStream p0, PasswordCallback p1, Charset p2){}
+ public ZipInputStream(InputStream p0, PasswordCallback p1, Zip4jConfig p2){}
+ public ZipInputStream(InputStream p0, char[] p1){}
+ public ZipInputStream(InputStream p0, char[] p1, Charset p2){}
+ public ZipInputStream(InputStream p0, char[] p1, Zip4jConfig p2){}
+ public int available(){ return 0; }
+ public int read(){ return 0; }
+ public int read(byte[] p0){ return 0; }
+ public int read(byte[] p0, int p1, int p2){ return 0; }
+ public void close(){}
+ public void setPassword(char[] p0){}
+}
diff --git a/java/ql/test/experimental/stubs/lingala-zip4j-2.11.5/net/lingala/zip4j/model/AESExtraDataRecord.java b/java/ql/test/experimental/stubs/lingala-zip4j-2.11.5/net/lingala/zip4j/model/AESExtraDataRecord.java
new file mode 100644
index 00000000000..21be6384750
--- /dev/null
+++ b/java/ql/test/experimental/stubs/lingala-zip4j-2.11.5/net/lingala/zip4j/model/AESExtraDataRecord.java
@@ -0,0 +1,23 @@
+// Generated automatically from net.lingala.zip4j.model.AESExtraDataRecord for testing purposes
+
+package net.lingala.zip4j.model;
+
+import net.lingala.zip4j.model.ZipHeader;
+import net.lingala.zip4j.model.enums.AesKeyStrength;
+import net.lingala.zip4j.model.enums.AesVersion;
+import net.lingala.zip4j.model.enums.CompressionMethod;
+
+public class AESExtraDataRecord extends ZipHeader
+{
+ public AESExtraDataRecord(){}
+ public AesKeyStrength getAesKeyStrength(){ return null; }
+ public AesVersion getAesVersion(){ return null; }
+ public CompressionMethod getCompressionMethod(){ return null; }
+ public String getVendorID(){ return null; }
+ public int getDataSize(){ return 0; }
+ public void setAesKeyStrength(AesKeyStrength p0){}
+ public void setAesVersion(AesVersion p0){}
+ public void setCompressionMethod(CompressionMethod p0){}
+ public void setDataSize(int p0){}
+ public void setVendorID(String p0){}
+}
diff --git a/java/ql/test/experimental/stubs/lingala-zip4j-2.11.5/net/lingala/zip4j/model/AbstractFileHeader.java b/java/ql/test/experimental/stubs/lingala-zip4j-2.11.5/net/lingala/zip4j/model/AbstractFileHeader.java
new file mode 100644
index 00000000000..c4dec0e4e96
--- /dev/null
+++ b/java/ql/test/experimental/stubs/lingala-zip4j-2.11.5/net/lingala/zip4j/model/AbstractFileHeader.java
@@ -0,0 +1,54 @@
+// Generated automatically from net.lingala.zip4j.model.AbstractFileHeader for testing purposes
+
+package net.lingala.zip4j.model;
+
+import java.util.List;
+import net.lingala.zip4j.model.AESExtraDataRecord;
+import net.lingala.zip4j.model.ExtraDataRecord;
+import net.lingala.zip4j.model.Zip64ExtendedInfo;
+import net.lingala.zip4j.model.ZipHeader;
+import net.lingala.zip4j.model.enums.CompressionMethod;
+import net.lingala.zip4j.model.enums.EncryptionMethod;
+
+abstract public class AbstractFileHeader extends ZipHeader
+{
+ public AESExtraDataRecord getAesExtraDataRecord(){ return null; }
+ public AbstractFileHeader(){}
+ public CompressionMethod getCompressionMethod(){ return null; }
+ public EncryptionMethod getEncryptionMethod(){ return null; }
+ public List getExtraDataRecords(){ return null; }
+ public String getFileName(){ return null; }
+ public Zip64ExtendedInfo getZip64ExtendedInfo(){ return null; }
+ public boolean equals(Object p0){ return false; }
+ public boolean isDataDescriptorExists(){ return false; }
+ public boolean isDirectory(){ return false; }
+ public boolean isEncrypted(){ return false; }
+ public boolean isFileNameUTF8Encoded(){ return false; }
+ public byte[] getGeneralPurposeFlag(){ return null; }
+ public int getExtraFieldLength(){ return 0; }
+ public int getFileNameLength(){ return 0; }
+ public int getVersionNeededToExtract(){ return 0; }
+ public long getCompressedSize(){ return 0; }
+ public long getCrc(){ return 0; }
+ public long getLastModifiedTime(){ return 0; }
+ public long getLastModifiedTimeEpoch(){ return 0; }
+ public long getUncompressedSize(){ return 0; }
+ public void setAesExtraDataRecord(AESExtraDataRecord p0){}
+ public void setCompressedSize(long p0){}
+ public void setCompressionMethod(CompressionMethod p0){}
+ public void setCrc(long p0){}
+ public void setDataDescriptorExists(boolean p0){}
+ public void setDirectory(boolean p0){}
+ public void setEncrypted(boolean p0){}
+ public void setEncryptionMethod(EncryptionMethod p0){}
+ public void setExtraDataRecords(List p0){}
+ public void setExtraFieldLength(int p0){}
+ public void setFileName(String p0){}
+ public void setFileNameLength(int p0){}
+ public void setFileNameUTF8Encoded(boolean p0){}
+ public void setGeneralPurposeFlag(byte[] p0){}
+ public void setLastModifiedTime(long p0){}
+ public void setUncompressedSize(long p0){}
+ public void setVersionNeededToExtract(int p0){}
+ public void setZip64ExtendedInfo(Zip64ExtendedInfo p0){}
+}
diff --git a/java/ql/test/experimental/stubs/lingala-zip4j-2.11.5/net/lingala/zip4j/model/ExcludeFileFilter.java b/java/ql/test/experimental/stubs/lingala-zip4j-2.11.5/net/lingala/zip4j/model/ExcludeFileFilter.java
new file mode 100644
index 00000000000..4b6405560f9
--- /dev/null
+++ b/java/ql/test/experimental/stubs/lingala-zip4j-2.11.5/net/lingala/zip4j/model/ExcludeFileFilter.java
@@ -0,0 +1,10 @@
+// Generated automatically from net.lingala.zip4j.model.ExcludeFileFilter for testing purposes
+
+package net.lingala.zip4j.model;
+
+import java.io.File;
+
+public interface ExcludeFileFilter
+{
+ boolean isExcluded(File p0);
+}
diff --git a/java/ql/test/experimental/stubs/lingala-zip4j-2.11.5/net/lingala/zip4j/model/ExtraDataRecord.java b/java/ql/test/experimental/stubs/lingala-zip4j-2.11.5/net/lingala/zip4j/model/ExtraDataRecord.java
new file mode 100644
index 00000000000..84be9331650
--- /dev/null
+++ b/java/ql/test/experimental/stubs/lingala-zip4j-2.11.5/net/lingala/zip4j/model/ExtraDataRecord.java
@@ -0,0 +1,16 @@
+// Generated automatically from net.lingala.zip4j.model.ExtraDataRecord for testing purposes
+
+package net.lingala.zip4j.model;
+
+import net.lingala.zip4j.model.ZipHeader;
+
+public class ExtraDataRecord extends ZipHeader
+{
+ public ExtraDataRecord(){}
+ public byte[] getData(){ return null; }
+ public int getSizeOfData(){ return 0; }
+ public long getHeader(){ return 0; }
+ public void setData(byte[] p0){}
+ public void setHeader(long p0){}
+ public void setSizeOfData(int p0){}
+}
diff --git a/java/ql/test/experimental/stubs/lingala-zip4j-2.11.5/net/lingala/zip4j/model/FileHeader.java b/java/ql/test/experimental/stubs/lingala-zip4j-2.11.5/net/lingala/zip4j/model/FileHeader.java
new file mode 100644
index 00000000000..a6188c4895a
--- /dev/null
+++ b/java/ql/test/experimental/stubs/lingala-zip4j-2.11.5/net/lingala/zip4j/model/FileHeader.java
@@ -0,0 +1,27 @@
+// Generated automatically from net.lingala.zip4j.model.FileHeader for testing purposes
+
+package net.lingala.zip4j.model;
+
+import net.lingala.zip4j.model.AbstractFileHeader;
+
+public class FileHeader extends AbstractFileHeader
+{
+ public FileHeader(){}
+ public String getFileComment(){ return null; }
+ public String toString(){ return null; }
+ public boolean equals(Object p0){ return false; }
+ public byte[] getExternalFileAttributes(){ return null; }
+ public byte[] getInternalFileAttributes(){ return null; }
+ public int getDiskNumberStart(){ return 0; }
+ public int getFileCommentLength(){ return 0; }
+ public int getVersionMadeBy(){ return 0; }
+ public int hashCode(){ return 0; }
+ public long getOffsetLocalHeader(){ return 0; }
+ public void setDiskNumberStart(int p0){}
+ public void setExternalFileAttributes(byte[] p0){}
+ public void setFileComment(String p0){}
+ public void setFileCommentLength(int p0){}
+ public void setInternalFileAttributes(byte[] p0){}
+ public void setOffsetLocalHeader(long p0){}
+ public void setVersionMadeBy(int p0){}
+}
diff --git a/java/ql/test/experimental/stubs/lingala-zip4j-2.11.5/net/lingala/zip4j/model/LocalFileHeader.java b/java/ql/test/experimental/stubs/lingala-zip4j-2.11.5/net/lingala/zip4j/model/LocalFileHeader.java
new file mode 100644
index 00000000000..1336930add1
--- /dev/null
+++ b/java/ql/test/experimental/stubs/lingala-zip4j-2.11.5/net/lingala/zip4j/model/LocalFileHeader.java
@@ -0,0 +1,16 @@
+// Generated automatically from net.lingala.zip4j.model.LocalFileHeader for testing purposes
+
+package net.lingala.zip4j.model;
+
+import net.lingala.zip4j.model.AbstractFileHeader;
+
+public class LocalFileHeader extends AbstractFileHeader
+{
+ public LocalFileHeader(){}
+ public boolean isWriteCompressedSizeInZip64ExtraRecord(){ return false; }
+ public byte[] getExtraField(){ return null; }
+ public long getOffsetStartOfData(){ return 0; }
+ public void setExtraField(byte[] p0){}
+ public void setOffsetStartOfData(long p0){}
+ public void setWriteCompressedSizeInZip64ExtraRecord(boolean p0){}
+}
diff --git a/java/ql/test/experimental/stubs/lingala-zip4j-2.11.5/net/lingala/zip4j/model/UnzipParameters.java b/java/ql/test/experimental/stubs/lingala-zip4j-2.11.5/net/lingala/zip4j/model/UnzipParameters.java
new file mode 100644
index 00000000000..556607b0fb2
--- /dev/null
+++ b/java/ql/test/experimental/stubs/lingala-zip4j-2.11.5/net/lingala/zip4j/model/UnzipParameters.java
@@ -0,0 +1,11 @@
+// Generated automatically from net.lingala.zip4j.model.UnzipParameters for testing purposes
+
+package net.lingala.zip4j.model;
+
+
+public class UnzipParameters
+{
+ public UnzipParameters(){}
+ public boolean isExtractSymbolicLinks(){ return false; }
+ public void setExtractSymbolicLinks(boolean p0){}
+}
diff --git a/java/ql/test/experimental/stubs/lingala-zip4j-2.11.5/net/lingala/zip4j/model/Zip4jConfig.java b/java/ql/test/experimental/stubs/lingala-zip4j-2.11.5/net/lingala/zip4j/model/Zip4jConfig.java
new file mode 100644
index 00000000000..bee35238891
--- /dev/null
+++ b/java/ql/test/experimental/stubs/lingala-zip4j-2.11.5/net/lingala/zip4j/model/Zip4jConfig.java
@@ -0,0 +1,14 @@
+// Generated automatically from net.lingala.zip4j.model.Zip4jConfig for testing purposes
+
+package net.lingala.zip4j.model;
+
+import java.nio.charset.Charset;
+
+public class Zip4jConfig
+{
+ protected Zip4jConfig() {}
+ public Charset getCharset(){ return null; }
+ public Zip4jConfig(Charset p0, int p1, boolean p2){}
+ public boolean isUseUtf8CharsetForPasswords(){ return false; }
+ public int getBufferSize(){ return 0; }
+}
diff --git a/java/ql/test/experimental/stubs/lingala-zip4j-2.11.5/net/lingala/zip4j/model/Zip64ExtendedInfo.java b/java/ql/test/experimental/stubs/lingala-zip4j-2.11.5/net/lingala/zip4j/model/Zip64ExtendedInfo.java
new file mode 100644
index 00000000000..b8fd64d8958
--- /dev/null
+++ b/java/ql/test/experimental/stubs/lingala-zip4j-2.11.5/net/lingala/zip4j/model/Zip64ExtendedInfo.java
@@ -0,0 +1,20 @@
+// Generated automatically from net.lingala.zip4j.model.Zip64ExtendedInfo for testing purposes
+
+package net.lingala.zip4j.model;
+
+import net.lingala.zip4j.model.ZipHeader;
+
+public class Zip64ExtendedInfo extends ZipHeader
+{
+ public Zip64ExtendedInfo(){}
+ public int getDiskNumberStart(){ return 0; }
+ public int getSize(){ return 0; }
+ public long getCompressedSize(){ return 0; }
+ public long getOffsetLocalHeader(){ return 0; }
+ public long getUncompressedSize(){ return 0; }
+ public void setCompressedSize(long p0){}
+ public void setDiskNumberStart(int p0){}
+ public void setOffsetLocalHeader(long p0){}
+ public void setSize(int p0){}
+ public void setUncompressedSize(long p0){}
+}
diff --git a/java/ql/test/experimental/stubs/lingala-zip4j-2.11.5/net/lingala/zip4j/model/ZipHeader.java b/java/ql/test/experimental/stubs/lingala-zip4j-2.11.5/net/lingala/zip4j/model/ZipHeader.java
new file mode 100644
index 00000000000..c9a7fdab898
--- /dev/null
+++ b/java/ql/test/experimental/stubs/lingala-zip4j-2.11.5/net/lingala/zip4j/model/ZipHeader.java
@@ -0,0 +1,12 @@
+// Generated automatically from net.lingala.zip4j.model.ZipHeader for testing purposes
+
+package net.lingala.zip4j.model;
+
+import net.lingala.zip4j.headers.HeaderSignature;
+
+abstract public class ZipHeader
+{
+ public HeaderSignature getSignature(){ return null; }
+ public ZipHeader(){}
+ public void setSignature(HeaderSignature p0){}
+}
diff --git a/java/ql/test/experimental/stubs/lingala-zip4j-2.11.5/net/lingala/zip4j/model/ZipParameters.java b/java/ql/test/experimental/stubs/lingala-zip4j-2.11.5/net/lingala/zip4j/model/ZipParameters.java
new file mode 100644
index 00000000000..c80a03bcd36
--- /dev/null
+++ b/java/ql/test/experimental/stubs/lingala-zip4j-2.11.5/net/lingala/zip4j/model/ZipParameters.java
@@ -0,0 +1,63 @@
+// Generated automatically from net.lingala.zip4j.model.ZipParameters for testing purposes
+
+package net.lingala.zip4j.model;
+
+import net.lingala.zip4j.model.ExcludeFileFilter;
+import net.lingala.zip4j.model.enums.AesKeyStrength;
+import net.lingala.zip4j.model.enums.AesVersion;
+import net.lingala.zip4j.model.enums.CompressionLevel;
+import net.lingala.zip4j.model.enums.CompressionMethod;
+import net.lingala.zip4j.model.enums.EncryptionMethod;
+
+public class ZipParameters
+{
+ public AesKeyStrength getAesKeyStrength(){ return null; }
+ public AesVersion getAesVersion(){ return null; }
+ public CompressionLevel getCompressionLevel(){ return null; }
+ public CompressionMethod getCompressionMethod(){ return null; }
+ public EncryptionMethod getEncryptionMethod(){ return null; }
+ public ExcludeFileFilter getExcludeFileFilter(){ return null; }
+ public String getDefaultFolderPath(){ return null; }
+ public String getFileComment(){ return null; }
+ public String getFileNameInZip(){ return null; }
+ public String getRootFolderNameInZip(){ return null; }
+ public ZipParameters(){}
+ public ZipParameters(ZipParameters p0){}
+ public ZipParameters.SymbolicLinkAction getSymbolicLinkAction(){ return null; }
+ public boolean isEncryptFiles(){ return false; }
+ public boolean isIncludeRootFolder(){ return false; }
+ public boolean isOverrideExistingFilesInZip(){ return false; }
+ public boolean isReadHiddenFiles(){ return false; }
+ public boolean isReadHiddenFolders(){ return false; }
+ public boolean isUnixMode(){ return false; }
+ public boolean isWriteExtendedLocalFileHeader(){ return false; }
+ public long getEntryCRC(){ return 0; }
+ public long getEntrySize(){ return 0; }
+ public long getLastModifiedFileTime(){ return 0; }
+ public void setAesKeyStrength(AesKeyStrength p0){}
+ public void setAesVersion(AesVersion p0){}
+ public void setCompressionLevel(CompressionLevel p0){}
+ public void setCompressionMethod(CompressionMethod p0){}
+ public void setDefaultFolderPath(String p0){}
+ public void setEncryptFiles(boolean p0){}
+ public void setEncryptionMethod(EncryptionMethod p0){}
+ public void setEntryCRC(long p0){}
+ public void setEntrySize(long p0){}
+ public void setExcludeFileFilter(ExcludeFileFilter p0){}
+ public void setFileComment(String p0){}
+ public void setFileNameInZip(String p0){}
+ public void setIncludeRootFolder(boolean p0){}
+ public void setLastModifiedFileTime(long p0){}
+ public void setOverrideExistingFilesInZip(boolean p0){}
+ public void setReadHiddenFiles(boolean p0){}
+ public void setReadHiddenFolders(boolean p0){}
+ public void setRootFolderNameInZip(String p0){}
+ public void setSymbolicLinkAction(ZipParameters.SymbolicLinkAction p0){}
+ public void setUnixMode(boolean p0){}
+ public void setWriteExtendedLocalFileHeader(boolean p0){}
+ static public enum SymbolicLinkAction
+ {
+ INCLUDE_LINKED_FILE_ONLY, INCLUDE_LINK_AND_LINKED_FILE, INCLUDE_LINK_ONLY;
+ private SymbolicLinkAction() {}
+ }
+}
diff --git a/java/ql/test/experimental/stubs/lingala-zip4j-2.11.5/net/lingala/zip4j/model/enums/AesKeyStrength.java b/java/ql/test/experimental/stubs/lingala-zip4j-2.11.5/net/lingala/zip4j/model/enums/AesKeyStrength.java
new file mode 100644
index 00000000000..e7a1496583f
--- /dev/null
+++ b/java/ql/test/experimental/stubs/lingala-zip4j-2.11.5/net/lingala/zip4j/model/enums/AesKeyStrength.java
@@ -0,0 +1,15 @@
+// Generated automatically from net.lingala.zip4j.model.enums.AesKeyStrength for testing purposes
+
+package net.lingala.zip4j.model.enums;
+
+
+public enum AesKeyStrength
+{
+ KEY_STRENGTH_128, KEY_STRENGTH_192, KEY_STRENGTH_256;
+ private AesKeyStrength() {}
+ public int getKeyLength(){ return 0; }
+ public int getMacLength(){ return 0; }
+ public int getRawCode(){ return 0; }
+ public int getSaltLength(){ return 0; }
+ public static AesKeyStrength getAesKeyStrengthFromRawCode(int p0){ return null; }
+}
diff --git a/java/ql/test/experimental/stubs/lingala-zip4j-2.11.5/net/lingala/zip4j/model/enums/AesVersion.java b/java/ql/test/experimental/stubs/lingala-zip4j-2.11.5/net/lingala/zip4j/model/enums/AesVersion.java
new file mode 100644
index 00000000000..b865daaca53
--- /dev/null
+++ b/java/ql/test/experimental/stubs/lingala-zip4j-2.11.5/net/lingala/zip4j/model/enums/AesVersion.java
@@ -0,0 +1,12 @@
+// Generated automatically from net.lingala.zip4j.model.enums.AesVersion for testing purposes
+
+package net.lingala.zip4j.model.enums;
+
+
+public enum AesVersion
+{
+ ONE, TWO;
+ private AesVersion() {}
+ public int getVersionNumber(){ return 0; }
+ public static AesVersion getFromVersionNumber(int p0){ return null; }
+}
diff --git a/java/ql/test/experimental/stubs/lingala-zip4j-2.11.5/net/lingala/zip4j/model/enums/CompressionLevel.java b/java/ql/test/experimental/stubs/lingala-zip4j-2.11.5/net/lingala/zip4j/model/enums/CompressionLevel.java
new file mode 100644
index 00000000000..65f4cce3d00
--- /dev/null
+++ b/java/ql/test/experimental/stubs/lingala-zip4j-2.11.5/net/lingala/zip4j/model/enums/CompressionLevel.java
@@ -0,0 +1,11 @@
+// Generated automatically from net.lingala.zip4j.model.enums.CompressionLevel for testing purposes
+
+package net.lingala.zip4j.model.enums;
+
+
+public enum CompressionLevel
+{
+ FAST, FASTER, FASTEST, HIGHER, MAXIMUM, MEDIUM_FAST, NORMAL, NO_COMPRESSION, PRE_ULTRA, ULTRA;
+ private CompressionLevel() {}
+ public int getLevel(){ return 0; }
+}
diff --git a/java/ql/test/experimental/stubs/lingala-zip4j-2.11.5/net/lingala/zip4j/model/enums/CompressionMethod.java b/java/ql/test/experimental/stubs/lingala-zip4j-2.11.5/net/lingala/zip4j/model/enums/CompressionMethod.java
new file mode 100644
index 00000000000..c20068a1b4f
--- /dev/null
+++ b/java/ql/test/experimental/stubs/lingala-zip4j-2.11.5/net/lingala/zip4j/model/enums/CompressionMethod.java
@@ -0,0 +1,12 @@
+// Generated automatically from net.lingala.zip4j.model.enums.CompressionMethod for testing purposes
+
+package net.lingala.zip4j.model.enums;
+
+
+public enum CompressionMethod
+{
+ AES_INTERNAL_ONLY, DEFLATE, STORE;
+ private CompressionMethod() {}
+ public int getCode(){ return 0; }
+ public static CompressionMethod getCompressionMethodFromCode(int p0){ return null; }
+}
diff --git a/java/ql/test/experimental/stubs/lingala-zip4j-2.11.5/net/lingala/zip4j/model/enums/EncryptionMethod.java b/java/ql/test/experimental/stubs/lingala-zip4j-2.11.5/net/lingala/zip4j/model/enums/EncryptionMethod.java
new file mode 100644
index 00000000000..b0abe66a5ab
--- /dev/null
+++ b/java/ql/test/experimental/stubs/lingala-zip4j-2.11.5/net/lingala/zip4j/model/enums/EncryptionMethod.java
@@ -0,0 +1,10 @@
+// Generated automatically from net.lingala.zip4j.model.enums.EncryptionMethod for testing purposes
+
+package net.lingala.zip4j.model.enums;
+
+
+public enum EncryptionMethod
+{
+ AES, NONE, ZIP_STANDARD, ZIP_STANDARD_VARIANT_STRONG;
+ private EncryptionMethod() {}
+}
diff --git a/java/ql/test/experimental/stubs/lingala-zip4j-2.11.5/net/lingala/zip4j/progress/ProgressMonitor.java b/java/ql/test/experimental/stubs/lingala-zip4j-2.11.5/net/lingala/zip4j/progress/ProgressMonitor.java
new file mode 100644
index 00000000000..5ed078cb4c2
--- /dev/null
+++ b/java/ql/test/experimental/stubs/lingala-zip4j-2.11.5/net/lingala/zip4j/progress/ProgressMonitor.java
@@ -0,0 +1,47 @@
+// Generated automatically from net.lingala.zip4j.progress.ProgressMonitor for testing purposes
+
+package net.lingala.zip4j.progress;
+
+
+public class ProgressMonitor
+{
+ public Exception getException(){ return null; }
+ public ProgressMonitor(){}
+ public ProgressMonitor.Result getResult(){ return null; }
+ public ProgressMonitor.State getState(){ return null; }
+ public ProgressMonitor.Task getCurrentTask(){ return null; }
+ public String getFileName(){ return null; }
+ public boolean isCancelAllTasks(){ return false; }
+ public boolean isPause(){ return false; }
+ public int getPercentDone(){ return 0; }
+ public long getTotalWork(){ return 0; }
+ public long getWorkCompleted(){ return 0; }
+ public void endProgressMonitor(){}
+ public void endProgressMonitor(Exception p0){}
+ public void fullReset(){}
+ public void setCancelAllTasks(boolean p0){}
+ public void setCurrentTask(ProgressMonitor.Task p0){}
+ public void setException(Exception p0){}
+ public void setFileName(String p0){}
+ public void setPause(boolean p0){}
+ public void setPercentDone(int p0){}
+ public void setResult(ProgressMonitor.Result p0){}
+ public void setState(ProgressMonitor.State p0){}
+ public void setTotalWork(long p0){}
+ public void updateWorkCompleted(long p0){}
+ static public enum Result
+ {
+ CANCELLED, ERROR, SUCCESS, WORK_IN_PROGRESS;
+ private Result() {}
+ }
+ static public enum State
+ {
+ BUSY, READY;
+ private State() {}
+ }
+ static public enum Task
+ {
+ ADD_ENTRY, CALCULATE_CRC, EXTRACT_ENTRY, MERGE_ZIP_FILES, NONE, REMOVE_ENTRY, RENAME_FILE, SET_COMMENT;
+ private Task() {}
+ }
+}
diff --git a/java/ql/test/experimental/stubs/lingala-zip4j-2.11.5/net/lingala/zip4j/util/PasswordCallback.java b/java/ql/test/experimental/stubs/lingala-zip4j-2.11.5/net/lingala/zip4j/util/PasswordCallback.java
new file mode 100644
index 00000000000..e3db93b696f
--- /dev/null
+++ b/java/ql/test/experimental/stubs/lingala-zip4j-2.11.5/net/lingala/zip4j/util/PasswordCallback.java
@@ -0,0 +1,9 @@
+// Generated automatically from net.lingala.zip4j.util.PasswordCallback for testing purposes
+
+package net.lingala.zip4j.util;
+
+
+public interface PasswordCallback
+{
+ char[] getPassword();
+}
diff --git a/java/ql/test/experimental/stubs/org-springframework-6.1.4/org/reactivestreams/Publisher.java b/java/ql/test/experimental/stubs/org-springframework-6.1.4/org/reactivestreams/Publisher.java
new file mode 100644
index 00000000000..fc09b92d498
--- /dev/null
+++ b/java/ql/test/experimental/stubs/org-springframework-6.1.4/org/reactivestreams/Publisher.java
@@ -0,0 +1,10 @@
+// Generated automatically from org.reactivestreams.Publisher for testing purposes
+
+package org.reactivestreams;
+
+import org.reactivestreams.Subscriber;
+
+public interface Publisher
+{
+ void subscribe(org.reactivestreams.Subscriber super T> p0);
+}
diff --git a/java/ql/test/experimental/stubs/org-springframework-6.1.4/org/reactivestreams/Subscriber.java b/java/ql/test/experimental/stubs/org-springframework-6.1.4/org/reactivestreams/Subscriber.java
new file mode 100644
index 00000000000..d8c1e2531bb
--- /dev/null
+++ b/java/ql/test/experimental/stubs/org-springframework-6.1.4/org/reactivestreams/Subscriber.java
@@ -0,0 +1,13 @@
+// Generated automatically from org.reactivestreams.Subscriber for testing purposes
+
+package org.reactivestreams;
+
+import org.reactivestreams.Subscription;
+
+public interface Subscriber
+{
+ void onComplete();
+ void onError(Throwable p0);
+ void onNext(T p0);
+ void onSubscribe(Subscription p0);
+}
diff --git a/java/ql/test/experimental/stubs/org-springframework-6.1.4/org/reactivestreams/Subscription.java b/java/ql/test/experimental/stubs/org-springframework-6.1.4/org/reactivestreams/Subscription.java
new file mode 100644
index 00000000000..af7df5d4de6
--- /dev/null
+++ b/java/ql/test/experimental/stubs/org-springframework-6.1.4/org/reactivestreams/Subscription.java
@@ -0,0 +1,10 @@
+// Generated automatically from org.reactivestreams.Subscription for testing purposes
+
+package org.reactivestreams;
+
+
+public interface Subscription
+{
+ void cancel();
+ void request(long p0);
+}
diff --git a/java/ql/test/experimental/stubs/org-springframework-6.1.4/org/slf4j/Logger.java b/java/ql/test/experimental/stubs/org-springframework-6.1.4/org/slf4j/Logger.java
new file mode 100644
index 00000000000..6b2d3033e0c
--- /dev/null
+++ b/java/ql/test/experimental/stubs/org-springframework-6.1.4/org/slf4j/Logger.java
@@ -0,0 +1,71 @@
+// Generated automatically from org.slf4j.Logger for testing purposes
+
+package org.slf4j;
+
+import org.slf4j.Marker;
+
+public interface Logger
+{
+ String getName();
+ boolean isDebugEnabled();
+ boolean isDebugEnabled(Marker p0);
+ boolean isErrorEnabled();
+ boolean isErrorEnabled(Marker p0);
+ boolean isInfoEnabled();
+ boolean isInfoEnabled(Marker p0);
+ boolean isTraceEnabled();
+ boolean isTraceEnabled(Marker p0);
+ boolean isWarnEnabled();
+ boolean isWarnEnabled(Marker p0);
+ static String ROOT_LOGGER_NAME = null;
+ void debug(Marker p0, String p1);
+ void debug(Marker p0, String p1, Object p2);
+ void debug(Marker p0, String p1, Object p2, Object p3);
+ void debug(Marker p0, String p1, Object... p2);
+ void debug(Marker p0, String p1, Throwable p2);
+ void debug(String p0);
+ void debug(String p0, Object p1);
+ void debug(String p0, Object p1, Object p2);
+ void debug(String p0, Object... p1);
+ void debug(String p0, Throwable p1);
+ void error(Marker p0, String p1);
+ void error(Marker p0, String p1, Object p2);
+ void error(Marker p0, String p1, Object p2, Object p3);
+ void error(Marker p0, String p1, Object... p2);
+ void error(Marker p0, String p1, Throwable p2);
+ void error(String p0);
+ void error(String p0, Object p1);
+ void error(String p0, Object p1, Object p2);
+ void error(String p0, Object... p1);
+ void error(String p0, Throwable p1);
+ void info(Marker p0, String p1);
+ void info(Marker p0, String p1, Object p2);
+ void info(Marker p0, String p1, Object p2, Object p3);
+ void info(Marker p0, String p1, Object... p2);
+ void info(Marker p0, String p1, Throwable p2);
+ void info(String p0);
+ void info(String p0, Object p1);
+ void info(String p0, Object p1, Object p2);
+ void info(String p0, Object... p1);
+ void info(String p0, Throwable p1);
+ void trace(Marker p0, String p1);
+ void trace(Marker p0, String p1, Object p2);
+ void trace(Marker p0, String p1, Object p2, Object p3);
+ void trace(Marker p0, String p1, Object... p2);
+ void trace(Marker p0, String p1, Throwable p2);
+ void trace(String p0);
+ void trace(String p0, Object p1);
+ void trace(String p0, Object p1, Object p2);
+ void trace(String p0, Object... p1);
+ void trace(String p0, Throwable p1);
+ void warn(Marker p0, String p1);
+ void warn(Marker p0, String p1, Object p2);
+ void warn(Marker p0, String p1, Object p2, Object p3);
+ void warn(Marker p0, String p1, Object... p2);
+ void warn(Marker p0, String p1, Throwable p2);
+ void warn(String p0);
+ void warn(String p0, Object p1);
+ void warn(String p0, Object p1, Object p2);
+ void warn(String p0, Object... p1);
+ void warn(String p0, Throwable p1);
+}
diff --git a/java/ql/test/experimental/stubs/org-springframework-6.1.4/org/slf4j/Marker.java b/java/ql/test/experimental/stubs/org-springframework-6.1.4/org/slf4j/Marker.java
new file mode 100644
index 00000000000..bf8ac78dc7f
--- /dev/null
+++ b/java/ql/test/experimental/stubs/org-springframework-6.1.4/org/slf4j/Marker.java
@@ -0,0 +1,22 @@
+// Generated automatically from org.slf4j.Marker for testing purposes
+
+package org.slf4j;
+
+import java.io.Serializable;
+import java.util.Iterator;
+
+public interface Marker extends Serializable
+{
+ Iterator iterator();
+ String getName();
+ boolean contains(Marker p0);
+ boolean contains(String p0);
+ boolean equals(Object p0);
+ boolean hasChildren();
+ boolean hasReferences();
+ boolean remove(Marker p0);
+ int hashCode();
+ static String ANY_MARKER = null;
+ static String ANY_NON_NULL_MARKER = null;
+ void add(Marker p0);
+}
diff --git a/java/ql/test/experimental/stubs/org-springframework-6.1.4/org/springframework/core/io/AbstractFileResolvingResource.java b/java/ql/test/experimental/stubs/org-springframework-6.1.4/org/springframework/core/io/AbstractFileResolvingResource.java
new file mode 100644
index 00000000000..5bd6c57dbe4
--- /dev/null
+++ b/java/ql/test/experimental/stubs/org-springframework-6.1.4/org/springframework/core/io/AbstractFileResolvingResource.java
@@ -0,0 +1,27 @@
+// Generated automatically from org.springframework.core.io.AbstractFileResolvingResource for testing purposes
+
+package org.springframework.core.io;
+
+import java.io.File;
+import java.net.HttpURLConnection;
+import java.net.URI;
+import java.net.URLConnection;
+import java.nio.channels.ReadableByteChannel;
+import org.springframework.core.io.AbstractResource;
+
+abstract public class AbstractFileResolvingResource extends AbstractResource
+{
+ protected File getFile(URI p0){ return null; }
+ protected File getFileForLastModifiedCheck(){ return null; }
+ protected boolean isFile(URI p0){ return false; }
+ protected void customizeConnection(HttpURLConnection p0){}
+ protected void customizeConnection(URLConnection p0){}
+ public AbstractFileResolvingResource(){}
+ public File getFile(){ return null; }
+ public ReadableByteChannel readableChannel(){ return null; }
+ public boolean exists(){ return false; }
+ public boolean isFile(){ return false; }
+ public boolean isReadable(){ return false; }
+ public long contentLength(){ return 0; }
+ public long lastModified(){ return 0; }
+}
diff --git a/java/ql/test/experimental/stubs/org-springframework-6.1.4/org/springframework/core/io/AbstractResource.java b/java/ql/test/experimental/stubs/org-springframework-6.1.4/org/springframework/core/io/AbstractResource.java
new file mode 100644
index 00000000000..68d111b4675
--- /dev/null
+++ b/java/ql/test/experimental/stubs/org-springframework-6.1.4/org/springframework/core/io/AbstractResource.java
@@ -0,0 +1,30 @@
+// Generated automatically from org.springframework.core.io.AbstractResource for testing purposes
+
+package org.springframework.core.io;
+
+import java.io.File;
+import java.net.URI;
+import java.net.URL;
+import java.nio.channels.ReadableByteChannel;
+import org.springframework.core.io.Resource;
+
+abstract public class AbstractResource implements Resource
+{
+ protected File getFileForLastModifiedCheck(){ return null; }
+ public AbstractResource(){}
+ public File getFile(){ return null; }
+ public ReadableByteChannel readableChannel(){ return null; }
+ public Resource createRelative(String p0){ return null; }
+ public String getFilename(){ return null; }
+ public String toString(){ return null; }
+ public URI getURI(){ return null; }
+ public URL getURL(){ return null; }
+ public boolean equals(Object p0){ return false; }
+ public boolean exists(){ return false; }
+ public boolean isFile(){ return false; }
+ public boolean isOpen(){ return false; }
+ public boolean isReadable(){ return false; }
+ public int hashCode(){ return 0; }
+ public long contentLength(){ return 0; }
+ public long lastModified(){ return 0; }
+}
diff --git a/java/ql/test/experimental/stubs/org-springframework-6.1.4/org/springframework/core/io/FileSystemResource.java b/java/ql/test/experimental/stubs/org-springframework-6.1.4/org/springframework/core/io/FileSystemResource.java
new file mode 100644
index 00000000000..9435882bd91
--- /dev/null
+++ b/java/ql/test/experimental/stubs/org-springframework-6.1.4/org/springframework/core/io/FileSystemResource.java
@@ -0,0 +1,47 @@
+// Generated automatically from org.springframework.core.io.FileSystemResource for testing purposes
+
+package org.springframework.core.io;
+
+import java.io.File;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.net.URI;
+import java.net.URL;
+import java.nio.channels.ReadableByteChannel;
+import java.nio.channels.WritableByteChannel;
+import java.nio.charset.Charset;
+import java.nio.file.FileSystem;
+import java.nio.file.Path;
+import org.springframework.core.io.AbstractResource;
+import org.springframework.core.io.Resource;
+import org.springframework.core.io.WritableResource;
+
+public class FileSystemResource extends AbstractResource implements WritableResource
+{
+ protected FileSystemResource() {}
+ public File getFile(){ return null; }
+ public FileSystemResource(File p0){}
+ public FileSystemResource(FileSystem p0, String p1){}
+ public FileSystemResource(Path p0){}
+ public FileSystemResource(String p0){}
+ public InputStream getInputStream(){ return null; }
+ public OutputStream getOutputStream(){ return null; }
+ public ReadableByteChannel readableChannel(){ return null; }
+ public Resource createRelative(String p0){ return null; }
+ public String getContentAsString(Charset p0){ return null; }
+ public String getDescription(){ return null; }
+ public String getFilename(){ return null; }
+ public URI getURI(){ return null; }
+ public URL getURL(){ return null; }
+ public WritableByteChannel writableChannel(){ return null; }
+ public boolean equals(Object p0){ return false; }
+ public boolean exists(){ return false; }
+ public boolean isFile(){ return false; }
+ public boolean isReadable(){ return false; }
+ public boolean isWritable(){ return false; }
+ public byte[] getContentAsByteArray(){ return null; }
+ public final String getPath(){ return null; }
+ public int hashCode(){ return 0; }
+ public long contentLength(){ return 0; }
+ public long lastModified(){ return 0; }
+}
diff --git a/java/ql/test/experimental/stubs/org-springframework-6.1.4/org/springframework/core/io/FileUrlResource.java b/java/ql/test/experimental/stubs/org-springframework-6.1.4/org/springframework/core/io/FileUrlResource.java
new file mode 100644
index 00000000000..c09a3a0efa6
--- /dev/null
+++ b/java/ql/test/experimental/stubs/org-springframework-6.1.4/org/springframework/core/io/FileUrlResource.java
@@ -0,0 +1,23 @@
+// Generated automatically from org.springframework.core.io.FileUrlResource for testing purposes
+
+package org.springframework.core.io;
+
+import java.io.File;
+import java.io.OutputStream;
+import java.net.URL;
+import java.nio.channels.WritableByteChannel;
+import org.springframework.core.io.Resource;
+import org.springframework.core.io.UrlResource;
+import org.springframework.core.io.WritableResource;
+
+public class FileUrlResource extends UrlResource implements WritableResource
+{
+ protected FileUrlResource() {}
+ public File getFile(){ return null; }
+ public FileUrlResource(String p0){}
+ public FileUrlResource(URL p0){}
+ public OutputStream getOutputStream(){ return null; }
+ public Resource createRelative(String p0){ return null; }
+ public WritableByteChannel writableChannel(){ return null; }
+ public boolean isWritable(){ return false; }
+}
diff --git a/java/ql/test/experimental/stubs/org-springframework-6.1.4/org/springframework/core/io/InputStreamSource.java b/java/ql/test/experimental/stubs/org-springframework-6.1.4/org/springframework/core/io/InputStreamSource.java
new file mode 100644
index 00000000000..9f2a0980eef
--- /dev/null
+++ b/java/ql/test/experimental/stubs/org-springframework-6.1.4/org/springframework/core/io/InputStreamSource.java
@@ -0,0 +1,10 @@
+// Generated automatically from org.springframework.core.io.InputStreamSource for testing purposes
+
+package org.springframework.core.io;
+
+import java.io.InputStream;
+
+public interface InputStreamSource
+{
+ InputStream getInputStream();
+}
diff --git a/java/ql/test/experimental/stubs/org-springframework-6.1.4/org/springframework/core/io/PathResource.java b/java/ql/test/experimental/stubs/org-springframework-6.1.4/org/springframework/core/io/PathResource.java
new file mode 100644
index 00000000000..fdb662cdb3b
--- /dev/null
+++ b/java/ql/test/experimental/stubs/org-springframework-6.1.4/org/springframework/core/io/PathResource.java
@@ -0,0 +1,45 @@
+// Generated automatically from org.springframework.core.io.PathResource for testing purposes
+
+package org.springframework.core.io;
+
+import java.io.File;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.net.URI;
+import java.net.URL;
+import java.nio.channels.ReadableByteChannel;
+import java.nio.channels.WritableByteChannel;
+import java.nio.charset.Charset;
+import java.nio.file.Path;
+import org.springframework.core.io.AbstractResource;
+import org.springframework.core.io.Resource;
+import org.springframework.core.io.WritableResource;
+
+public class PathResource extends AbstractResource implements WritableResource
+{
+ protected PathResource() {}
+ public File getFile(){ return null; }
+ public InputStream getInputStream(){ return null; }
+ public OutputStream getOutputStream(){ return null; }
+ public PathResource(Path p0){}
+ public PathResource(String p0){}
+ public PathResource(URI p0){}
+ public ReadableByteChannel readableChannel(){ return null; }
+ public Resource createRelative(String p0){ return null; }
+ public String getContentAsString(Charset p0){ return null; }
+ public String getDescription(){ return null; }
+ public String getFilename(){ return null; }
+ public URI getURI(){ return null; }
+ public URL getURL(){ return null; }
+ public WritableByteChannel writableChannel(){ return null; }
+ public boolean equals(Object p0){ return false; }
+ public boolean exists(){ return false; }
+ public boolean isFile(){ return false; }
+ public boolean isReadable(){ return false; }
+ public boolean isWritable(){ return false; }
+ public byte[] getContentAsByteArray(){ return null; }
+ public final String getPath(){ return null; }
+ public int hashCode(){ return 0; }
+ public long contentLength(){ return 0; }
+ public long lastModified(){ return 0; }
+}
diff --git a/java/ql/test/experimental/stubs/org-springframework-6.1.4/org/springframework/core/io/Resource.java b/java/ql/test/experimental/stubs/org-springframework-6.1.4/org/springframework/core/io/Resource.java
new file mode 100644
index 00000000000..fb00cc52648
--- /dev/null
+++ b/java/ql/test/experimental/stubs/org-springframework-6.1.4/org/springframework/core/io/Resource.java
@@ -0,0 +1,29 @@
+// Generated automatically from org.springframework.core.io.Resource for testing purposes
+
+package org.springframework.core.io;
+
+import java.io.File;
+import java.net.URI;
+import java.net.URL;
+import java.nio.channels.ReadableByteChannel;
+import java.nio.charset.Charset;
+import org.springframework.core.io.InputStreamSource;
+
+public interface Resource extends InputStreamSource
+{
+ File getFile();
+ Resource createRelative(String p0);
+ String getDescription();
+ String getFilename();
+ URI getURI();
+ URL getURL();
+ boolean exists();
+ default ReadableByteChannel readableChannel(){ return null; }
+ default String getContentAsString(Charset p0){ return null; }
+ default boolean isFile(){ return false; }
+ default boolean isOpen(){ return false; }
+ default boolean isReadable(){ return false; }
+ default byte[] getContentAsByteArray(){ return null; }
+ long contentLength();
+ long lastModified();
+}
diff --git a/java/ql/test/experimental/stubs/org-springframework-6.1.4/org/springframework/core/io/UrlResource.java b/java/ql/test/experimental/stubs/org-springframework-6.1.4/org/springframework/core/io/UrlResource.java
new file mode 100644
index 00000000000..e7830802441
--- /dev/null
+++ b/java/ql/test/experimental/stubs/org-springframework-6.1.4/org/springframework/core/io/UrlResource.java
@@ -0,0 +1,35 @@
+// Generated automatically from org.springframework.core.io.UrlResource for testing purposes
+
+package org.springframework.core.io;
+
+import java.io.File;
+import java.io.InputStream;
+import java.net.URI;
+import java.net.URL;
+import java.net.URLConnection;
+import org.springframework.core.io.AbstractFileResolvingResource;
+import org.springframework.core.io.Resource;
+
+public class UrlResource extends AbstractFileResolvingResource
+{
+ protected UrlResource() {}
+ protected URL createRelativeURL(String p0){ return null; }
+ protected void customizeConnection(URLConnection p0){}
+ public File getFile(){ return null; }
+ public InputStream getInputStream(){ return null; }
+ public Resource createRelative(String p0){ return null; }
+ public String getDescription(){ return null; }
+ public String getFilename(){ return null; }
+ public URI getURI(){ return null; }
+ public URL getURL(){ return null; }
+ public UrlResource(String p0){}
+ public UrlResource(String p0, String p1){}
+ public UrlResource(String p0, String p1, String p2){}
+ public UrlResource(URI p0){}
+ public UrlResource(URL p0){}
+ public boolean equals(Object p0){ return false; }
+ public boolean isFile(){ return false; }
+ public int hashCode(){ return 0; }
+ public static UrlResource from(String p0){ return null; }
+ public static UrlResource from(URI p0){ return null; }
+}
diff --git a/java/ql/test/experimental/stubs/org-springframework-6.1.4/org/springframework/core/io/WritableResource.java b/java/ql/test/experimental/stubs/org-springframework-6.1.4/org/springframework/core/io/WritableResource.java
new file mode 100644
index 00000000000..cff121cf038
--- /dev/null
+++ b/java/ql/test/experimental/stubs/org-springframework-6.1.4/org/springframework/core/io/WritableResource.java
@@ -0,0 +1,14 @@
+// Generated automatically from org.springframework.core.io.WritableResource for testing purposes
+
+package org.springframework.core.io;
+
+import java.io.OutputStream;
+import java.nio.channels.WritableByteChannel;
+import org.springframework.core.io.Resource;
+
+public interface WritableResource extends Resource
+{
+ OutputStream getOutputStream();
+ default WritableByteChannel writableChannel(){ return null; }
+ default boolean isWritable(){ return false; }
+}
diff --git a/java/ql/test/experimental/stubs/org-springframework-6.1.4/org/springframework/util/FileCopyUtils.java b/java/ql/test/experimental/stubs/org-springframework-6.1.4/org/springframework/util/FileCopyUtils.java
new file mode 100644
index 00000000000..98ae68c9a64
--- /dev/null
+++ b/java/ql/test/experimental/stubs/org-springframework-6.1.4/org/springframework/util/FileCopyUtils.java
@@ -0,0 +1,24 @@
+// Generated automatically from org.springframework.util.FileCopyUtils for testing purposes
+
+package org.springframework.util;
+
+import java.io.File;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.io.Reader;
+import java.io.Writer;
+
+abstract public class FileCopyUtils
+{
+ public FileCopyUtils(){}
+ public static String copyToString(Reader p0){ return null; }
+ public static byte[] copyToByteArray(File p0){ return null; }
+ public static byte[] copyToByteArray(InputStream p0){ return null; }
+ public static int BUFFER_SIZE = 0;
+ public static int copy(File p0, File p1){ return 0; }
+ public static int copy(InputStream p0, OutputStream p1){ return 0; }
+ public static int copy(Reader p0, Writer p1){ return 0; }
+ public static void copy(String p0, Writer p1){}
+ public static void copy(byte[] p0, File p1){}
+ public static void copy(byte[] p0, OutputStream p1){}
+}
diff --git a/java/ql/test/experimental/stubs/org-springframework-6.1.4/org/springframework/util/FileSystemUtils.java b/java/ql/test/experimental/stubs/org-springframework-6.1.4/org/springframework/util/FileSystemUtils.java
new file mode 100644
index 00000000000..75525989d70
--- /dev/null
+++ b/java/ql/test/experimental/stubs/org-springframework-6.1.4/org/springframework/util/FileSystemUtils.java
@@ -0,0 +1,15 @@
+// Generated automatically from org.springframework.util.FileSystemUtils for testing purposes
+
+package org.springframework.util;
+
+import java.io.File;
+import java.nio.file.Path;
+
+abstract public class FileSystemUtils
+{
+ public FileSystemUtils(){}
+ public static boolean deleteRecursively(File p0){ return false; }
+ public static boolean deleteRecursively(Path p0){ return false; }
+ public static void copyRecursively(File p0, File p1){}
+ public static void copyRecursively(Path p0, Path p1){}
+}
diff --git a/java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/auth/credentials/AwsCredentials.java b/java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/auth/credentials/AwsCredentials.java
new file mode 100644
index 00000000000..1a0f0318ccb
--- /dev/null
+++ b/java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/auth/credentials/AwsCredentials.java
@@ -0,0 +1,10 @@
+// Generated automatically from software.amazon.awssdk.auth.credentials.AwsCredentials for testing purposes
+
+package software.amazon.awssdk.auth.credentials;
+
+
+public interface AwsCredentials
+{
+ String accessKeyId();
+ String secretAccessKey();
+}
diff --git a/java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/auth/credentials/AwsCredentialsProvider.java b/java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/auth/credentials/AwsCredentialsProvider.java
new file mode 100644
index 00000000000..ed8e9983f01
--- /dev/null
+++ b/java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/auth/credentials/AwsCredentialsProvider.java
@@ -0,0 +1,10 @@
+// Generated automatically from software.amazon.awssdk.auth.credentials.AwsCredentialsProvider for testing purposes
+
+package software.amazon.awssdk.auth.credentials;
+
+import software.amazon.awssdk.auth.credentials.AwsCredentials;
+
+public interface AwsCredentialsProvider
+{
+ AwsCredentials resolveCredentials();
+}
diff --git a/java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/awscore/AwsRequest.java b/java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/awscore/AwsRequest.java
new file mode 100644
index 00000000000..3345d092b06
--- /dev/null
+++ b/java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/awscore/AwsRequest.java
@@ -0,0 +1,25 @@
+// Generated automatically from software.amazon.awssdk.awscore.AwsRequest for testing purposes
+
+package software.amazon.awssdk.awscore;
+
+import java.util.Optional;
+import java.util.function.Consumer;
+import software.amazon.awssdk.awscore.AwsRequestOverrideConfiguration;
+import software.amazon.awssdk.core.SdkRequest;
+
+abstract public class AwsRequest extends SdkRequest
+{
+ protected AwsRequest() {}
+ protected AwsRequest(AwsRequest.Builder p0){}
+ public abstract AwsRequest.Builder toBuilder();
+ public boolean equals(Object p0){ return false; }
+ public final Optional overrideConfiguration(){ return null; }
+ public int hashCode(){ return 0; }
+ static public interface Builder extends SdkRequest.Builder
+ {
+ AwsRequest build();
+ AwsRequest.Builder overrideConfiguration(AwsRequestOverrideConfiguration p0);
+ AwsRequest.Builder overrideConfiguration(java.util.function.Consumer p0);
+ AwsRequestOverrideConfiguration overrideConfiguration();
+ }
+}
diff --git a/java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/awscore/AwsRequestOverrideConfiguration.java b/java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/awscore/AwsRequestOverrideConfiguration.java
new file mode 100644
index 00000000000..992a174e303
--- /dev/null
+++ b/java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/awscore/AwsRequestOverrideConfiguration.java
@@ -0,0 +1,25 @@
+// Generated automatically from software.amazon.awssdk.awscore.AwsRequestOverrideConfiguration for testing purposes
+
+package software.amazon.awssdk.awscore;
+
+import java.util.Optional;
+import software.amazon.awssdk.auth.credentials.AwsCredentialsProvider;
+import software.amazon.awssdk.core.RequestOverrideConfiguration;
+import software.amazon.awssdk.utils.builder.SdkBuilder;
+
+public class AwsRequestOverrideConfiguration extends RequestOverrideConfiguration
+{
+ protected AwsRequestOverrideConfiguration() {}
+ public AwsRequestOverrideConfiguration.Builder toBuilder(){ return null; }
+ public Optional credentialsProvider(){ return null; }
+ public boolean equals(Object p0){ return false; }
+ public int hashCode(){ return 0; }
+ public static AwsRequestOverrideConfiguration from(RequestOverrideConfiguration p0){ return null; }
+ public static AwsRequestOverrideConfiguration.Builder builder(){ return null; }
+ static public interface Builder extends RequestOverrideConfiguration.Builder, SdkBuilder
+ {
+ AwsCredentialsProvider credentialsProvider();
+ AwsRequestOverrideConfiguration build();
+ AwsRequestOverrideConfiguration.Builder credentialsProvider(AwsCredentialsProvider p0);
+ }
+}
diff --git a/java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/awscore/AwsResponse.java b/java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/awscore/AwsResponse.java
new file mode 100644
index 00000000000..294f7d9895f
--- /dev/null
+++ b/java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/awscore/AwsResponse.java
@@ -0,0 +1,22 @@
+// Generated automatically from software.amazon.awssdk.awscore.AwsResponse for testing purposes
+
+package software.amazon.awssdk.awscore;
+
+import software.amazon.awssdk.awscore.AwsResponseMetadata;
+import software.amazon.awssdk.core.SdkResponse;
+
+abstract public class AwsResponse extends SdkResponse
+{
+ protected AwsResponse() {}
+ protected AwsResponse(AwsResponse.Builder p0){}
+ public AwsResponseMetadata responseMetadata(){ return null; }
+ public abstract AwsResponse.Builder toBuilder();
+ public boolean equals(Object p0){ return false; }
+ public int hashCode(){ return 0; }
+ static public interface Builder extends SdkResponse.Builder
+ {
+ AwsResponse build();
+ AwsResponse.Builder responseMetadata(AwsResponseMetadata p0);
+ AwsResponseMetadata responseMetadata();
+ }
+}
diff --git a/java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/awscore/AwsResponseMetadata.java b/java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/awscore/AwsResponseMetadata.java
new file mode 100644
index 00000000000..f514b0bbfd1
--- /dev/null
+++ b/java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/awscore/AwsResponseMetadata.java
@@ -0,0 +1,17 @@
+// Generated automatically from software.amazon.awssdk.awscore.AwsResponseMetadata for testing purposes
+
+package software.amazon.awssdk.awscore;
+
+import java.util.Map;
+
+abstract public class AwsResponseMetadata
+{
+ protected AwsResponseMetadata() {}
+ protected AwsResponseMetadata(AwsResponseMetadata p0){}
+ protected AwsResponseMetadata(Map p0){}
+ protected final String getValue(String p0){ return null; }
+ public String requestId(){ return null; }
+ public boolean equals(Object p0){ return false; }
+ public final String toString(){ return null; }
+ public int hashCode(){ return 0; }
+}
diff --git a/java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/awscore/client/builder/AwsAsyncClientBuilder.java b/java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/awscore/client/builder/AwsAsyncClientBuilder.java
new file mode 100644
index 00000000000..59f40276abf
--- /dev/null
+++ b/java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/awscore/client/builder/AwsAsyncClientBuilder.java
@@ -0,0 +1,9 @@
+// Generated automatically from software.amazon.awssdk.awscore.client.builder.AwsAsyncClientBuilder for testing purposes
+
+package software.amazon.awssdk.awscore.client.builder;
+
+import software.amazon.awssdk.core.client.builder.SdkAsyncClientBuilder;
+
+public interface AwsAsyncClientBuilder, C> extends SdkAsyncClientBuilder
+{
+}
diff --git a/java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/awscore/client/builder/AwsClientBuilder.java b/java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/awscore/client/builder/AwsClientBuilder.java
new file mode 100644
index 00000000000..68e068cf299
--- /dev/null
+++ b/java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/awscore/client/builder/AwsClientBuilder.java
@@ -0,0 +1,17 @@
+// Generated automatically from software.amazon.awssdk.awscore.client.builder.AwsClientBuilder for testing purposes
+
+package software.amazon.awssdk.awscore.client.builder;
+
+import software.amazon.awssdk.auth.credentials.AwsCredentialsProvider;
+import software.amazon.awssdk.awscore.defaultsmode.DefaultsMode;
+import software.amazon.awssdk.core.client.builder.SdkClientBuilder;
+import software.amazon.awssdk.regions.Region;
+
+public interface AwsClientBuilder, ClientT> extends SdkClientBuilder
+{
+ BuilderT credentialsProvider(AwsCredentialsProvider p0);
+ BuilderT dualstackEnabled(Boolean p0);
+ BuilderT fipsEnabled(Boolean p0);
+ BuilderT region(Region p0);
+ default BuilderT defaultsMode(DefaultsMode p0){ return null; }
+}
diff --git a/java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/awscore/defaultsmode/DefaultsMode.java b/java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/awscore/defaultsmode/DefaultsMode.java
new file mode 100644
index 00000000000..759afc7c326
--- /dev/null
+++ b/java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/awscore/defaultsmode/DefaultsMode.java
@@ -0,0 +1,12 @@
+// Generated automatically from software.amazon.awssdk.awscore.defaultsmode.DefaultsMode for testing purposes
+
+package software.amazon.awssdk.awscore.defaultsmode;
+
+
+public enum DefaultsMode
+{
+ AUTO, CROSS_REGION, IN_REGION, LEGACY, MOBILE, STANDARD;
+ private DefaultsMode() {}
+ public String toString(){ return null; }
+ public static DefaultsMode fromValue(String p0){ return null; }
+}
diff --git a/java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/awscore/eventstream/EventStreamResponseHandler.java b/java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/awscore/eventstream/EventStreamResponseHandler.java
new file mode 100644
index 00000000000..f75654709ea
--- /dev/null
+++ b/java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/awscore/eventstream/EventStreamResponseHandler.java
@@ -0,0 +1,27 @@
+// Generated automatically from software.amazon.awssdk.awscore.eventstream.EventStreamResponseHandler for testing purposes
+
+package software.amazon.awssdk.awscore.eventstream;
+
+import java.util.function.Consumer;
+import java.util.function.Function;
+import java.util.function.Supplier;
+import org.reactivestreams.Subscriber;
+import software.amazon.awssdk.core.async.SdkPublisher;
+
+public interface EventStreamResponseHandler
+{
+ static public interface Builder
+ {
+ SubBuilderT onComplete(Runnable p0);
+ SubBuilderT onError(Consumer p0);
+ SubBuilderT onEventStream(Consumer> p0);
+ SubBuilderT onResponse(Consumer p0);
+ SubBuilderT publisherTransformer(Function, software.amazon.awssdk.core.async.SdkPublisher> p0);
+ SubBuilderT subscriber(Consumer p0);
+ SubBuilderT subscriber(Supplier> p0);
+ }
+ void complete();
+ void exceptionOccurred(Throwable p0);
+ void onEventStream(software.amazon.awssdk.core.async.SdkPublisher p0);
+ void responseReceived(ResponseT p0);
+}
diff --git a/java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/core/ApiName.java b/java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/core/ApiName.java
new file mode 100644
index 00000000000..83751580cb6
--- /dev/null
+++ b/java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/core/ApiName.java
@@ -0,0 +1,18 @@
+// Generated automatically from software.amazon.awssdk.core.ApiName for testing purposes
+
+package software.amazon.awssdk.core;
+
+
+public class ApiName
+{
+ protected ApiName() {}
+ public String name(){ return null; }
+ public String version(){ return null; }
+ public static ApiName.Builder builder(){ return null; }
+ static public interface Builder
+ {
+ ApiName build();
+ ApiName.Builder name(String p0);
+ ApiName.Builder version(String p0);
+ }
+}
diff --git a/java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/core/BytesWrapper.java b/java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/core/BytesWrapper.java
new file mode 100644
index 00000000000..fd43538fbd6
--- /dev/null
+++ b/java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/core/BytesWrapper.java
@@ -0,0 +1,21 @@
+// Generated automatically from software.amazon.awssdk.core.BytesWrapper for testing purposes
+
+package software.amazon.awssdk.core;
+
+import java.io.InputStream;
+import java.nio.ByteBuffer;
+import java.nio.charset.Charset;
+import software.amazon.awssdk.http.ContentStreamProvider;
+
+abstract public class BytesWrapper
+{
+ public boolean equals(Object p0){ return false; }
+ public final ByteBuffer asByteBuffer(){ return null; }
+ public final ContentStreamProvider asContentStreamProvider(){ return null; }
+ public final InputStream asInputStream(){ return null; }
+ public final String asString(Charset p0){ return null; }
+ public final String asUtf8String(){ return null; }
+ public final byte[] asByteArray(){ return null; }
+ public final byte[] asByteArrayUnsafe(){ return null; }
+ public int hashCode(){ return 0; }
+}
diff --git a/java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/core/CredentialType.java b/java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/core/CredentialType.java
new file mode 100644
index 00000000000..2a23d68f5b1
--- /dev/null
+++ b/java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/core/CredentialType.java
@@ -0,0 +1,14 @@
+// Generated automatically from software.amazon.awssdk.core.CredentialType for testing purposes
+
+package software.amazon.awssdk.core;
+
+
+public class CredentialType
+{
+ protected CredentialType() {}
+ public String toString(){ return null; }
+ public boolean equals(Object p0){ return false; }
+ public int hashCode(){ return 0; }
+ public static CredentialType TOKEN = null;
+ public static CredentialType of(String p0){ return null; }
+}
diff --git a/java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/core/FileTransformerConfiguration.java b/java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/core/FileTransformerConfiguration.java
new file mode 100644
index 00000000000..13beaff477d
--- /dev/null
+++ b/java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/core/FileTransformerConfiguration.java
@@ -0,0 +1,35 @@
+// Generated automatically from software.amazon.awssdk.core.FileTransformerConfiguration for testing purposes
+
+package software.amazon.awssdk.core;
+
+import software.amazon.awssdk.utils.builder.CopyableBuilder;
+import software.amazon.awssdk.utils.builder.ToCopyableBuilder;
+
+public class FileTransformerConfiguration implements ToCopyableBuilder
+{
+ protected FileTransformerConfiguration() {}
+ public FileTransformerConfiguration.Builder toBuilder(){ return null; }
+ public FileTransformerConfiguration.FailureBehavior failureBehavior(){ return null; }
+ public FileTransformerConfiguration.FileWriteOption fileWriteOption(){ return null; }
+ public boolean equals(Object p0){ return false; }
+ public int hashCode(){ return 0; }
+ public static FileTransformerConfiguration defaultCreateNew(){ return null; }
+ public static FileTransformerConfiguration defaultCreateOrAppend(){ return null; }
+ public static FileTransformerConfiguration defaultCreateOrReplaceExisting(){ return null; }
+ public static FileTransformerConfiguration.Builder builder(){ return null; }
+ static public enum FailureBehavior
+ {
+ DELETE, LEAVE;
+ private FailureBehavior() {}
+ }
+ static public enum FileWriteOption
+ {
+ CREATE_NEW, CREATE_OR_APPEND_TO_EXISTING, CREATE_OR_REPLACE_EXISTING;
+ private FileWriteOption() {}
+ }
+ static public interface Builder extends CopyableBuilder
+ {
+ FileTransformerConfiguration.Builder failureBehavior(FileTransformerConfiguration.FailureBehavior p0);
+ FileTransformerConfiguration.Builder fileWriteOption(FileTransformerConfiguration.FileWriteOption p0);
+ }
+}
diff --git a/java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/core/RequestOverrideConfiguration.java b/java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/core/RequestOverrideConfiguration.java
new file mode 100644
index 00000000000..9dfbe54708a
--- /dev/null
+++ b/java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/core/RequestOverrideConfiguration.java
@@ -0,0 +1,58 @@
+// Generated automatically from software.amazon.awssdk.core.RequestOverrideConfiguration for testing purposes
+
+package software.amazon.awssdk.core;
+
+import java.time.Duration;
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+import java.util.function.Consumer;
+import software.amazon.awssdk.core.ApiName;
+import software.amazon.awssdk.core.interceptor.ExecutionAttribute;
+import software.amazon.awssdk.core.interceptor.ExecutionAttributes;
+import software.amazon.awssdk.core.signer.Signer;
+import software.amazon.awssdk.metrics.MetricPublisher;
+
+abstract public class RequestOverrideConfiguration
+{
+ protected RequestOverrideConfiguration() {}
+ protected RequestOverrideConfiguration(RequestOverrideConfiguration.Builder extends Object> p0){}
+ public ExecutionAttributes executionAttributes(){ return null; }
+ public List apiNames(){ return null; }
+ public List metricPublishers(){ return null; }
+ public Map> headers(){ return null; }
+ public Map> rawQueryParameters(){ return null; }
+ public Optional apiCallAttemptTimeout(){ return null; }
+ public Optional apiCallTimeout(){ return null; }
+ public Optional signer(){ return null; }
+ public abstract RequestOverrideConfiguration.Builder extends RequestOverrideConfiguration.Builder> toBuilder();
+ public boolean equals(Object p0){ return false; }
+ public int hashCode(){ return 0; }
+ static public interface Builder
+ {
+ B putExecutionAttribute(software.amazon.awssdk.core.interceptor.ExecutionAttribute p0, T p1);
+ B addApiName(ApiName p0);
+ B addApiName(java.util.function.Consumer p0);
+ B addMetricPublisher(MetricPublisher p0);
+ B apiCallAttemptTimeout(Duration p0);
+ B apiCallTimeout(Duration p0);
+ B executionAttributes(ExecutionAttributes p0);
+ B headers(Map> p0);
+ B metricPublishers(List p0);
+ B putHeader(String p0, List p1);
+ B putRawQueryParameter(String p0, List p1);
+ B rawQueryParameters(Map> p0);
+ B signer(Signer p0);
+ Duration apiCallAttemptTimeout();
+ Duration apiCallTimeout();
+ ExecutionAttributes executionAttributes();
+ List apiNames();
+ List metricPublishers();
+ Map> headers();
+ Map> rawQueryParameters();
+ RequestOverrideConfiguration build();
+ Signer signer();
+ default B putHeader(String p0, String p1){ return null; }
+ default B putRawQueryParameter(String p0, String p1){ return null; }
+ }
+}
diff --git a/java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/core/ResponseBytes.java b/java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/core/ResponseBytes.java
new file mode 100644
index 00000000000..caa59f6f250
--- /dev/null
+++ b/java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/core/ResponseBytes.java
@@ -0,0 +1,18 @@
+// Generated automatically from software.amazon.awssdk.core.ResponseBytes for testing purposes
+
+package software.amazon.awssdk.core;
+
+import java.io.InputStream;
+import software.amazon.awssdk.core.BytesWrapper;
+
+public class ResponseBytes extends BytesWrapper
+{
+ protected ResponseBytes() {}
+ public ResponseT response(){ return null; }
+ public String toString(){ return null; }
+ public boolean equals(Object p0){ return false; }
+ public int hashCode(){ return 0; }
+ public static software.amazon.awssdk.core.ResponseBytes fromByteArray(ResponseT p0, byte[] p1){ return null; }
+ public static software.amazon.awssdk.core.ResponseBytes fromByteArrayUnsafe(ResponseT p0, byte[] p1){ return null; }
+ public static software.amazon.awssdk.core.ResponseBytes fromInputStream(ResponseT p0, InputStream p1){ return null; }
+}
diff --git a/java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/core/ResponseInputStream.java b/java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/core/ResponseInputStream.java
new file mode 100644
index 00000000000..f6eb514ad9a
--- /dev/null
+++ b/java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/core/ResponseInputStream.java
@@ -0,0 +1,17 @@
+// Generated automatically from software.amazon.awssdk.core.ResponseInputStream for testing purposes
+
+package software.amazon.awssdk.core;
+
+import java.io.InputStream;
+import software.amazon.awssdk.core.io.SdkFilterInputStream;
+import software.amazon.awssdk.http.Abortable;
+import software.amazon.awssdk.http.AbortableInputStream;
+
+public class ResponseInputStream extends SdkFilterInputStream implements Abortable
+{
+ protected ResponseInputStream() {}
+ public ResponseInputStream(ResponseT p0, AbortableInputStream p1){}
+ public ResponseInputStream(ResponseT p0, InputStream p1){}
+ public ResponseT response(){ return null; }
+ public void abort(){}
+}
diff --git a/java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/core/SdkBytes.java b/java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/core/SdkBytes.java
new file mode 100644
index 00000000000..ccf906534ed
--- /dev/null
+++ b/java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/core/SdkBytes.java
@@ -0,0 +1,21 @@
+// Generated automatically from software.amazon.awssdk.core.SdkBytes for testing purposes
+
+package software.amazon.awssdk.core;
+
+import java.io.InputStream;
+import java.io.Serializable;
+import java.nio.ByteBuffer;
+import java.nio.charset.Charset;
+import software.amazon.awssdk.core.BytesWrapper;
+
+public class SdkBytes extends BytesWrapper implements Serializable
+{
+ protected SdkBytes() {}
+ public String toString(){ return null; }
+ public static SdkBytes fromByteArray(byte[] p0){ return null; }
+ public static SdkBytes fromByteArrayUnsafe(byte[] p0){ return null; }
+ public static SdkBytes fromByteBuffer(ByteBuffer p0){ return null; }
+ public static SdkBytes fromInputStream(InputStream p0){ return null; }
+ public static SdkBytes fromString(String p0, Charset p1){ return null; }
+ public static SdkBytes fromUtf8String(String p0){ return null; }
+}
diff --git a/java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/core/SdkClient.java b/java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/core/SdkClient.java
new file mode 100644
index 00000000000..9866575c3e7
--- /dev/null
+++ b/java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/core/SdkClient.java
@@ -0,0 +1,10 @@
+// Generated automatically from software.amazon.awssdk.core.SdkClient for testing purposes
+
+package software.amazon.awssdk.core;
+
+import software.amazon.awssdk.utils.SdkAutoCloseable;
+
+public interface SdkClient extends SdkAutoCloseable
+{
+ String serviceName();
+}
diff --git a/java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/core/SdkField.java b/java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/core/SdkField.java
new file mode 100644
index 00000000000..a81bbf4ab5e
--- /dev/null
+++ b/java/ql/test/experimental/stubs/software-amazon-awssdk-crt-0.20.3/software/amazon/awssdk/core/SdkField.java
@@ -0,0 +1,40 @@
+// Generated automatically from software.amazon.awssdk.core.SdkField for testing purposes
+
+package software.amazon.awssdk.core;
+
+import java.util.Optional;
+import java.util.function.BiConsumer;
+import java.util.function.Function;
+import java.util.function.Supplier;
+import software.amazon.awssdk.core.SdkPojo;
+import software.amazon.awssdk.core.protocol.MarshallLocation;
+import software.amazon.awssdk.core.protocol.MarshallingType;
+import software.amazon.awssdk.core.traits.Trait;
+
+public class SdkField
+{
+ protected SdkField() {}
+ public T getRequiredTrait(java.lang.Class p0){ return null; }
+ public T getTrait(java.lang.Class p0){ return null; }
+ public java.util.Optional getOptionalTrait(java.lang.Class p0){ return null; }
+ public MarshallLocation location(){ return null; }
+ public String locationName(){ return null; }
+ public String memberName(){ return null; }
+ public String unmarshallLocationName(){ return null; }
+ public Supplier constructor(){ return null; }
+ public TypeT getValueOrDefault(Object p0){ return null; }
+ public boolean containsTrait(Class extends Trait> p0){ return false; }
+ public software.amazon.awssdk.core.protocol.MarshallingType super TypeT> marshallingType(){ return null; }
+ public static SdkField.Builder builder(software.amazon.awssdk.core.protocol.MarshallingType super TypeT> p0){ return null; }
+ public void set(Object p0, Object p1){}
+ static public class Builder
+ {
+ protected Builder() {}
+ public SdkField.Builder constructor(Supplier p0){ return null; }
+ public SdkField.Builder getter(Function