Fix #27359: Pasting long text crashes blender
[blender-staging.git] / intern / ghost / intern / GHOST_SystemWin32.cpp
index ee8ec9e801831c5d30411a92f6d457e99db78560..92066d5f79466ca48f74892ba4a04a8eef4ff879 100644 (file)
@@ -1178,25 +1178,28 @@ GHOST_TUns8* GHOST_SystemWin32::getClipboard(bool selection) const
        char *temp_buff;
        
        if ( IsClipboardFormatAvailable(CF_TEXT) && OpenClipboard(NULL) ) {
+               size_t len = 0;
                HANDLE hData = GetClipboardData( CF_TEXT );
                if (hData == NULL) {
                        CloseClipboard();
                        return NULL;
                }
                buffer = (char*)GlobalLock( hData );
+               if (!buffer) {
+                       return NULL;
+               }
                
-               temp_buff = (char*) malloc(strlen(buffer)+1);
-               strcpy(temp_buff, buffer);
+               len = strlen(buffer);
+               temp_buff = (char*) malloc(len+1);
+               strncpy(temp_buff, buffer, len);
+               temp_buff[len] = '\0';
                
+               /* Buffer mustn't be accessed after CloseClipboard
+                  it would like accessing free-d memory */
                GlobalUnlock( hData );
                CloseClipboard();
                
-               temp_buff[strlen(buffer)] = '\0';
-               if (buffer) {
-                       return (GHOST_TUns8*)temp_buff;
-               } else {
-                       return NULL;
-               }
+               return (GHOST_TUns8*)temp_buff;
        } else {
                return NULL;
        }