mirror of
https://github.com/arendst/Tasmota.git
synced 2025-07-27 04:36:31 +00:00
Fix telnet buffer overrun detection
This commit is contained in:
parent
b77b622fbe
commit
289120ee92
@ -6,7 +6,7 @@ All notable changes to this project will be documented in this file.
|
|||||||
## [14.5.0.3]
|
## [14.5.0.3]
|
||||||
### Added
|
### Added
|
||||||
- Extend command `GPIO` with different display options and allowing updating of module GPIO's in one go
|
- Extend command `GPIO` with different display options and allowing updating of module GPIO's in one go
|
||||||
- Berry `bytes.add()` now accepts 3-bytes values
|
- Berry `bytes.add()` now accepts 3-bytes values (#23200)
|
||||||
|
|
||||||
### Breaking Changed
|
### Breaking Changed
|
||||||
|
|
||||||
|
@ -126,7 +126,8 @@ The latter links can be used for OTA upgrades too like ``OtaUrl https://ota.tasm
|
|||||||
- Berry `introspect.solidified()` to know if a Berry object is solidified or in RAM [#23063](https://github.com/arendst/Tasmota/issues/23063)
|
- Berry `introspect.solidified()` to know if a Berry object is solidified or in RAM [#23063](https://github.com/arendst/Tasmota/issues/23063)
|
||||||
- Berry `global.undef()` to undefine a global variable [#23073](https://github.com/arendst/Tasmota/issues/23073)
|
- Berry `global.undef()` to undefine a global variable [#23073](https://github.com/arendst/Tasmota/issues/23073)
|
||||||
- Berry load `.tapp` files in `/.extensions/` then in `/` [#23113](https://github.com/arendst/Tasmota/issues/23113)
|
- Berry load `.tapp` files in `/.extensions/` then in `/` [#23113](https://github.com/arendst/Tasmota/issues/23113)
|
||||||
- Berry `re.dump()` (#23162)[#23162](https://github.com/arendst/Tasmota/issues/23162)
|
- Berry `re.dump()` [#23162](https://github.com/arendst/Tasmota/issues/23162)
|
||||||
|
- Berry `bytes.add()` now accepts 3-bytes values [#23200](https://github.com/arendst/Tasmota/issues/23200)
|
||||||
- Matter prepare for ICD cluster [#23158](https://github.com/arendst/Tasmota/issues/23158)
|
- Matter prepare for ICD cluster [#23158](https://github.com/arendst/Tasmota/issues/23158)
|
||||||
- LVGL experimental mirroring of display on Web UI [#23041](https://github.com/arendst/Tasmota/issues/23041)
|
- LVGL experimental mirroring of display on Web UI [#23041](https://github.com/arendst/Tasmota/issues/23041)
|
||||||
- HASPmota autostart when `pages.jsonl` exists [#23181](https://github.com/arendst/Tasmota/issues/23181)
|
- HASPmota autostart when `pages.jsonl` exists [#23181](https://github.com/arendst/Tasmota/issues/23181)
|
||||||
|
@ -86,6 +86,7 @@ struct {
|
|||||||
uint8_t color[3];
|
uint8_t color[3];
|
||||||
bool ip_filter_enabled;
|
bool ip_filter_enabled;
|
||||||
bool color_disable;
|
bool color_disable;
|
||||||
|
bool overrun;
|
||||||
} Telnet;
|
} Telnet;
|
||||||
|
|
||||||
/********************************************************************************************/
|
/********************************************************************************************/
|
||||||
@ -126,9 +127,7 @@ void TelnetGetLog(void) {
|
|||||||
uint32_t index = Telnet.log_index; // Dump log buffer
|
uint32_t index = Telnet.log_index; // Dump log buffer
|
||||||
char* line;
|
char* line;
|
||||||
size_t len;
|
size_t len;
|
||||||
bool any_line = false;
|
|
||||||
while (GetLog(TasmotaGlobal.seriallog_level, &index, &line, &len)) {
|
while (GetLog(TasmotaGlobal.seriallog_level, &index, &line, &len)) {
|
||||||
any_line = true;
|
|
||||||
TelnetWrite(line, len -1);
|
TelnetWrite(line, len -1);
|
||||||
}
|
}
|
||||||
Telnet.log_index = index;
|
Telnet.log_index = index;
|
||||||
@ -185,6 +184,8 @@ void TelnetLoop(void) {
|
|||||||
if (isprint(in_byte)) { // Any char between 32 and 127
|
if (isprint(in_byte)) { // Any char between 32 and 127
|
||||||
if (Telnet.in_byte_counter < Telnet.buffer_size -1) { // Add char to string if it still fits
|
if (Telnet.in_byte_counter < Telnet.buffer_size -1) { // Add char to string if it still fits
|
||||||
Telnet.buffer[Telnet.in_byte_counter++] = in_byte;
|
Telnet.buffer[Telnet.in_byte_counter++] = in_byte;
|
||||||
|
} else {
|
||||||
|
Telnet.overrun = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (in_byte == '\n') {
|
else if (in_byte == '\n') {
|
||||||
@ -192,7 +193,7 @@ void TelnetLoop(void) {
|
|||||||
Telnet.buffer[Telnet.in_byte_counter] = 0; // Telnet data completed
|
Telnet.buffer[Telnet.in_byte_counter] = 0; // Telnet data completed
|
||||||
Telnet.prompt = 1; // Print prompt after requested data and use response color
|
Telnet.prompt = 1; // Print prompt after requested data and use response color
|
||||||
SetMinimumSeriallog();
|
SetMinimumSeriallog();
|
||||||
if (Telnet.in_byte_counter >= Telnet.buffer_size) {
|
if (Telnet.overrun) {
|
||||||
AddLog(LOG_LEVEL_INFO, PSTR(D_LOG_TELNET "Buffer overrun"));
|
AddLog(LOG_LEVEL_INFO, PSTR(D_LOG_TELNET "Buffer overrun"));
|
||||||
} else {
|
} else {
|
||||||
char command[CMDSZ];
|
char command[CMDSZ];
|
||||||
@ -205,6 +206,7 @@ void TelnetLoop(void) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
Telnet.in_byte_counter = 0;
|
Telnet.in_byte_counter = 0;
|
||||||
|
Telnet.overrun = false;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user