diff --git a/src/Mayaqua/Memory.c b/src/Mayaqua/Memory.c index 3bdc8ada..2658e83c 100644 --- a/src/Mayaqua/Memory.c +++ b/src/Mayaqua/Memory.c @@ -3777,6 +3777,13 @@ void Free(void *addr) InternalFree(tag); } +// Free and set pointer's value to NULL +void FreeSafe(void **addr) +{ + Free(*addr); + *addr = NULL; +} + // Check the memtag void CheckMemTag(MEMTAG *tag) { diff --git a/src/Mayaqua/Memory.h b/src/Mayaqua/Memory.h index ba2f1912..894a0e51 100644 --- a/src/Mayaqua/Memory.h +++ b/src/Mayaqua/Memory.h @@ -276,6 +276,7 @@ void *ZeroMalloc(UINT size); void *ZeroMallocEx(UINT size, bool zero_clear_when_free); void *ReAlloc(void *addr, UINT size); void Free(void *addr); +void FreeSafe(void **addr); void CheckMemTag(MEMTAG *tag); UINT GetMemSize(void *addr); diff --git a/src/Mayaqua/Network.c b/src/Mayaqua/Network.c index 2f4bf0ce..4be28ec3 100644 --- a/src/Mayaqua/Network.c +++ b/src/Mayaqua/Network.c @@ -20563,13 +20563,15 @@ HTTP_HEADER *RecvHttpHeader(SOCK *s) // Split into tokens token = ParseToken(str, " "); + + FreeSafe((void **)&str); + if (token->NumTokens < 3) { - goto LABEL_ERROR; + FreeToken(token); + return NULL; } - Free(str); - // Creating a header object header = NewHttpHeader(token->Token[0], token->Token[1], token->Token[2]); FreeToken(token); @@ -20588,27 +20590,21 @@ HTTP_HEADER *RecvHttpHeader(SOCK *s) if (IsEmptyStr(str)) { // End of header - Free(str); + FreeSafe((void **)&str); break; } if (AddHttpValueStr(header, str) == false) { - goto LABEL_ERROR; + FreeSafe((void **)&str); + FreeHttpHeader(header); + break; } - Free(str); + FreeSafe((void **)&str); } return header; - -LABEL_ERROR: - // Memory release - Free(str); - FreeToken(token); - FreeHttpHeader(header); - - return NULL; } // Receive a line