1
0
mirror of https://github.com/esp8266/Arduino.git synced 2025-04-19 23:22:16 +03:00

fix plain post content containing special chars being parsed as arguments (#2241)

this solution actually keeps the content as is, as long as it's text
(does not contain zeroes)
This commit is contained in:
Me No Dev 2016-07-07 00:59:26 +03:00 committed by GitHub
parent 24f84664e7
commit 0d996ab75e

View File

@ -190,11 +190,16 @@ bool ESP8266WebServer::_parseRequest(WiFiClient& client) {
size_t decodedLen = decoded.length(); size_t decodedLen = decoded.length();
memcpy(plainBuf, decoded.c_str(), decodedLen); memcpy(plainBuf, decoded.c_str(), decodedLen);
plainBuf[decodedLen] = 0; plainBuf[decodedLen] = 0;
} else {
//plain post json or other data
searchStr += "plain=";
}
searchStr += plainBuf; searchStr += plainBuf;
}
_parseArguments(searchStr);
if(!isEncoded){
//plain post json or other data
RequestArgument& arg = _currentArgs[_currentArgCount++];
arg.key = "plain";
arg.value = String(plainBuf);
}
#ifdef DEBUG_ESP_HTTP_SERVER #ifdef DEBUG_ESP_HTTP_SERVER
DEBUG_OUTPUT.print("Plain: "); DEBUG_OUTPUT.print("Plain: ");
DEBUG_OUTPUT.println(plainBuf); DEBUG_OUTPUT.println(plainBuf);
@ -202,8 +207,9 @@ bool ESP8266WebServer::_parseRequest(WiFiClient& client) {
free(plainBuf); free(plainBuf);
} }
} }
_parseArguments(searchStr);
if (isForm){ if (isForm){
_parseArguments(searchStr);
if (!_parseForm(client, boundaryStr, contentLength)) { if (!_parseForm(client, boundaryStr, contentLength)) {
return false; return false;
} }
@ -269,6 +275,7 @@ void ESP8266WebServer::_parseArguments(String data) {
_currentArgs = 0; _currentArgs = 0;
if (data.length() == 0) { if (data.length() == 0) {
_currentArgCount = 0; _currentArgCount = 0;
_currentArgs = new RequestArgument[1];
return; return;
} }
_currentArgCount = 1; _currentArgCount = 1;
@ -285,7 +292,7 @@ void ESP8266WebServer::_parseArguments(String data) {
DEBUG_OUTPUT.println(_currentArgCount); DEBUG_OUTPUT.println(_currentArgCount);
#endif #endif
_currentArgs = new RequestArgument[_currentArgCount]; _currentArgs = new RequestArgument[_currentArgCount+1];
int pos = 0; int pos = 0;
int iarg; int iarg;
for (iarg = 0; iarg < _currentArgCount;) { for (iarg = 0; iarg < _currentArgCount;) {