This is an automated email from the ASF dual-hosted git repository.

aboda pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/nifi-minifi-cpp.git

commit a955854ab0723242079b25b254b85c4f1106affa
Author: Marton Szasz <[email protected]>
AuthorDate: Tue Feb 2 16:22:39 2021 +0100

    MINIFICPP-1470 ByteArrayCallback: avoid OOB indexing during address 
calculation
    
    Signed-off-by: Arpad Boda <[email protected]>
    
    This closes #989
---
 extensions/http-curl/client/HTTPCallback.h  |  4 ++--
 libminifi/include/utils/ByteArrayCallback.h | 24 ++++++++----------------
 2 files changed, 10 insertions(+), 18 deletions(-)

diff --git a/extensions/http-curl/client/HTTPCallback.h 
b/extensions/http-curl/client/HTTPCallback.h
index 827de10..921a8c5 100644
--- a/extensions/http-curl/client/HTTPCallback.h
+++ b/extensions/http-curl/client/HTTPCallback.h
@@ -120,7 +120,7 @@ class HttpStreamingCallback : public ByteInputCallBack {
     return ptr_ + relative_pos;
   }
 
-  const size_t getRemaining(size_t pos) override {
+  size_t getRemaining(size_t pos) override {
     logger_->log_trace("getRemaining(pos: %zu) called", pos);
 
     std::unique_lock<std::mutex> lock(mutex_);
@@ -128,7 +128,7 @@ class HttpStreamingCallback : public ByteInputCallBack {
     return total_bytes_loaded_ - pos;
   }
 
-  const size_t getBufferSize() override {
+  size_t getBufferSize() override {
     logger_->log_trace("getBufferSize() called");
 
     std::unique_lock<std::mutex> lock(mutex_);
diff --git a/libminifi/include/utils/ByteArrayCallback.h 
b/libminifi/include/utils/ByteArrayCallback.h
index cbcdb4c..84e3362 100644
--- a/libminifi/include/utils/ByteArrayCallback.h
+++ b/libminifi/include/utils/ByteArrayCallback.h
@@ -36,13 +36,10 @@ namespace utils {
  */
 class ByteInputCallBack : public InputStreamCallback {
  public:
-  ByteInputCallBack()
-      : ptr(nullptr) {
-  }
-
-  virtual ~ByteInputCallBack() = default;
+  ByteInputCallBack() = default;
+  ~ByteInputCallBack() override = default;
 
-  virtual int64_t process(const std::shared_ptr<io::BaseStream>& stream) {
+  int64_t process(const std::shared_ptr<io::BaseStream>& stream) override {
     stream->seek(0);
 
     if (stream->size() > 0) {
@@ -51,34 +48,29 @@ class ByteInputCallBack : public InputStreamCallback {
       stream->read(reinterpret_cast<uint8_t*>(vec.data()), 
gsl::narrow<int>(stream->size()));
     }
 
-    ptr = reinterpret_cast<char*>(&vec[0]);
-
     return vec.size();
   }
 
-  virtual void seek(size_t pos) {
-    ptr = &vec[pos];
-  }
+  virtual void seek(size_t) { }
 
   virtual void write(std::string content) {
     vec.assign(content.begin(), content.end());
-    ptr = &vec[0];
   }
 
   virtual char *getBuffer(size_t pos) {
-    return &vec[pos];
+    gsl_Expects(pos <= vec.size());
+    return vec.data() + pos;
   }
 
-  virtual const size_t getRemaining(size_t pos) {
+  virtual size_t getRemaining(size_t pos) {
     return getBufferSize() - pos;
   }
 
-  virtual const size_t getBufferSize() {
+  virtual size_t getBufferSize() {
     return vec.size();
   }
 
  private:
-  char *ptr;
   std::vector<char> vec;
 };
 

Reply via email to