Exportable version of WizziLab's modem driver.
Diff: src/modem_ref.cpp
- Revision:
- 34:137ae523ca43
- Parent:
- 31:517fc900afba
- Child:
- 35:ac940cf8ebe6
--- a/src/modem_ref.cpp Mon Aug 27 11:05:33 2018 +0000 +++ b/src/modem_ref.cpp Wed Aug 29 15:30:30 2018 +0000 @@ -74,12 +74,20 @@ int id = -1; s8 err = ALP_ERR_NONE; u8 eop; + uint32_t parsed; //REF_PRINT("input 0x%x/%d Bytes\n",flowid,size); switch (flowid) { case WC_FLOW_ALP_UNS: case WC_FLOW_ALP_CMD: - rem -= alp_parse_chunk(&p, &r); + parsed = alp_parse_chunk(&p, &r); + if (!parsed) + { + // Discard the payload in case of parsing error. + REF_PRINT("Parsing error in %s:%d!\r\n", __FILE__, __LINE__); + break; + } + rem -= parsed; //REF_PRINT("Rem %d Bytes\n", rem); // This should always be a TAG'ed request in case of FS access... if (r.type == ALP_OPCODE_TAG) @@ -88,7 +96,14 @@ while(rem>0) { // Parse File Operation - rem -= alp_parse_chunk(&p, &r); + parsed = alp_parse_chunk(&p, &r); + if (!parsed) + { + // Discard the payload in case of parsing error. + REF_PRINT("Parsing error in %s:%d!\r\n", __FILE__, __LINE__); + break; + } + rem -= parsed; //REF_PRINT("ALP OP[%d]\n",r.type); switch (r.type) { @@ -168,7 +183,15 @@ break; case WC_FLOW_ALP_RESP: // This should always be a TAG'ed response as we tag our requests - rem -= alp_parse_chunk(&p, &r); + parsed = alp_parse_chunk(&p, &r); + if (!parsed) + { + // Discard the payload in case of parsing error. + REF_PRINT("Parsing error in %s:%d!\r\n", __FILE__, __LINE__); + break; + } + rem -= parsed; + ASSERT((r.type == ALP_OPCODE_RSP_TAG),"ASSERT: expecting RESP_TAG got %d\n",r.type); id = r.meta.tag.id; eop = r.meta.tag.eop; @@ -186,7 +209,15 @@ // Actual response(s) while(rem>0) { - rem -= alp_parse_chunk(&p, &r); + parsed = alp_parse_chunk(&p, &r); + if (!parsed) + { + // Discard the payload in case of parsing error. + REF_PRINT("Parsing error in %s:%d!\r\n", __FILE__, __LINE__); + break; + } + rem -= parsed; + switch (r.type) { case ALP_OPCODE_RSP_TAG: