From e58bb60f873798b831932ac9ff38b031965061c2 Mon Sep 17 00:00:00 2001 From: david gauchard Date: Mon, 13 Jul 2020 12:40:27 +0200 Subject: [PATCH] webserver: do not count "plain" in argument list (#6768) * webserver: do not count "plain" in argument list (it is still available though) --- libraries/ESP8266WebServer/src/ESP8266WebServer-impl.h | 10 ++++++---- libraries/ESP8266WebServer/src/ESP8266WebServer.h | 1 + libraries/ESP8266WebServer/src/Parsing-impl.h | 1 + 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/libraries/ESP8266WebServer/src/ESP8266WebServer-impl.h b/libraries/ESP8266WebServer/src/ESP8266WebServer-impl.h index 0823a5ed4..550376abd 100644 --- a/libraries/ESP8266WebServer/src/ESP8266WebServer-impl.h +++ b/libraries/ESP8266WebServer/src/ESP8266WebServer-impl.h @@ -54,6 +54,7 @@ ESP8266WebServerTemplate::ESP8266WebServerTemplate(IPAddress addr, i , _lastHandler(nullptr) , _currentArgCount(0) , _currentArgs(nullptr) +, _currentArgsHavePlain(0) , _postArgsLen(0) , _postArgs(nullptr) , _headerKeysCount(0) @@ -76,6 +77,7 @@ ESP8266WebServerTemplate::ESP8266WebServerTemplate(int port) , _lastHandler(nullptr) , _currentArgCount(0) , _currentArgs(nullptr) +, _currentArgsHavePlain(0) , _postArgsLen(0) , _postArgs(nullptr) , _headerKeysCount(0) @@ -565,7 +567,7 @@ const String& ESP8266WebServerTemplate::arg(const String& name) cons if ( _postArgs[j].key == name ) return _postArgs[j].value; } - for (int i = 0; i < _currentArgCount; ++i) { + for (int i = 0; i < _currentArgCount + _currentArgsHavePlain; ++i) { if ( _currentArgs[i].key == name ) return _currentArgs[i].value; } @@ -574,14 +576,14 @@ const String& ESP8266WebServerTemplate::arg(const String& name) cons template const String& ESP8266WebServerTemplate::arg(int i) const { - if (i >= 0 && i < _currentArgCount) + if (i >= 0 && i < _currentArgCount + _currentArgsHavePlain) return _currentArgs[i].value; return emptyString; } template const String& ESP8266WebServerTemplate::argName(int i) const { - if (i >= 0 && i < _currentArgCount) + if (i >= 0 && i < _currentArgCount + _currentArgsHavePlain) return _currentArgs[i].key; return emptyString; } @@ -597,7 +599,7 @@ bool ESP8266WebServerTemplate::hasArg(const String& name) const { if (_postArgs[j].key == name) return true; } - for (int i = 0; i < _currentArgCount; ++i) { + for (int i = 0; i < _currentArgCount + _currentArgsHavePlain; ++i) { if (_currentArgs[i].key == name) return true; } diff --git a/libraries/ESP8266WebServer/src/ESP8266WebServer.h b/libraries/ESP8266WebServer/src/ESP8266WebServer.h index 2ace5dc10..85eab1b7d 100644 --- a/libraries/ESP8266WebServer/src/ESP8266WebServer.h +++ b/libraries/ESP8266WebServer/src/ESP8266WebServer.h @@ -233,6 +233,7 @@ protected: int _currentArgCount; RequestArgument* _currentArgs; + int _currentArgsHavePlain; std::unique_ptr _currentUpload; int _postArgsLen; RequestArgument* _postArgs; diff --git a/libraries/ESP8266WebServer/src/Parsing-impl.h b/libraries/ESP8266WebServer/src/Parsing-impl.h index 54bcd6c28..6c96d564a 100644 --- a/libraries/ESP8266WebServer/src/Parsing-impl.h +++ b/libraries/ESP8266WebServer/src/Parsing-impl.h @@ -208,6 +208,7 @@ bool ESP8266WebServerTemplate::_parseRequest(ClientType& client) { RequestArgument& arg = _currentArgs[_currentArgCount++]; arg.key = F("plain"); arg.value = plainBuf; + _currentArgsHavePlain = 1; } } else { // isForm is true // here: content is not yet read (plainBuf is still empty)