1
0
mirror of https://github.com/esp8266/Arduino.git synced 2025-07-30 16:24:09 +03:00

Fix URL parameter decoding in web server (#3313)

* Make HTTP server test data easier to examine

* Add HTTP server parameter tests containing & and =

* Fix URL parameter decoding in web server

The parameters string needs to be first split on & and =, and URL
decoding on parts done after that. Otherwise URL encoded & and = within
parameter names and values cause incorrect splitting.
This commit is contained in:
Ville Skyttä
2017-12-30 19:24:37 +02:00
committed by Develo
parent 4ab89d07fc
commit b4653f4d44
3 changed files with 19 additions and 23 deletions

View File

@ -36,8 +36,8 @@ TEST_CASE("HTTP GET Parameters", "[HTTPServer]")
siteData = "";
for (uint8_t i=0; i<server.args(); i++){
if(i > 0)
siteData += "&";
siteData += server.argName(i) + "=" + server.arg(i);
siteData += "\n";
siteData += server.argName(i) + " = " + server.arg(i);
}
siteHits++;
server.send(200, "text/plain", siteData);
@ -45,7 +45,7 @@ TEST_CASE("HTTP GET Parameters", "[HTTPServer]")
uint32_t startTime = millis();
while(siteHits == 0 && (millis() - startTime) < 10000)
server.handleClient();
REQUIRE(siteHits > 0 && siteData.equals("var1=val with spaces&var+=some%"));
REQUIRE(siteHits > 0 && siteData.equals("var1 = val with spaces\nva=r+ = so&me%"));
}
}
@ -57,8 +57,8 @@ TEST_CASE("HTTP POST Parameters", "[HTTPServer]")
siteData = "";
for (uint8_t i=0; i<server.args(); i++){
if(i > 0)
siteData += "&";
siteData += server.argName(i) + "=" + server.arg(i);
siteData += "\n";
siteData += server.argName(i) + " = " + server.arg(i);
}
siteHits++;
server.send(200, "text/plain", siteData);
@ -66,7 +66,7 @@ TEST_CASE("HTTP POST Parameters", "[HTTPServer]")
uint32_t startTime = millis();
while(siteHits == 0 && (millis() - startTime) < 10000)
server.handleClient();
REQUIRE(siteHits > 0 && siteData.equals("var2=val with spaces"));
REQUIRE(siteHits > 0 && siteData.equals("var2 = val with spaces"));
}
}
@ -78,8 +78,8 @@ TEST_CASE("HTTP GET+POST Parameters", "[HTTPServer]")
siteData = "";
for (uint8_t i=0; i<server.args(); i++){
if(i > 0)
siteData += "&";
siteData += server.argName(i) + "=" + server.arg(i);
siteData += "\n";
siteData += server.argName(i) + " = " + server.arg(i);
}
siteHits++;
server.send(200, "text/plain", siteData);
@ -87,7 +87,7 @@ TEST_CASE("HTTP GET+POST Parameters", "[HTTPServer]")
uint32_t startTime = millis();
while(siteHits == 0 && (millis() - startTime) < 10000)
server.handleClient();
REQUIRE(siteHits > 0 && siteData.equals("var3=val with spaces&var+=some%"));
REQUIRE(siteHits > 0 && siteData.equals("var3 = val with spaces\nva&r+ = so=me%"));
}
}
@ -98,8 +98,8 @@ TEST_CASE("HTTP Upload", "[HTTPServer]")
server.on("/upload", HTTP_POST, [](){
for (uint8_t i=0; i<server.args(); i++){
if(i > 0)
siteData += "&";
siteData += server.argName(i) + "=" + server.arg(i);
siteData += "\n";
siteData += server.argName(i) + " = " + server.arg(i);
}
siteHits++;
server.send(200, "text/plain", siteData);
@ -110,13 +110,13 @@ TEST_CASE("HTTP Upload", "[HTTPServer]")
} else if(upload.status == UPLOAD_FILE_END){
siteData.concat(":");
siteData.concat(String(upload.totalSize));
siteData.concat("&");
siteData.concat("\n");
}
});
uint32_t startTime = millis();
while(siteHits == 0 && (millis() - startTime) < 10000)
server.handleClient();
REQUIRE(siteHits > 0 && siteData.equals("test.txt:16&var4=val with spaces"));
REQUIRE(siteHits > 0 && siteData.equals("test.txt:16\nvar4 = val with spaces"));
}
}