[cli] avoid input overflow (#3691)

This commit is contained in:
Yakun Xu
2019-03-18 09:01:02 -07:00
committed by Jonathan Hui
parent fab45352f5
commit 728e19b47a
3 changed files with 12 additions and 25 deletions
+10 -24
View File
@@ -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';
}
-1
View File
@@ -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_