Skip to content

Commit 0d996ab

Browse files
authored
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)
1 parent 24f8466 commit 0d996ab

File tree

1 file changed

+12
-5
lines changed

1 file changed

+12
-5
lines changed

libraries/ESP8266WebServer/src/Parsing.cpp

+12-5
Original file line numberDiff line numberDiff line change
@@ -190,20 +190,26 @@ bool ESP8266WebServer::_parseRequest(WiFiClient& client) {
190190
size_t decodedLen = decoded.length();
191191
memcpy(plainBuf, decoded.c_str(), decodedLen);
192192
plainBuf[decodedLen] = 0;
193-
} else {
193+
searchStr += plainBuf;
194+
}
195+
_parseArguments(searchStr);
196+
if(!isEncoded){
194197
//plain post json or other data
195-
searchStr += "plain=";
198+
RequestArgument& arg = _currentArgs[_currentArgCount++];
199+
arg.key = "plain";
200+
arg.value = String(plainBuf);
196201
}
197-
searchStr += plainBuf;
202+
198203
#ifdef DEBUG_ESP_HTTP_SERVER
199204
DEBUG_OUTPUT.print("Plain: ");
200205
DEBUG_OUTPUT.println(plainBuf);
201206
#endif
202207
free(plainBuf);
203208
}
204209
}
205-
_parseArguments(searchStr);
210+
206211
if (isForm){
212+
_parseArguments(searchStr);
207213
if (!_parseForm(client, boundaryStr, contentLength)) {
208214
return false;
209215
}
@@ -269,6 +275,7 @@ void ESP8266WebServer::_parseArguments(String data) {
269275
_currentArgs = 0;
270276
if (data.length() == 0) {
271277
_currentArgCount = 0;
278+
_currentArgs = new RequestArgument[1];
272279
return;
273280
}
274281
_currentArgCount = 1;
@@ -285,7 +292,7 @@ void ESP8266WebServer::_parseArguments(String data) {
285292
DEBUG_OUTPUT.println(_currentArgCount);
286293
#endif
287294

288-
_currentArgs = new RequestArgument[_currentArgCount];
295+
_currentArgs = new RequestArgument[_currentArgCount+1];
289296
int pos = 0;
290297
int iarg;
291298
for (iarg = 0; iarg < _currentArgCount;) {

0 commit comments

Comments
 (0)