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; };
