version 1.3, 2015/04/20 18:19:52
|
version 1.4, 2015/09/25 20:24:20
|
|
|
#include <base/buf.h> | #include <base/buf.h> |
#include <base/log.h> | #include <base/log.h> |
#include <base/result.h> | #include <base/result.h> |
|
#include <pal/intsafe.h> |
#include <pal/strings.h> | #include <pal/strings.h> |
#include <pal/format.h> | #include <pal/format.h> |
#include <pal/sleep.h> | #include <pal/sleep.h> |
|
|
contentSize = 0; | contentSize = 0; |
} | } |
| |
|
size_t allocSize = 0; |
|
if (SizeTAdd(sizeof(Page), contentSize, &allocSize) == S_OK && |
|
SizeTAdd(allocSize, 1, &allocSize) == S_OK) |
|
{ |
/* Allocate zero-terminated buffer */ | /* Allocate zero-terminated buffer */ |
handler->recvPage = (Page*)PAL_Malloc(sizeof (Page) + (size_t)contentSize + 1); |
handler->recvPage = (Page*)PAL_Malloc(allocSize); |
|
} |
|
else |
|
{ |
|
// Overflow |
|
return PRT_RETURN_FALSE; |
|
} |
| |
if (handler->recvPage == NULL) | if (handler->recvPage == NULL) |
{ | { |
|
|
return PRT_CONTINUE; | return PRT_CONTINUE; |
} | } |
| |
|
size_t allocSize = 0; |
|
if (SizeTAdd(sizeof(Page), (size_t)chunkSize, &allocSize) == S_OK && |
|
SizeTAdd(allocSize, 2 /*CR-LF*/ + 1 /* \0 */, &allocSize) == S_OK) |
|
{ |
/* Allocate zero-terminated buffer */ | /* Allocate zero-terminated buffer */ |
handler->recvPage = (Page*)PAL_Malloc(sizeof(Page) + (size_t)chunkSize + 2 /*CR-LF*/ + 1 /* \0 */); |
handler->recvPage = (Page*)PAL_Malloc(allocSize); |
|
} |
|
else |
|
{ |
|
// Overflow |
|
return PRT_RETURN_FALSE; |
|
} |
| |
if (!handler->recvPage) | if (!handler->recvPage) |
return PRT_RETURN_FALSE; | return PRT_RETURN_FALSE; |
|
|
/* calculate approximate page size */ | /* calculate approximate page size */ |
if (!verb) | if (!verb) |
verb = "POST"; | verb = "POST"; |
|
|
pageSize += sizeof(HTTP_HEADER_FORMAT) + 10; /* format + 10 digits of content length */ | pageSize += sizeof(HTTP_HEADER_FORMAT) + 10; /* format + 10 digits of content length */ |
pageSize += Strlen(verb); |
|
pageSize += Strlen(uri); |
|
| |
if (headers) |
if (SizeTAdd(pageSize, Strlen(verb), &pageSize) != S_OK || |
pageSize += _GetHeadersSize(headers); |
SizeTAdd(pageSize, Strlen(uri), &pageSize) != S_OK || |
|
SizeTAdd(pageSize, sizeof(Page), &pageSize) != S_OK || |
|
(headers && SizeTAdd(pageSize, _GetHeadersSize(headers), &pageSize)) != S_OK) |
|
{ |
|
// Overflow |
|
return 0; |
|
} |
| |
page = (Page*)PAL_Malloc(pageSize + sizeof(Page)); |
page = (Page*)PAL_Malloc(pageSize); |
| |
if (!page) | if (!page) |
return 0; | return 0; |