mirror of
https://github.com/espressif/openthread.git
synced 2026-10-12 10:47:43 +00:00
[cli] avoid input overflow (#3691)
This commit is contained in:
+10
-24
@@ -126,24 +126,11 @@ extern "C" void otPlatUartReceived(const uint8_t *aBuf, uint16_t aBufLength)
|
||||
|
||||
void Uart::ReceiveTask(const uint8_t *aBuf, uint16_t aBufLength)
|
||||
{
|
||||
static const char sCommandPrompt[] = {'>', ' '};
|
||||
|
||||
#if OPENTHREAD_CONFIG_UART_CLI_RAW
|
||||
if (aBufLength > 0)
|
||||
{
|
||||
memcpy(mRxBuffer + mRxLength, aBuf, aBufLength);
|
||||
mRxLength += aBufLength;
|
||||
}
|
||||
|
||||
if (aBuf[aBufLength - 1] == '\r' || aBuf[aBufLength - 1] == '\n')
|
||||
{
|
||||
mRxBuffer[mRxLength] = '\0';
|
||||
ProcessCommand();
|
||||
Output(sCommandPrompt, sizeof(sCommandPrompt));
|
||||
}
|
||||
#else // OPENTHREAD_CONFIG_UART_CLI_RAW
|
||||
#if !OPENTHREAD_CONFIG_UART_CLI_RAW
|
||||
static const char sEraseString[] = {'\b', ' ', '\b'};
|
||||
static const char CRNL[] = {'\r', '\n'};
|
||||
#endif
|
||||
static const char sCommandPrompt[] = {'>', ' '};
|
||||
const uint8_t * end;
|
||||
|
||||
end = aBuf + aBufLength;
|
||||
@@ -154,8 +141,9 @@ void Uart::ReceiveTask(const uint8_t *aBuf, uint16_t aBufLength)
|
||||
{
|
||||
case '\r':
|
||||
case '\n':
|
||||
#if !OPENTHREAD_CONFIG_UART_CLI_RAW
|
||||
Output(CRNL, sizeof(CRNL));
|
||||
|
||||
#endif
|
||||
if (mRxLength > 0)
|
||||
{
|
||||
mRxBuffer[mRxLength] = '\0';
|
||||
@@ -166,6 +154,7 @@ void Uart::ReceiveTask(const uint8_t *aBuf, uint16_t aBufLength)
|
||||
|
||||
break;
|
||||
|
||||
#if !OPENTHREAD_CONFIG_UART_CLI_RAW
|
||||
#if OPENTHREAD_POSIX
|
||||
|
||||
case 0x04: // ASCII for Ctrl-D
|
||||
@@ -182,30 +171,27 @@ void Uart::ReceiveTask(const uint8_t *aBuf, uint16_t aBufLength)
|
||||
}
|
||||
|
||||
break;
|
||||
#endif // !OPENTHREAD_CONFIG_UART_CLI_RAW
|
||||
|
||||
default:
|
||||
if (mRxLength < kRxBufferSize - 1)
|
||||
{
|
||||
#if !OPENTHREAD_CONFIG_UART_CLI_RAW
|
||||
Output(reinterpret_cast<const char *>(aBuf), 1);
|
||||
#endif
|
||||
mRxBuffer[mRxLength++] = static_cast<char>(*aBuf);
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
#endif // OPENTHREAD_CONFIG_UART_CLI_RAW
|
||||
}
|
||||
|
||||
otError Uart::ProcessCommand(void)
|
||||
{
|
||||
otError error = OT_ERROR_NONE;
|
||||
|
||||
if (mRxBuffer[mRxLength - 1] == '\n')
|
||||
{
|
||||
mRxBuffer[--mRxLength] = '\0';
|
||||
}
|
||||
|
||||
if (mRxBuffer[mRxLength - 1] == '\r')
|
||||
while (mRxBuffer[mRxLength - 1] == '\n' || mRxBuffer[mRxLength - 1] == '\r')
|
||||
{
|
||||
mRxBuffer[--mRxLength] = '\0';
|
||||
}
|
||||
|
||||
@@ -62,7 +62,6 @@ SNTP_CLIENT ?= 1
|
||||
UDP_FORWARD ?= 1
|
||||
|
||||
COMMONCFLAGS := \
|
||||
-DOPENTHREAD_CONFIG_UART_CLI_RAW=1 \
|
||||
-g \
|
||||
$(NULL)
|
||||
|
||||
|
||||
@@ -52,4 +52,6 @@
|
||||
#define OPENTHREAD_CONFIG_ENABLE_SLAAC 1
|
||||
#endif
|
||||
|
||||
#define OPENTHREAD_CONFIG_UART_CLI_RAW 1
|
||||
|
||||
#endif // OPENTHREAD_CORE_POSIX_CONFIG_H_
|
||||
|
||||
Reference in New Issue
Block a user