Zebediah Figura : ws2_32: Use realloc() in get_{host, proto, serv}ent_buffer().
Alexandre Julliard
julliard at winehq.org
Thu Aug 19 16:00:06 CDT 2021
Module: wine
Branch: master
Commit: 4af902eb4eacc33b9cf89a9093362115d9ebf6ad
URL: https://source.winehq.org/git/wine.git/?a=commit;h=4af902eb4eacc33b9cf89a9093362115d9ebf6ad
Author: Zebediah Figura <zfigura at codeweavers.com>
Date: Wed Aug 18 23:25:49 2021 -0500
ws2_32: Use realloc() in get_{host, proto, serv}ent_buffer().
Signed-off-by: Zebediah Figura <zfigura at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/ws2_32/protocol.c | 46 +++++++++++++++++++++++++++++-----------------
1 file changed, 29 insertions(+), 17 deletions(-)
diff --git a/dlls/ws2_32/protocol.c b/dlls/ws2_32/protocol.c
index 93464232d32..492400b17a7 100644
--- a/dlls/ws2_32/protocol.c
+++ b/dlls/ws2_32/protocol.c
@@ -591,13 +591,18 @@ int WINAPI GetNameInfoW( const SOCKADDR *addr, socklen_t addr_len, WCHAR *host,
static struct hostent *get_hostent_buffer( unsigned int size )
{
struct per_thread_data *data = get_per_thread_data();
- if (data->he_buffer)
+ struct hostent *new_buffer;
+
+ if (data->he_len < size)
{
- if (data->he_len >= size) return data->he_buffer;
- free( data->he_buffer );
+ if (!(new_buffer = realloc( data->he_buffer, size )))
+ {
+ SetLastError( WSAENOBUFS );
+ return NULL;
+ }
+ data->he_buffer = new_buffer;
+ data->he_len = size;
}
- data->he_buffer = malloc( (data->he_len = size) );
- if (!data->he_buffer) SetLastError(WSAENOBUFS);
return data->he_buffer;
}
@@ -1004,15 +1009,18 @@ static char *next_non_space( const char *p, const char *end )
static struct protoent *get_protoent_buffer( unsigned int size )
{
struct per_thread_data *data = get_per_thread_data();
+ struct protoent *new_buffer;
- if (data->pe_buffer)
+ if (data->pe_len < size)
{
- if (data->pe_len >= size) return data->pe_buffer;
- free( data->pe_buffer );
+ if (!(new_buffer = realloc( data->pe_buffer, size )))
+ {
+ SetLastError( WSAENOBUFS );
+ return NULL;
+ }
+ data->pe_buffer = new_buffer;
+ data->pe_len = size;
}
- data->pe_len = size;
- data->pe_buffer = malloc( size );
- if (!data->pe_buffer) SetLastError( WSAENOBUFS );
return data->pe_buffer;
}
@@ -1187,14 +1195,18 @@ struct protoent * WINAPI getprotobynumber( int number )
static struct servent *get_servent_buffer( int size )
{
struct per_thread_data *data = get_per_thread_data();
- if (data->se_buffer)
+ struct servent *new_buffer;
+
+ if (data->se_len < size)
{
- if (data->se_len >= size) return data->se_buffer;
- free( data->se_buffer );
+ if (!(new_buffer = realloc( data->se_buffer, size )))
+ {
+ SetLastError( WSAENOBUFS );
+ return NULL;
+ }
+ data->se_buffer = new_buffer;
+ data->se_len = size;
}
- data->se_len = size;
- data->se_buffer = malloc( size );
- if (!data->se_buffer) SetLastError( WSAENOBUFS );
return data->se_buffer;
}
More information about the wine-cvs
mailing list