diff --git a/libraries/ESP8266WebServer/src/ESP8266WebServer-impl.h b/libraries/ESP8266WebServer/src/ESP8266WebServer-impl.h index 0823a5ed47..550376abdd 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 2ace5dc107..85eab1b7df 100644 --- a/libraries/ESP8266WebServer/src/ESP8266WebServer.h +++ b/libraries/ESP8266WebServer/src/ESP8266WebServer.h @@ -233,6 +233,7 @@ class ESP8266WebServerTemplate 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 54bcd6c28e..6c96d564a8 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)