1
0
mirror of https://github.com/esp8266/Arduino.git synced 2025-06-07 16:23:38 +03:00

webserver: do not count "plain" in argument list (#6768)

* webserver: do not count "plain" in argument list (it is still available though)
This commit is contained in:
david gauchard 2020-07-13 12:40:27 +02:00 committed by GitHub
parent 1134194edc
commit e58bb60f87
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 8 additions and 4 deletions

View File

@ -54,6 +54,7 @@ ESP8266WebServerTemplate<ServerType>::ESP8266WebServerTemplate(IPAddress addr, i
, _lastHandler(nullptr) , _lastHandler(nullptr)
, _currentArgCount(0) , _currentArgCount(0)
, _currentArgs(nullptr) , _currentArgs(nullptr)
, _currentArgsHavePlain(0)
, _postArgsLen(0) , _postArgsLen(0)
, _postArgs(nullptr) , _postArgs(nullptr)
, _headerKeysCount(0) , _headerKeysCount(0)
@ -76,6 +77,7 @@ ESP8266WebServerTemplate<ServerType>::ESP8266WebServerTemplate(int port)
, _lastHandler(nullptr) , _lastHandler(nullptr)
, _currentArgCount(0) , _currentArgCount(0)
, _currentArgs(nullptr) , _currentArgs(nullptr)
, _currentArgsHavePlain(0)
, _postArgsLen(0) , _postArgsLen(0)
, _postArgs(nullptr) , _postArgs(nullptr)
, _headerKeysCount(0) , _headerKeysCount(0)
@ -565,7 +567,7 @@ const String& ESP8266WebServerTemplate<ServerType>::arg(const String& name) cons
if ( _postArgs[j].key == name ) if ( _postArgs[j].key == name )
return _postArgs[j].value; return _postArgs[j].value;
} }
for (int i = 0; i < _currentArgCount; ++i) { for (int i = 0; i < _currentArgCount + _currentArgsHavePlain; ++i) {
if ( _currentArgs[i].key == name ) if ( _currentArgs[i].key == name )
return _currentArgs[i].value; return _currentArgs[i].value;
} }
@ -574,14 +576,14 @@ const String& ESP8266WebServerTemplate<ServerType>::arg(const String& name) cons
template <typename ServerType> template <typename ServerType>
const String& ESP8266WebServerTemplate<ServerType>::arg(int i) const { const String& ESP8266WebServerTemplate<ServerType>::arg(int i) const {
if (i >= 0 && i < _currentArgCount) if (i >= 0 && i < _currentArgCount + _currentArgsHavePlain)
return _currentArgs[i].value; return _currentArgs[i].value;
return emptyString; return emptyString;
} }
template <typename ServerType> template <typename ServerType>
const String& ESP8266WebServerTemplate<ServerType>::argName(int i) const { const String& ESP8266WebServerTemplate<ServerType>::argName(int i) const {
if (i >= 0 && i < _currentArgCount) if (i >= 0 && i < _currentArgCount + _currentArgsHavePlain)
return _currentArgs[i].key; return _currentArgs[i].key;
return emptyString; return emptyString;
} }
@ -597,7 +599,7 @@ bool ESP8266WebServerTemplate<ServerType>::hasArg(const String& name) const {
if (_postArgs[j].key == name) if (_postArgs[j].key == name)
return true; return true;
} }
for (int i = 0; i < _currentArgCount; ++i) { for (int i = 0; i < _currentArgCount + _currentArgsHavePlain; ++i) {
if (_currentArgs[i].key == name) if (_currentArgs[i].key == name)
return true; return true;
} }

View File

@ -233,6 +233,7 @@ protected:
int _currentArgCount; int _currentArgCount;
RequestArgument* _currentArgs; RequestArgument* _currentArgs;
int _currentArgsHavePlain;
std::unique_ptr<HTTPUpload> _currentUpload; std::unique_ptr<HTTPUpload> _currentUpload;
int _postArgsLen; int _postArgsLen;
RequestArgument* _postArgs; RequestArgument* _postArgs;

View File

@ -208,6 +208,7 @@ bool ESP8266WebServerTemplate<ServerType>::_parseRequest(ClientType& client) {
RequestArgument& arg = _currentArgs[_currentArgCount++]; RequestArgument& arg = _currentArgs[_currentArgCount++];
arg.key = F("plain"); arg.key = F("plain");
arg.value = plainBuf; arg.value = plainBuf;
_currentArgsHavePlain = 1;
} }
} else { // isForm is true } else { // isForm is true
// here: content is not yet read (plainBuf is still empty) // here: content is not yet read (plainBuf is still empty)