[dlls/wininet/urlcache.c] Elimination of strncpy + bug

Peter Berg Larsen pebl at math.ku.dk
Fri Apr 15 17:47:19 CDT 2005


The first 'strncpy(szPath,' is that a bug for 'strncpy(szPath +
path_len,'?

Changelog:
     Strncpy elimination. Missing a '+path_len'.

Index: dlls/wininet/urlcache.c
===================================================================
RCS file: /home/wine/wine/dlls/wininet/urlcache.c,v
retrieving revision 1.28
diff -u -r1.28 urlcache.c
--- dlls/wininet/urlcache.c     24 Mar 2005 21:01:35 -0000      1.28
+++ dlls/wininet/urlcache.c     15 Apr 2005 20:15:11 -0000
@@ -670,22 +670,25 @@
     LPLONG lpBufferSize)
 {
     LONG nRequired;
-    int path_len = WideCharToMultiByte(CP_ACP, 0, pContainer->path, -1, NULL, 0, NULL, NULL);
-    int file_name_len = strlen(szLocalFileName);
-    int dir_len = DIR_LENGTH;
+    int path_len, file_name_len, dir_len;
+
     if (Directory >= pHeader->DirectoryCount)
     {
         *lpBufferSize = 0;
         return FALSE;
     }

-    nRequired = (path_len + dir_len + file_name_len + 1) * sizeof(WCHAR);
+    path_len = WideCharToMultiByte(CP_ACP, 0, pContainer->path, -1, NULL, 0, NULL, NULL);
+    file_name_len = strlen(szLocalFileName);
+    dir_len = DIR_LENGTH;
+
+    nRequired = (path_len + dir_len + 1 + file_name_len) * sizeof(WCHAR);
     if (nRequired < *lpBufferSize)
     {
         WideCharToMultiByte(CP_ACP, 0, pContainer->path, -1, szPath, -1, NULL, NULL);
-        strncpy(szPath, pHeader->directory_data[Directory].filename, DIR_LENGTH);
-        szPath[dir_len + path_len] = '\\';
-        strcpy(szPath + dir_len + path_len + 1, szLocalFileName);
+        memcpy(szPath+path_len, pHeader->directory_data[Directory].filename, dir_len);
+        szPath[path_len + dir_len] = '\\';
+        memcpy(szPath + path_len + dir_len + 1, szLocalFileName, file_name_len);
         *lpBufferSize = nRequired;
         return TRUE;
     }





More information about the wine-patches mailing list