diff --git a/src/fsfw/cfdp/handler/DestHandler.cpp b/src/fsfw/cfdp/handler/DestHandler.cpp index 4bb1cf5c..65a62663 100644 --- a/src/fsfw/cfdp/handler/DestHandler.cpp +++ b/src/fsfw/cfdp/handler/DestHandler.cpp @@ -282,21 +282,25 @@ ReturnValue_t cfdp::DestHandler::startTransaction(const MetadataPduReader& reade ReturnValue_t result = OK; size_t sourceNameSize = 0; - const uint8_t* sourceNamePtr = reader.getSourceFileName().getValue(&sourceNameSize); - if (sourceNameSize + 1 > transactionParams.sourceName.size()) { - fileErrorHandler(events::FILENAME_TOO_LARGE_ERROR, 0, "source filename too large"); - return FAILED; + if (not reader.getSourceFileName().isEmpty()) { + const uint8_t* sourceNamePtr = reader.getSourceFileName().getValue(&sourceNameSize); + if (sourceNameSize + 1 > transactionParams.sourceName.size()) { + fileErrorHandler(events::FILENAME_TOO_LARGE_ERROR, 0, "source filename too large"); + return FAILED; + } + std::memcpy(transactionParams.sourceName.data(), sourceNamePtr, sourceNameSize); + transactionParams.sourceName[sourceNameSize] = '\0'; } - std::memcpy(transactionParams.sourceName.data(), sourceNamePtr, sourceNameSize); - transactionParams.sourceName[sourceNameSize] = '\0'; size_t destNameSize = 0; - const uint8_t* destNamePtr = reader.getDestFileName().getValue(&destNameSize); - if (destNameSize + 1 > transactionParams.destName.size()) { - fileErrorHandler(events::FILENAME_TOO_LARGE_ERROR, 0, "dest filename too large"); - return FAILED; + if (not reader.getDestFileName().isEmpty()) { + const uint8_t* destNamePtr = reader.getDestFileName().getValue(&destNameSize); + if (destNameSize + 1 > transactionParams.destName.size()) { + fileErrorHandler(events::FILENAME_TOO_LARGE_ERROR, 0, "dest filename too large"); + return FAILED; + } + std::memcpy(transactionParams.destName.data(), destNamePtr, destNameSize); + transactionParams.destName[destNameSize] = '\0'; } - std::memcpy(transactionParams.destName.data(), destNamePtr, destNameSize); - transactionParams.destName[destNameSize] = '\0'; // If both dest name size and source name size are 0, we are dealing with a metadata only PDU, // so there is no need to create a file or truncate an existing file diff --git a/src/fsfw/cfdp/tlv/Lv.cpp b/src/fsfw/cfdp/tlv/Lv.cpp index 0daec472..0972d973 100644 --- a/src/fsfw/cfdp/tlv/Lv.cpp +++ b/src/fsfw/cfdp/tlv/Lv.cpp @@ -95,3 +95,5 @@ cfdp::Lv& cfdp::Lv::operator=(cfdp::Lv&& other) noexcept { } size_t cfdp::Lv::getValueLen() const { return getSerializedSize() - 1; } + +bool cfdp::Lv::isEmpty() const { return zeroLen; } diff --git a/src/fsfw/cfdp/tlv/Lv.h b/src/fsfw/cfdp/tlv/Lv.h index c1ab78de..ee8e18c6 100644 --- a/src/fsfw/cfdp/tlv/Lv.h +++ b/src/fsfw/cfdp/tlv/Lv.h @@ -50,6 +50,8 @@ class Lv : public SerializeIF { */ const uint8_t* getValue(size_t* size) const; + bool isEmpty() const; + private: bool zeroLen = true; SerialBufferAdapter value; diff --git a/src/fsfw/serialize/SerialBufferAdapter.cpp b/src/fsfw/serialize/SerialBufferAdapter.cpp index 01eb76f9..3d0de695 100644 --- a/src/fsfw/serialize/SerialBufferAdapter.cpp +++ b/src/fsfw/serialize/SerialBufferAdapter.cpp @@ -107,14 +107,6 @@ uint8_t* SerialBufferAdapter::getBuffer() { template const uint8_t* SerialBufferAdapter::getConstBuffer() const { - if (constBuffer == nullptr) { -#if FSFW_CPP_OSTREAM_ENABLED == 1 - sif::error << "SerialBufferAdapter::getConstBuffer:" - " Buffers are unitialized!" - << std::endl; -#endif - return nullptr; - } return constBuffer; } diff --git a/src/fsfw/serialize/SerialBufferAdapter.h b/src/fsfw/serialize/SerialBufferAdapter.h index 9030d7cc..37bc69b3 100644 --- a/src/fsfw/serialize/SerialBufferAdapter.h +++ b/src/fsfw/serialize/SerialBufferAdapter.h @@ -63,7 +63,17 @@ class SerialBufferAdapter : public SerializeIF { ReturnValue_t deSerialize(const uint8_t** buffer, size_t* size, Endianness streamEndianness) override; + /** + * Please note that this function can also return a nullpointer in case the length field contains + * 0. + * @return + */ uint8_t* getBuffer(); + /** + * Please note that this function can also return a nullpointer in case the length field contains + * 0. + * @return + */ [[nodiscard]] const uint8_t* getConstBuffer() const; void setConstBuffer(const uint8_t* buf, count_t bufLen);