Merge pull request #7784 from taosdata/fix/TD-6217
[TD-6217]<fix>: fixed memory leak that caused by invalid http requests
This commit is contained in:
commit
3cb3a58087
|
@ -147,6 +147,7 @@ typedef struct HttpContext {
|
||||||
int32_t state;
|
int32_t state;
|
||||||
uint8_t reqType;
|
uint8_t reqType;
|
||||||
uint8_t parsed;
|
uint8_t parsed;
|
||||||
|
uint8_t error;
|
||||||
char ipstr[22];
|
char ipstr[22];
|
||||||
char user[TSDB_USER_LEN]; // parsed from auth token or login message
|
char user[TSDB_USER_LEN]; // parsed from auth token or login message
|
||||||
char pass[HTTP_PASSWORD_LEN];
|
char pass[HTTP_PASSWORD_LEN];
|
||||||
|
|
|
@ -188,11 +188,12 @@ void httpCloseContextByApp(HttpContext *pContext) {
|
||||||
pContext->parsed = false;
|
pContext->parsed = false;
|
||||||
bool keepAlive = true;
|
bool keepAlive = true;
|
||||||
|
|
||||||
if (parser && parser->httpVersion == HTTP_VERSION_10 && parser->keepAlive != HTTP_KEEPALIVE_ENABLE) {
|
if (pContext->error == true) {
|
||||||
|
keepAlive = false;
|
||||||
|
} else if (parser && parser->httpVersion == HTTP_VERSION_10 && parser->keepAlive != HTTP_KEEPALIVE_ENABLE) {
|
||||||
keepAlive = false;
|
keepAlive = false;
|
||||||
} else if (parser && parser->httpVersion != HTTP_VERSION_10 && parser->keepAlive == HTTP_KEEPALIVE_DISABLE) {
|
} else if (parser && parser->httpVersion != HTTP_VERSION_10 && parser->keepAlive == HTTP_KEEPALIVE_DISABLE) {
|
||||||
keepAlive = false;
|
keepAlive = false;
|
||||||
} else {
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (keepAlive) {
|
if (keepAlive) {
|
||||||
|
|
|
@ -663,7 +663,7 @@ static int32_t httpParserOnTarget(HttpParser *parser, HTTP_PARSER_STATE state, c
|
||||||
HttpContext *pContext = parser->pContext;
|
HttpContext *pContext = parser->pContext;
|
||||||
int32_t ok = 0;
|
int32_t ok = 0;
|
||||||
do {
|
do {
|
||||||
if (!isspace(c) && c != '\r' && c != '\n') {
|
if (!isspace(c)) {
|
||||||
if (httpAppendString(&parser->str, &c, 1)) {
|
if (httpAppendString(&parser->str, &c, 1)) {
|
||||||
httpError("context:%p, fd:%d, parser state:%d, char:[%c]%02x, oom", pContext, pContext->fd, state, c, c);
|
httpError("context:%p, fd:%d, parser state:%d, char:[%c]%02x, oom", pContext, pContext->fd, state, c, c);
|
||||||
ok = -1;
|
ok = -1;
|
||||||
|
@ -1157,6 +1157,10 @@ static int32_t httpParseChar(HttpParser *parser, const char c, int32_t *again) {
|
||||||
httpOnError(parser, HTTP_CODE_INTERNAL_SERVER_ERROR, TSDB_CODE_HTTP_PARSE_ERROR_STATE);
|
httpOnError(parser, HTTP_CODE_INTERNAL_SERVER_ERROR, TSDB_CODE_HTTP_PARSE_ERROR_STATE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (ok != 0) {
|
||||||
|
pContext->error = true;
|
||||||
|
}
|
||||||
|
|
||||||
return ok;
|
return ok;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue