Skip to content

Commit

Permalink
Merge pull request #179 from jphickey/fix-95-largefile-bit
Browse files Browse the repository at this point in the history
Fix #95, reject PDUs with large bit set
  • Loading branch information
astrogeco committed Jan 18, 2022
2 parents fe02332 + aba9487 commit c8736ac
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 0 deletions.
13 changes: 13 additions & 0 deletions fsw/src/cf_cfdp.c
Original file line number Diff line number Diff line change
Expand Up @@ -632,6 +632,19 @@ int CF_CFDP_RecvPh(uint8 chan_num, CF_Logical_PduBuffer_t *ph)

CF_CFDP_DecodeHeader(ph->pdec, &ph->pdu_header);

/*
* The "large file" flag is not supported by this implementation yet.
* This means file sizes and offsets will be 64 bits, so codec routines
* will need to be updated to understand this. OSAL also doesn't support
* 64-bit file access yet.
*/
if (CF_CODEC_IS_OK(ph->pdec) && ph->pdu_header.large_flag)
{
CFE_EVS_SendEvent(CF_EID_ERR_PDU_LARGE_FILE, CFE_EVS_EventType_ERROR,
"CF: pdu with large file bit received (unsupported)");
goto err_out;
}

if (CF_CODEC_IS_OK(ph->pdec) && ph->pdu_header.pdu_type == 0)
{
CF_CFDP_DecodeFileDirectiveHeader(ph->pdec, &ph->fdirective);
Expand Down
1 change: 1 addition & 0 deletions fsw/src/cf_events.h
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,7 @@
#define CF_EID_ERR_PDU_GET_EID_SIZE 52
#define CF_EID_ERR_PDU_GET_TSN_SIZE 53
#define CF_EID_ERR_PDU_FD_UNSUPPORTED 54
#define CF_EID_ERR_PDU_LARGE_FILE 55

/* CF_CFDP event ids (engine) */
#define CF_EID_ERR_CFDP_RX_DROPPED 60
Expand Down
6 changes: 6 additions & 0 deletions unit-test/cf_cfdp_tests.c
Original file line number Diff line number Diff line change
Expand Up @@ -255,6 +255,12 @@ void Test_CF_CFDP_RecvPh(void)
CF_CODEC_SET_DONE(ph->pdec);
UtAssert_INT32_EQ(CF_CFDP_RecvPh(UT_CFDP_CHANNEL, ph), -1);
UT_CF_AssertEventID(CF_EID_ERR_PDU_SHORT_HEADER);

/* decode error, large file bit set */
UT_CFDP_SetupBasicTestState(UT_CF_Setup_RX, &ph, NULL, NULL, NULL, NULL);
ph->pdu_header.large_flag = true;
UtAssert_INT32_EQ(CF_CFDP_RecvPh(UT_CFDP_CHANNEL, ph), -1);
UT_CF_AssertEventID(CF_EID_ERR_PDU_LARGE_FILE);
}

void Test_CF_CFDP_RecvMd(void)
Expand Down

0 comments on commit c8736ac

Please sign in to comment.