diff --git a/src/xpdev/sockwrap.c b/src/xpdev/sockwrap.c
index 27b4a7e02d7ef12055986158baf5a003f44bc98c..04110cac7e52c3e9569a1a03418e3d5d87f8d891 100644
--- a/src/xpdev/sockwrap.c
+++ b/src/xpdev/sockwrap.c
@@ -260,9 +260,12 @@ int DLLCALL recvfilesocket(int sock, int file, off_t *offset, off_t count)
 		return(-1);
 	}
 
-	if(offset!=NULL)
-		if(lseek(file,*offset,SEEK_SET)<0)
+	if(offset!=NULL) {
+		if(lseek(file,*offset,SEEK_SET)<0) {
+			free(buf);
 			return(-1);
+		}
+	}
 
 	rd=read(sock,buf,(size_t)count);
 	if(rd!=count) {