diff --git a/src/api.h b/src/api.h
index 3f1fed0..f99f3ed 100644
--- a/src/api.h
+++ b/src/api.h
@@ -32,6 +32,10 @@
 	case -ENOMSG:
 		rc = PLDM_ERROR_INVALID_PLDM_TYPE;
 		break;
+	case -EBADMSG:
+	case -EOVERFLOW:
+		rc = PLDM_ERROR_INVALID_LENGTH;
+		break;
 	default:
 		assert(false);
 		rc = PLDM_ERROR;
diff --git a/src/oem/meta/file_io.c b/src/oem/meta/file_io.c
index 9df6263..ce7d9e3 100644
--- a/src/oem/meta/file_io.c
+++ b/src/oem/meta/file_io.c
@@ -1,41 +1,91 @@
 /* SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later */
 #include <libpldm/oem/meta/file_io.h>
 #include <endian.h>
+#include <stdlib.h>
 #include <string.h>
 #include <stdio.h>
-#include "msgbuf.h"
 
-#define PLDM_OEM_META_DECODE_WRITE_FILE_IO_MIN_SIZE 6
-LIBPLDM_ABI_STABLE
-int decode_oem_meta_file_io_req(const struct pldm_msg *msg,
-				size_t payload_length, uint8_t *file_handle,
-				uint32_t *length, uint8_t *data)
+#include "api.h"
+#include "msgbuf.h"
+#include "dsp/base.h"
+
+LIBPLDM_ABI_TESTING
+void *pldm_oem_meta_file_io_write_req_data(
+	struct pldm_oem_meta_file_io_write_req *req)
+{
+	return req->data;
+}
+
+LIBPLDM_ABI_TESTING
+int decode_oem_meta_file_io_write_req(
+	const struct pldm_msg *msg, size_t payload_length,
+	struct pldm_oem_meta_file_io_write_req *req, size_t req_length)
 {
 	struct pldm_msgbuf _buf;
 	struct pldm_msgbuf *buf = &_buf;
 	int rc;
 
-	if (msg == NULL || file_handle == NULL || length == NULL ||
-	    data == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
+	if (msg == NULL || req == NULL) {
+		return -EINVAL;
 	}
 
-	rc = pldm_msgbuf_init_cc(buf,
-				 PLDM_OEM_META_DECODE_WRITE_FILE_IO_MIN_SIZE,
-				 msg->payload, payload_length);
+	if (req_length < sizeof(*req)) {
+		return -EINVAL;
+	}
+
+	rc = pldm_msgbuf_init_errno(buf,
+				    PLDM_OEM_META_FILE_IO_WRITE_REQ_MIN_LENGTH,
+				    msg->payload, payload_length);
 	if (rc) {
 		return rc;
 	}
 
-	pldm_msgbuf_extract_p(buf, file_handle);
-	pldm_msgbuf_extract_p(buf, length);
+	pldm_msgbuf_extract(buf, req->handle);
+	rc = pldm_msgbuf_extract(buf, req->length);
+	if (rc) {
+		return rc;
+	}
 
-	/* NOTE: Memory safety failure */
-	rc = pldm_msgbuf_extract_array_uint8(buf, (size_t)(*length), data,
-					     UINT32_MAX);
+	rc = pldm_msgbuf_extract_array(buf, req->length, req->data,
+				       req_length - sizeof(*req));
 	if (rc) {
 		return rc;
 	}
 
 	return pldm_msgbuf_destroy_consumed(buf);
 }
+
+LIBPLDM_ABI_DEPRECATED
+int decode_oem_meta_file_io_req(const struct pldm_msg *msg,
+				size_t payload_length, uint8_t *file_handle,
+				uint32_t *length, uint8_t *data)
+{
+	struct pldm_oem_meta_file_io_write_req *request_msg;
+	size_t request_msg_len;
+	int rc;
+
+	if (msg == NULL || file_handle == NULL || length == NULL ||
+	    data == NULL) {
+		return pldm_xlate_errno(-EINVAL);
+	}
+
+	request_msg_len = sizeof(*request_msg) + payload_length;
+	request_msg = malloc(request_msg_len);
+
+	rc = decode_oem_meta_file_io_write_req(msg, payload_length, request_msg,
+					       request_msg_len);
+	if (rc < 0) {
+		free(request_msg);
+		return pldm_xlate_errno(rc);
+	}
+
+	*file_handle = request_msg->handle;
+	*length = request_msg->length;
+
+	/* NOTE: Unsafe, memory safety is not possible due to API constraints. */
+	memcpy(data, request_msg->data, request_msg->length);
+
+	free(request_msg);
+
+	return 0;
+}
