Merge pull request #631 from Yang1032/fix-2

fix: fix realloc mistakes to avoid memory leaks
pull/481/merge
YuQing 2023-04-25 07:50:22 +08:00 committed by GitHub
commit 5335a59313
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 41 additions and 21 deletions

View File

@ -226,9 +226,9 @@ int fdht_split_ids(const char *szIds, int **ppIds, int *id_count)
if (alloc_count < *id_count + (count + 1)) if (alloc_count < *id_count + (count + 1))
{ {
alloc_count += count + 1; alloc_count += count + 1;
*ppIds = (int *)realloc(*ppIds, \ int *new_ids = (int *)realloc(*ppIds, \
sizeof(int) * alloc_count); sizeof(int) * alloc_count);
if (*ppIds == NULL) if (new_ids == NULL)
{ {
result = errno != 0 ? errno : ENOMEM; result = errno != 0 ? errno : ENOMEM;
logError("file: "__FILE__", line: %d, "\ logError("file: "__FILE__", line: %d, "\
@ -237,9 +237,11 @@ int fdht_split_ids(const char *szIds, int **ppIds, int *id_count)
__LINE__, \ __LINE__, \
(int)sizeof(int) * alloc_count,\ (int)sizeof(int) * alloc_count,\
result, STRERROR(result)); result, STRERROR(result));
free(*ppIds)
*ppIds = NULL;
break; break;
} }
*ppIds = new_ids;
} }
for (i=nStart; i<=nEnd; i++) for (i=nStart; i<=nEnd; i++)
@ -498,11 +500,11 @@ int fdht_load_groups_ex(IniContext *pIniContext, \
alloc_server_count = \ alloc_server_count = \
pGroupArray->server_count + \ pGroupArray->server_count + \
pGroupArray->group_count + 8; pGroupArray->group_count + 8;
pGroupArray->servers = (FDHTServerInfo*) FDHTServerInfo* new_servers = (FDHTServerInfo*)
realloc(pGroupArray->servers, \ realloc(pGroupArray->servers, \
sizeof(FDHTServerInfo) * \ sizeof(FDHTServerInfo) * \
alloc_server_count); alloc_server_count);
if (pGroupArray->servers == NULL) if (new_servers == NULL)
{ {
logError("file: "__FILE__", " \ logError("file: "__FILE__", " \
"line: %d, malloc " \ "line: %d, malloc " \
@ -513,8 +515,11 @@ int fdht_load_groups_ex(IniContext *pIniContext, \
(int)sizeof(FDHTServerInfo) \ (int)sizeof(FDHTServerInfo) \
* alloc_server_count, \ * alloc_server_count, \
errno, STRERROR(errno)); errno, STRERROR(errno));
free(pGroupArray->servers);
pGroupArray->servers = NULL;
return errno!=0 ? errno:ENOMEM; return errno!=0 ? errno:ENOMEM;
} }
pGroupArray->servers = new_servers;
} }
fdht_insert_sorted_servers( \ fdht_insert_sorted_servers( \
@ -574,10 +579,10 @@ int fdht_load_groups_ex(IniContext *pIniContext, \
if (alloc_server_count > pGroupArray->server_count) if (alloc_server_count > pGroupArray->server_count)
{ {
pGroupArray->servers = (FDHTServerInfo*)realloc( \ FDHTServerInfo* new_servers= (FDHTServerInfo*)realloc( \
pGroupArray->servers, sizeof(FDHTServerInfo) \ pGroupArray->servers, sizeof(FDHTServerInfo) \
* pGroupArray->server_count); * pGroupArray->server_count);
if (pGroupArray->servers == NULL) if (new_servers == NULL)
{ {
logError("file: "__FILE__", line: %d, " \ logError("file: "__FILE__", line: %d, " \
"malloc %d bytes fail, " \ "malloc %d bytes fail, " \
@ -585,8 +590,11 @@ int fdht_load_groups_ex(IniContext *pIniContext, \
__LINE__, (int)sizeof(FDHTServerInfo) * \ __LINE__, (int)sizeof(FDHTServerInfo) * \
pGroupArray->server_count, \ pGroupArray->server_count, \
errno, STRERROR(errno)); errno, STRERROR(errno));
free(pGroupArray->servers);
pGroupArray->servers = NULL;
return errno != 0 ? errno : ENOMEM; return errno != 0 ? errno : ENOMEM;
} }
pGroupArray->servers = new_servers;
} }
memset(&pGroupArray->proxy_server, 0, sizeof(FDHTServerInfo)); memset(&pGroupArray->proxy_server, 0, sizeof(FDHTServerInfo));

View File

@ -3320,17 +3320,20 @@ int storage_sync_thread_start(const FDFSStorageBrief *pStorage)
} }
thread_count = FC_ATOMIC_INC(g_storage_sync_thread_count); thread_count = FC_ATOMIC_INC(g_storage_sync_thread_count);
sync_tids = (pthread_t *)realloc(sync_tids, pthread_t *new_sync_tids = (pthread_t *)realloc(sync_tids,
sizeof(pthread_t) * thread_count); sizeof(pthread_t) * thread_count);
if (sync_tids == NULL) if (new_sync_tids == NULL)
{ {
logError("file: "__FILE__", line: %d, " logError("file: "__FILE__", line: %d, "
"malloc %d bytes fail, errno: %d, error info: %s", "malloc %d bytes fail, errno: %d, error info: %s",
__LINE__, (int)sizeof(pthread_t) * thread_count, __LINE__, (int)sizeof(pthread_t) * thread_count,
errno, STRERROR(errno)); errno, STRERROR(errno));
free(sync_tids);
sync_tids = NULL;
} }
else else
{ {
sync_tids = new_sync_tids;
sync_tids[thread_count - 1] = tid; sync_tids[thread_count - 1] = tid;
} }

View File

@ -655,18 +655,21 @@ static int tracker_load_groups_new(FDFSGroups *pGroups, const char *data_path,
if (nStorageSyncSize <= *nTrunkServerCount) if (nStorageSyncSize <= *nTrunkServerCount)
{ {
nStorageSyncSize += 8; nStorageSyncSize += 8;
*ppTrunkServers = (FDFSStorageSync *)realloc( \ FDFSStorageSync *new_trunk_servers = (FDFSStorageSync *)
*ppTrunkServers, \ realloc(*ppTrunkServers, \
sizeof(FDFSStorageSync) * nStorageSyncSize); sizeof(FDFSStorageSync) * nStorageSyncSize);
if (*ppTrunkServers == NULL) if (new_trunk_servers == NULL)
{ {
result = errno != 0 ? errno : ENOMEM; result = errno != 0 ? errno : ENOMEM;
logError("file: "__FILE__", line: %d, " \ logError("file: "__FILE__", line: %d, " \
"realloc %d bytes fail", __LINE__, \ "realloc %d bytes fail", __LINE__, \
(int)sizeof(FDFSStorageSync) * \ (int)sizeof(FDFSStorageSync) * \
nStorageSyncSize); nStorageSyncSize);
free(*ppTrunkServers);
*ppTrunkServers = NULL;
break; break;
} }
*ppTrunkServers = new_trunk_servers;
} }
strcpy((*ppTrunkServers)[*nTrunkServerCount].group_name, \ strcpy((*ppTrunkServers)[*nTrunkServerCount].group_name, \
@ -991,18 +994,21 @@ static int tracker_load_storages_old(FDFSGroups *pGroups, const char *data_path)
if (nStorageSyncSize <= nStorageSyncCount) if (nStorageSyncSize <= nStorageSyncCount)
{ {
nStorageSyncSize += 8; nStorageSyncSize += 8;
pStorageSyncs = (FDFSStorageSync *)realloc( \ FDFSStorageSync *pNewStorageSyncs = (FDFSStorageSync *)
pStorageSyncs, \ realloc(pStorageSyncs, \
sizeof(FDFSStorageSync) * nStorageSyncSize); sizeof(FDFSStorageSync) * nStorageSyncSize);
if (pStorageSyncs == NULL) if (pNewStorageSyncs == NULL)
{ {
result = errno != 0 ? errno : ENOMEM; result = errno != 0 ? errno : ENOMEM;
logError("file: "__FILE__", line: %d, " \ logError("file: "__FILE__", line: %d, " \
"realloc %d bytes fail", __LINE__, \ "realloc %d bytes fail", __LINE__, \
(int)sizeof(FDFSStorageSync) * \ (int)sizeof(FDFSStorageSync) * \
nStorageSyncSize); nStorageSyncSize);
free(pStorageSyncs);
pStorageSyncs = NULL;
break; break;
} }
pStorageSyncs = pNewStorageSyncs;
} }
strcpy(pStorageSyncs[nStorageSyncCount].group_name, \ strcpy(pStorageSyncs[nStorageSyncCount].group_name, \
@ -1274,18 +1280,21 @@ static int tracker_load_storages_new(FDFSGroups *pGroups, const char *data_path)
{ {
nStorageSyncSize *= 2; nStorageSyncSize *= 2;
} }
pStorageSyncs = (FDFSStorageSync *)realloc( \ FDFSStorageSync *pNewStorageSyncs = (FDFSStorageSync *)
pStorageSyncs, \ realloc(pStorageSyncs, \
sizeof(FDFSStorageSync) * nStorageSyncSize); sizeof(FDFSStorageSync) * nStorageSyncSize);
if (pStorageSyncs == NULL) if (pNewStorageSyncs == NULL)
{ {
result = errno != 0 ? errno : ENOMEM; result = errno != 0 ? errno : ENOMEM;
logError("file: "__FILE__", line: %d, " \ logError("file: "__FILE__", line: %d, " \
"realloc %d bytes fail", __LINE__, \ "realloc %d bytes fail", __LINE__, \
(int)sizeof(FDFSStorageSync) * \ (int)sizeof(FDFSStorageSync) * \
nStorageSyncSize); nStorageSyncSize);
free(pStorageSyncs);
pStorageSyncs = NULL;
break; break;
} }
pStorageSyncs = pNewStorageSyncs;
} }
strcpy(pStorageSyncs[nStorageSyncCount].group_name, \ strcpy(pStorageSyncs[nStorageSyncCount].group_name, \