[BRLTTY] PATCH: Fix a file descriptor leak.
Samuel Thibault
samuel.thibault at ens-lyon.org
Fri Feb 22 11:41:05 EST 2013
Luke Yelavich, le Fri 22 Feb 2013 16:09:46 +0000, a écrit :
> brlapi_errfun="connect";
> setSocketErrno();
> + closeSocketDescriptor(handle->fileDescriptor);
> goto outlibc;
Mmm, the outlibc label is supposed to be doing it already, but not in
this particular codepath indeed.
Could you try the attached patch instead?
Samuel
-------------- next part --------------
Index: Programs/brlapi_client.c
===================================================================
--- Programs/brlapi_client.c (révision 6863)
+++ Programs/brlapi_client.c (copie de travail)
@@ -441,7 +441,7 @@
char path[lpath+lport+1];
memcpy(path,BRLAPI_SOCKETPATH,lpath);
memcpy(path+lpath,port,lport+1);
- while ((handle->fileDescriptor = CreateFile(path,GENERIC_READ|GENERIC_WRITE,
+ while ((sockfd = CreateFile(path,GENERIC_READ|GENERIC_WRITE,
FILE_SHARE_READ|FILE_SHARE_WRITE,NULL,OPEN_EXISTING,SECURITY_IMPERSONATION,NULL))
== INVALID_HANDLE_VALUE) {
if (GetLastError() != ERROR_PIPE_BUSY) {
@@ -460,7 +460,7 @@
brlapi_errno = BRLAPI_ERROR_LIBCERR;
goto out;
}
- if ((handle->fileDescriptor = socket(PF_LOCAL, SOCK_STREAM, 0))<0) {
+ if ((sockfd = socket(PF_LOCAL, SOCK_STREAM, 0))<0) {
brlapi_errfun="socket";
setSocketErrno();
goto outlibc;
@@ -468,13 +468,14 @@
sa.sun_family = AF_LOCAL;
memcpy(sa.sun_path,BRLAPI_SOCKETPATH "/",lpath+1);
memcpy(sa.sun_path+lpath+1,port,lport+1);
- if (connect(handle->fileDescriptor, (struct sockaddr *) &sa, sizeof(sa))<0) {
+ if (connect(sockfd, (struct sockaddr *) &sa, sizeof(sa))<0) {
brlapi_errfun="connect";
setSocketErrno();
goto outlibc;
}
}
#endif /* __MINGW32__ */
+ handle->fileDescriptor = (FileDescriptor) sockfd;
} else {
#else /* PF_LOCAL */
if (0) {} else {
More information about the BRLTTY
mailing list