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:
parent
24f84664e7
commit
0d996ab75e
@ -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 {
|
searchStr += plainBuf;
|
||||||
//plain post json or other data
|
|
||||||
searchStr += "plain=";
|
|
||||||
}
|
}
|
||||||
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;) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user