[PATCH] msvcrt: read_utf8: free readbuf on return (Coverity)

Marcus Meissner marcus at jet.franken.de
Sun Jan 20 06:17:09 CST 2013


CID 968559

(not all return paths need this free, the whole if (count < 4)
uses the mini_buf)

Ciao, Marcus
---
 dlls/msvcrt/file.c |    5 +++++
 1 file changed, 5 insertions(+)

diff --git a/dlls/msvcrt/file.c b/dlls/msvcrt/file.c
index 0df6a86..8a63b51 100644
--- a/dlls/msvcrt/file.c
+++ b/dlls/msvcrt/file.c
@@ -2226,13 +2226,16 @@ static int read_utf8(int fd, MSVCRT_wchar_t *buf, unsigned int count)
             num_read = 0;
         }else if(GetLastError() == ERROR_BROKEN_PIPE) {
             fdinfo->wxflag |= WX_ATEOF;
+            if (readbuf != min_buf) MSVCRT_free(readbuf);
             return 0;
         }else {
             msvcrt_set_errno(GetLastError());
+            if (readbuf != min_buf) MSVCRT_free(readbuf);
             return -1;
         }
     }else if(!pos && !num_read) {
         fdinfo->wxflag |= WX_ATEOF;
+        if (readbuf != min_buf) MSVCRT_free(readbuf);
         return 0;
     }
 
@@ -2291,9 +2294,11 @@ static int read_utf8(int fd, MSVCRT_wchar_t *buf, unsigned int count)
 
     if(!(num_read = MultiByteToWideChar(CP_UTF8, 0, readbuf, pos, buf, count))) {
         msvcrt_set_errno(GetLastError());
+        if (readbuf != min_buf) MSVCRT_free(readbuf);
         return -1;
     }
 
+    if (readbuf != min_buf) MSVCRT_free(readbuf);
     return num_read*2;
 }
 
-- 
1.7.10.4




More information about the wine-patches mailing list