X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Flibgame%2Fhttp.c;h=a179620e141b64c913df7f4151f1280bed3ae279;hb=65443b1c5b18c744d5d825759307ffee0f462b1b;hp=30f4c03a572aa7be5e4d043b31df6c4b4f592690;hpb=16927bd0f519a3cf09ff4bb3117a734404090c13;p=rocksndiamonds.git diff --git a/src/libgame/http.c b/src/libgame/http.c index 30f4c03a..a179620e 100644 --- a/src/libgame/http.c +++ b/src/libgame/http.c @@ -37,7 +37,9 @@ void ConvertHttpRequestBodyToServerEncoding(struct HttpRequest *request) { char *body_utf8 = getUTF8FromLatin1(request->body); - strcpy(request->body, body_utf8); + strncpy(request->body, body_utf8, MAX_HTTP_BODY_SIZE); + request->body[MAX_HTTP_BODY_SIZE] = '\0'; + checked_free(body_utf8); } @@ -45,10 +47,12 @@ void ConvertHttpResponseBodyToClientEncoding(struct HttpResponse *response) { char *body_latin1 = getLatin1FromUTF8(response->body); - strcpy(response->body, body_latin1); - checked_free(body_latin1); + strncpy(response->body, body_latin1, MAX_HTTP_BODY_SIZE); + response->body[MAX_HTTP_BODY_SIZE] = '\0'; response->body_size = strlen(response->body); + + checked_free(body_latin1); } static void SetHttpResponseToDefaults(struct HttpResponse *response) @@ -61,6 +65,22 @@ static void SetHttpResponseToDefaults(struct HttpResponse *response) response->status_text[0] = '\0'; } +struct HttpResponse *GetHttpResponseFromBuffer(void *buffer, int size) +{ + if (size > MAX_HTTP_BODY_SIZE) + return NULL; + + struct HttpResponse *response = checked_calloc(sizeof(struct HttpResponse)); + + SetHttpResponseToDefaults(response); + + strncpy(response->body, buffer, MAX_HTTP_BODY_SIZE); + response->body[MAX_HTTP_BODY_SIZE] = '\0'; + response->body_size = MIN(size, MAX_HTTP_BODY_SIZE); + + return response; +} + static boolean SetHTTPResponseCode(struct HttpResponse *response, char *buffer) { char *prefix = "HTTP/1.1 "; @@ -290,5 +310,7 @@ boolean DoHttpRequest(struct HttpRequest *request, checked_free(send_buffer); checked_free(recv_buffer); + runtime.use_api_server = success; + return success; }