bugfix: process: can be only crc

The read command, if returning 0 bytes of data, does return the CRC.

Tested: Verified via a client implementation that it now behaves as
expected on returning 0 bytes from a read (returns only the CRC).
Change-Id: I84200c0fbe8400cc9234b55991fee750cb84faa2
Signed-off-by: Patrick Venture <venture@google.com>
diff --git a/process.cpp b/process.cpp
index 683bf77..a73f70e 100644
--- a/process.cpp
+++ b/process.cpp
@@ -128,8 +128,10 @@
         return result;
     }
 
-    /* The response, if it has one byte, has three, to include the crc16. */
-    if (replyLength < (sizeof(uint16_t) + 1))
+    /* Read can return 0 bytes, and just a CRC, otherwise you need a CRC and 1
+     * byte, therefore the limit is 2 bytes.
+     */
+    if (replyLength < (sizeof(uint16_t)))
     {
         return IPMI_CC_UNSPECIFIED_ERROR;
     }
diff --git a/test/process_unittest.cpp b/test/process_unittest.cpp
index a908ee6..0f683e5 100644
--- a/test/process_unittest.cpp
+++ b/test/process_unittest.cpp
@@ -250,8 +250,8 @@
 
 TEST(ProcessBlobCommandTest, CommandReturnsOkWithInvalidPayloadLength)
 {
-    // There is a minimum payload length of 3 bytes, this command returns a
-    // payload of 2 bytes.
+    // There is a minimum payload length of 2 bytes (the CRC only, no data, for
+    // read), this returns 1.
 
     StrictMock<CrcMock> crc;
     StrictMock<ManagerMock> manager;
@@ -261,7 +261,7 @@
 
     IpmiBlobHandler h = [](ManagerInterface* mgr, const uint8_t* reqBuf,
                            uint8_t* replyCmdBuf, size_t* dataLen) {
-        (*dataLen) = sizeof(uint16_t);
+        (*dataLen) = sizeof(uint8_t);
         return IPMI_CC_OK;
     };