Fix HttpParser/MessageParser for bytes above 7-bit ASCII
This commit is contained in:
+2
-2
@@ -191,7 +191,7 @@ private:
|
|||||||
* which is then removed, and our counters to flip due to overflow and we end up with a crash */
|
* which is then removed, and our counters to flip due to overflow and we end up with a crash */
|
||||||
|
|
||||||
for (unsigned int i = 0; i < HttpRequest::MAX_HEADERS; i++) {
|
for (unsigned int i = 0; i < HttpRequest::MAX_HEADERS; i++) {
|
||||||
for (preliminaryKey = postPaddedBuffer; (*postPaddedBuffer != ':') & (*postPaddedBuffer > 32); *(postPaddedBuffer++) |= 32);
|
for (preliminaryKey = postPaddedBuffer; (*postPaddedBuffer != ':') & (*(unsigned char *)postPaddedBuffer > 32); *(postPaddedBuffer++) |= 32);
|
||||||
if (*postPaddedBuffer == '\r') {
|
if (*postPaddedBuffer == '\r') {
|
||||||
if ((postPaddedBuffer != end) & (postPaddedBuffer[1] == '\n') & (i > 0)) {
|
if ((postPaddedBuffer != end) & (postPaddedBuffer[1] == '\n') & (i > 0)) {
|
||||||
headers->key = std::string_view(nullptr, 0);
|
headers->key = std::string_view(nullptr, 0);
|
||||||
@@ -201,7 +201,7 @@ private:
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
headers->key = std::string_view(preliminaryKey, (size_t) (postPaddedBuffer - preliminaryKey));
|
headers->key = std::string_view(preliminaryKey, (size_t) (postPaddedBuffer - preliminaryKey));
|
||||||
for (postPaddedBuffer++; (*postPaddedBuffer == ':' || *postPaddedBuffer < 33) && *postPaddedBuffer != '\r'; postPaddedBuffer++);
|
for (postPaddedBuffer++; (*postPaddedBuffer == ':' || *(unsigned char *)postPaddedBuffer < 33) && *postPaddedBuffer != '\r'; postPaddedBuffer++);
|
||||||
preliminaryValue = postPaddedBuffer;
|
preliminaryValue = postPaddedBuffer;
|
||||||
postPaddedBuffer = (char *) memchr(postPaddedBuffer, '\r', (size_t) (end - postPaddedBuffer));
|
postPaddedBuffer = (char *) memchr(postPaddedBuffer, '\r', (size_t) (end - postPaddedBuffer));
|
||||||
if (postPaddedBuffer && postPaddedBuffer[1] == '\n') {
|
if (postPaddedBuffer && postPaddedBuffer[1] == '\n') {
|
||||||
|
|||||||
+2
-2
@@ -34,7 +34,7 @@ namespace uWS {
|
|||||||
char *preliminaryKey, *preliminaryValue, *start = postPaddedBuffer;
|
char *preliminaryKey, *preliminaryValue, *start = postPaddedBuffer;
|
||||||
|
|
||||||
for (unsigned int i = 0; i < MAX_HEADERS; i++) {
|
for (unsigned int i = 0; i < MAX_HEADERS; i++) {
|
||||||
for (preliminaryKey = postPaddedBuffer; (*postPaddedBuffer != ':') & (*postPaddedBuffer > 32); *(postPaddedBuffer++) |= 32);
|
for (preliminaryKey = postPaddedBuffer; (*postPaddedBuffer != ':') & (*(unsigned char *)postPaddedBuffer > 32); *(postPaddedBuffer++) |= 32);
|
||||||
if (*postPaddedBuffer == '\r') {
|
if (*postPaddedBuffer == '\r') {
|
||||||
if ((postPaddedBuffer != end) & (postPaddedBuffer[1] == '\n') /* & (i > 0) */) { // multipart does not require any headers like http does
|
if ((postPaddedBuffer != end) & (postPaddedBuffer[1] == '\n') /* & (i > 0) */) { // multipart does not require any headers like http does
|
||||||
headers->first = std::string_view(nullptr, 0);
|
headers->first = std::string_view(nullptr, 0);
|
||||||
@@ -44,7 +44,7 @@ namespace uWS {
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
headers->first = std::string_view(preliminaryKey, (size_t) (postPaddedBuffer - preliminaryKey));
|
headers->first = std::string_view(preliminaryKey, (size_t) (postPaddedBuffer - preliminaryKey));
|
||||||
for (postPaddedBuffer++; (*postPaddedBuffer == ':' || *postPaddedBuffer < 33) && *postPaddedBuffer != '\r'; postPaddedBuffer++);
|
for (postPaddedBuffer++; (*postPaddedBuffer == ':' || *(unsigned char *)postPaddedBuffer < 33) && *postPaddedBuffer != '\r'; postPaddedBuffer++);
|
||||||
preliminaryValue = postPaddedBuffer;
|
preliminaryValue = postPaddedBuffer;
|
||||||
postPaddedBuffer = (char *) memchr(postPaddedBuffer, '\r', end - postPaddedBuffer);
|
postPaddedBuffer = (char *) memchr(postPaddedBuffer, '\r', end - postPaddedBuffer);
|
||||||
if (postPaddedBuffer && postPaddedBuffer[1] == '\n') {
|
if (postPaddedBuffer && postPaddedBuffer[1] == '\n') {
|
||||||
|
|||||||
Reference in New Issue
Block a user