fix: header matching issues
This commit is contained in:
+27
-5
@@ -55,7 +55,6 @@ void removeHeader(std::string& headers, const std::string& key)
|
|||||||
|
|
||||||
std::string keyLower = key;
|
std::string keyLower = key;
|
||||||
std::transform(keyLower.begin(), keyLower.end(), keyLower.begin(), ::tolower);
|
std::transform(keyLower.begin(), keyLower.end(), keyLower.begin(), ::tolower);
|
||||||
if (keyLower.back() != ':') keyLower += ':';
|
|
||||||
|
|
||||||
while ((end = headers.find('\n', start)) != std::string::npos)
|
while ((end = headers.find('\n', start)) != std::string::npos)
|
||||||
{
|
{
|
||||||
@@ -63,7 +62,16 @@ void removeHeader(std::string& headers, const std::string& key)
|
|||||||
std::string lineLower = line;
|
std::string lineLower = line;
|
||||||
std::transform(lineLower.begin(), lineLower.end(), lineLower.begin(), ::tolower);
|
std::transform(lineLower.begin(), lineLower.end(), lineLower.begin(), ::tolower);
|
||||||
|
|
||||||
if (lineLower.compare(0, keyLower.length(), keyLower) != 0) result += line;
|
bool match = false;
|
||||||
|
if (lineLower.compare(0, keyLower.length(), keyLower) == 0)
|
||||||
|
{
|
||||||
|
size_t pos = keyLower.length();
|
||||||
|
while (pos < lineLower.length() && (lineLower[pos] == ' ' || lineLower[pos] == '\t'))
|
||||||
|
pos++;
|
||||||
|
if (pos < lineLower.length() && lineLower[pos] == ':') match = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!match) result += line;
|
||||||
|
|
||||||
start = end + 1;
|
start = end + 1;
|
||||||
}
|
}
|
||||||
@@ -72,7 +80,16 @@ void removeHeader(std::string& headers, const std::string& key)
|
|||||||
{
|
{
|
||||||
std::string line = headers.substr(start);
|
std::string line = headers.substr(start);
|
||||||
std::string lineLower = line;
|
std::string lineLower = line;
|
||||||
if (lineLower.compare(0, keyLower.length(), keyLower) != 0) result += line;
|
std::transform(lineLower.begin(), lineLower.end(), lineLower.begin(), ::tolower);
|
||||||
|
bool match = false;
|
||||||
|
if (lineLower.compare(0, keyLower.length(), keyLower) == 0)
|
||||||
|
{
|
||||||
|
size_t pos = keyLower.length();
|
||||||
|
while (pos < lineLower.length() && (lineLower[pos] == ' ' || lineLower[pos] == '\t'))
|
||||||
|
pos++;
|
||||||
|
if (pos < lineLower.length() && lineLower[pos] == ':') match = true;
|
||||||
|
}
|
||||||
|
if (!match) result += line;
|
||||||
}
|
}
|
||||||
|
|
||||||
headers = std::move(result);
|
headers = std::move(result);
|
||||||
@@ -86,7 +103,6 @@ std::string getHeaderValue(const std::string& headers, const std::string& key)
|
|||||||
std::string keyLower = key;
|
std::string keyLower = key;
|
||||||
std::transform(keyLower.begin(), keyLower.end(), keyLower.begin(), ::tolower);
|
std::transform(keyLower.begin(), keyLower.end(), keyLower.begin(), ::tolower);
|
||||||
if (keyLower.empty()) return "";
|
if (keyLower.empty()) return "";
|
||||||
if (keyLower.back() != ':') keyLower += ':';
|
|
||||||
|
|
||||||
while (start < headers.length())
|
while (start < headers.length())
|
||||||
{
|
{
|
||||||
@@ -98,7 +114,12 @@ std::string getHeaderValue(const std::string& headers, const std::string& key)
|
|||||||
|
|
||||||
if (lineLower.compare(0, keyLower.length(), keyLower) == 0)
|
if (lineLower.compare(0, keyLower.length(), keyLower) == 0)
|
||||||
{
|
{
|
||||||
size_t valueStart = keyLower.length();
|
size_t pos = keyLower.length();
|
||||||
|
while (pos < lineLower.length() && (lineLower[pos] == ' ' || lineLower[pos] == '\t'))
|
||||||
|
pos++;
|
||||||
|
if (pos < lineLower.length() && lineLower[pos] == ':')
|
||||||
|
{
|
||||||
|
size_t valueStart = pos + 1;
|
||||||
while (valueStart < line.length() && (line[valueStart] == ' ' || line[valueStart] == '\t'))
|
while (valueStart < line.length() && (line[valueStart] == ' ' || line[valueStart] == '\t'))
|
||||||
valueStart++;
|
valueStart++;
|
||||||
|
|
||||||
@@ -107,6 +128,7 @@ std::string getHeaderValue(const std::string& headers, const std::string& key)
|
|||||||
|
|
||||||
return line.substr(valueStart, valueEnd - valueStart);
|
return line.substr(valueStart, valueEnd - valueStart);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (end == std::string::npos) break;
|
if (end == std::string::npos) break;
|
||||||
start = end + 1;
|
start = end + 1;
|
||||||
|
|||||||
Reference in New Issue
Block a user