mirror of
https://git.proxmox.com/git/libgit2
synced 2025-07-03 21:59:49 +00:00
Fix memory leak in p_getaddrinfo on Amiga
If gethostbyname() fails on platforms with NO_ADDRINFO, the code leaks the struct addrinfo that was allocated. This fixes that (and a number of code formatting issues in that area of code in src/posix.c).
This commit is contained in:
parent
a7ed746093
commit
71d62d3905
29
src/posix.c
29
src/posix.c
@ -13,22 +13,25 @@
|
|||||||
#ifndef GIT_WIN32
|
#ifndef GIT_WIN32
|
||||||
|
|
||||||
#ifdef NO_ADDRINFO
|
#ifdef NO_ADDRINFO
|
||||||
|
|
||||||
int p_getaddrinfo(
|
int p_getaddrinfo(
|
||||||
const char *host,
|
const char *host,
|
||||||
const char *port,
|
const char *port,
|
||||||
struct addrinfo *hints,
|
struct addrinfo *hints,
|
||||||
struct addrinfo **info)
|
struct addrinfo **info)
|
||||||
{
|
{
|
||||||
GIT_UNUSED(hints);
|
|
||||||
|
|
||||||
struct addrinfo *ainfo, *ai;
|
struct addrinfo *ainfo, *ai;
|
||||||
int p = 0;
|
int p = 0;
|
||||||
|
|
||||||
|
GIT_UNUSED(hints);
|
||||||
|
|
||||||
if ((ainfo = malloc(sizeof(struct addrinfo))) == NULL)
|
if ((ainfo = malloc(sizeof(struct addrinfo))) == NULL)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
if ((ainfo->ai_hostent = gethostbyname(host)) == NULL)
|
if ((ainfo->ai_hostent = gethostbyname(host)) == NULL) {
|
||||||
|
free(ainfo);
|
||||||
return -2;
|
return -2;
|
||||||
|
}
|
||||||
|
|
||||||
ainfo->ai_servent = getservbyname(port, 0);
|
ainfo->ai_servent = getservbyname(port, 0);
|
||||||
|
|
||||||
@ -88,27 +91,19 @@ void p_freeaddrinfo(struct addrinfo *info)
|
|||||||
const char *p_gai_strerror(int ret)
|
const char *p_gai_strerror(int ret)
|
||||||
{
|
{
|
||||||
switch(ret) {
|
switch(ret) {
|
||||||
case -1:
|
case -1: return "Out of memory"; break;
|
||||||
return "Out of memory";
|
case -2: return "Address lookup failed"; break;
|
||||||
break;
|
default: return "Unknown error"; break;
|
||||||
|
|
||||||
case -2:
|
|
||||||
return "Address lookup failed";
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
return "Unknown error";
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* NO_ADDRINFO */
|
#endif /* NO_ADDRINFO */
|
||||||
|
|
||||||
int p_open(const char *path, int flags, ...)
|
int p_open(const char *path, int flags, ...)
|
||||||
{
|
{
|
||||||
mode_t mode = 0;
|
mode_t mode = 0;
|
||||||
|
|
||||||
if (flags & O_CREAT)
|
if (flags & O_CREAT) {
|
||||||
{
|
|
||||||
va_list arg_list;
|
va_list arg_list;
|
||||||
|
|
||||||
va_start(arg_list, flags);
|
va_start(arg_list, flags);
|
||||||
@ -159,6 +154,7 @@ int p_rename(const char *from, const char *to)
|
|||||||
int p_read(git_file fd, void *buf, size_t cnt)
|
int p_read(git_file fd, void *buf, size_t cnt)
|
||||||
{
|
{
|
||||||
char *b = buf;
|
char *b = buf;
|
||||||
|
|
||||||
while (cnt) {
|
while (cnt) {
|
||||||
ssize_t r;
|
ssize_t r;
|
||||||
#ifdef GIT_WIN32
|
#ifdef GIT_WIN32
|
||||||
@ -183,6 +179,7 @@ int p_read(git_file fd, void *buf, size_t cnt)
|
|||||||
int p_write(git_file fd, const void *buf, size_t cnt)
|
int p_write(git_file fd, const void *buf, size_t cnt)
|
||||||
{
|
{
|
||||||
const char *b = buf;
|
const char *b = buf;
|
||||||
|
|
||||||
while (cnt) {
|
while (cnt) {
|
||||||
ssize_t r;
|
ssize_t r;
|
||||||
#ifdef GIT_WIN32
|
#ifdef GIT_WIN32
|
||||||
|
Loading…
Reference in New Issue
Block a user