Fix size limit on 'save as diagram'
authorH.G. Muller <h.g.muller@hccnet.nl>
Sat, 16 Apr 2011 08:25:53 +0000 (10:25 +0200)
committerH.G. Muller <h.g.muller@hccnet.nl>
Sat, 16 Apr 2011 08:25:53 +0000 (10:25 +0200)
In stead of a fixed-size buffer the diagram-save code now uses an
allocated buffer with size calculated from the bitmap parameters to
retreive the bitmap data, so it should work for all sizes.

winboard/winboard.c

index 07e4bd2..50d82dd 100644 (file)
@@ -3842,11 +3842,11 @@ HDCDrawPosition(HDC hdc, BOOLEAN repaint, Board board)
         boardRect.bottom - boardRect.top,\r
         tmphdc, boardRect.left, boardRect.top, SRCCOPY);\r
   if(saveDiagFlag) { \r
-    BITMAP b; int i, j=0, m, w, wb, fac=0; char pData[1000000]\r
+    BITMAP b; int i, j=0, m, w, wb, fac=0; char *pData\r
     BITMAPINFOHEADER bih; int color[16], nrColors=0;\r
 \r
     GetObject(bufferBitmap, sizeof(b), &b);\r
-    if(b.bmWidthBytes*b.bmHeight <= 990000) {\r
+    if(pData = malloc(b.bmWidthBytes*b.bmHeight + 10000)) {\r
        bih.biSize = sizeof(BITMAPINFOHEADER);\r
        bih.biWidth = b.bmWidth;\r
        bih.biHeight = b.bmHeight;\r
@@ -3910,6 +3910,7 @@ HDCDrawPosition(HDC hdc, BOOLEAN repaint, Board board)
        // write bitmap data\r
        for(i=0; i<wb*(b.bmHeight - boardRect.top + OUTER_MARGIN); i++) \r
                fputc(pData[i], diagFile);\r
+       free(pData);\r
      }\r
   }\r
 \r
@@ -3946,11 +3947,8 @@ SaveDiagram(f)
 {\r
     saveDiagFlag = 1; diagFile = f;\r
     HDCDrawPosition(NULL, TRUE, NULL);\r
-\r
     saveDiagFlag = 0;\r
 \r
-//    if(f != NULL) fprintf(f, "Sorry, but this feature is still in preparation\n");\r
-    \r
     fclose(f);\r
     return TRUE;\r
 }\r