From: Zhang Zhaolong Date: Sat, 26 Apr 2014 03:53:08 +0000 (+0800) Subject: libwinpr: fix memory leak in case of error. X-Git-Tag: 1.2.0-beta1+android7~54^2~9 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=dcbf5bd0ed643f56beb03a0540e95197ac42f386;p=platform%2Fupstream%2Ffreerdp.git libwinpr: fix memory leak in case of error. --- diff --git a/winpr/libwinpr/pipe/pipe.c b/winpr/libwinpr/pipe/pipe.c index d1c26e5..6e82a0b 100644 --- a/winpr/libwinpr/pipe/pipe.c +++ b/winpr/libwinpr/pipe/pipe.c @@ -145,7 +145,7 @@ HANDLE CreateNamedPipeA(LPCSTR lpName, DWORD dwOpenMode, DWORD dwPipeMode, DWORD if (pNamedPipe->serverfd == -1) { fprintf(stderr, "CreateNamedPipeA: socket error, %s\n", strerror(errno)); - return INVALID_HANDLE_VALUE; + goto err_out; } ZeroMemory(&s, sizeof(struct sockaddr_un)); @@ -157,7 +157,7 @@ HANDLE CreateNamedPipeA(LPCSTR lpName, DWORD dwOpenMode, DWORD dwPipeMode, DWORD if (status != 0) { fprintf(stderr, "CreateNamedPipeA: bind error, %s\n", strerror(errno)); - return INVALID_HANDLE_VALUE; + goto err_out; } status = listen(pNamedPipe->serverfd, 2); @@ -165,7 +165,7 @@ HANDLE CreateNamedPipeA(LPCSTR lpName, DWORD dwOpenMode, DWORD dwPipeMode, DWORD if (status != 0) { fprintf(stderr, "CreateNamedPipeA: listen error, %s\n", strerror(errno)); - return INVALID_HANDLE_VALUE; + goto err_out; } UnixChangeFileMode(pNamedPipe->lpFilePath, 0xFFFF); @@ -181,6 +181,13 @@ HANDLE CreateNamedPipeA(LPCSTR lpName, DWORD dwOpenMode, DWORD dwPipeMode, DWORD } return hNamedPipe; +err_out: + if (pNamedPipe) { + if (pNamedPipe->serverfd != -1) + close(pNamedPipe->serverfd); + free(pNamedPipe); + } + return INVALID_HANDLE_VALUE; } HANDLE CreateNamedPipeW(LPCWSTR lpName, DWORD dwOpenMode, DWORD dwPipeMode, DWORD nMaxInstances,