Fix crash on pasting garbage FEN
authorH.G.Muller <hgm@hgm-xboard.(none)>
Wed, 20 Jan 2016 20:30:51 +0000 (21:30 +0100)
committerH.G.Muller <hgm@hgm-xboard.(none)>
Wed, 20 Jan 2016 20:30:51 +0000 (21:30 +0100)
The auto-size patch had made XBoard crash-prone on pasting pure garbage
with Paste Position, because this would set the number of files or ranks
to values <= 0. Which would cause a floating pont exception during
drawing of the board in XBoard.

backend.c

index 174b2a2..d362be5 100644 (file)
--- a/backend.c
+++ b/backend.c
@@ -18148,7 +18148,7 @@ ParseFEN (Board board, int *blackPlaysFirst, char *fen, Boolean autoSize)
                 while (emptycount--)
                         board[i][(j++)+gameInfo.holdingsWidth] = EmptySquare;
                 if (*p == '/') p++;
                 while (emptycount--)
                         board[i][(j++)+gameInfo.holdingsWidth] = EmptySquare;
                 if (*p == '/') p++;
-               else if(autoSize) { // we stumbled unexpectedly into end of board
+               else if(autoSize && i != BOARD_HEIGHT-1) { // we stumbled unexpectedly into end of board
                     for(k=i; k<BOARD_HEIGHT; k++) { // too few ranks; shift towards bottom
                        for(j=0; j<BOARD_WIDTH; j++) board[k-i][j] = board[k][j];
                     }
                     for(k=i; k<BOARD_HEIGHT; k++) { // too few ranks; shift towards bottom
                        for(j=0; j<BOARD_WIDTH; j++) board[k-i][j] = board[k][j];
                     }
@@ -18212,7 +18212,7 @@ ParseFEN (Board board, int *blackPlaysFirst, char *fen, Boolean autoSize)
     }
     while (*p == '/' || *p == ' ') p++;
 
     }
     while (*p == '/' || *p == ' ') p++;
 
-    if(autoSize) appData.NrFiles = w, InitPosition(TRUE);
+    if(autoSize && w != 0) appData.NrFiles = w, InitPosition(TRUE);
 
     /* [HGM] by default clear Crazyhouse holdings, if present */
     if(gameInfo.holdingsWidth) {
 
     /* [HGM] by default clear Crazyhouse holdings, if present */
     if(gameInfo.holdingsWidth) {