Ticket #2199: gdal_svn_trunk_fix2199.patch

File gdal_svn_trunk_fix2199.patch, 3.8 kB (added by rouault, 3 months ago)
  • gcore/rasterio.cpp

    old new  
    107107            if( eDataType == eBufType ) 
    108108            { 
    109109                if( eRWFlag == GF_Read ) 
    110                     memcpy( ((GByte *) pData) + iBufYOff * nLineSpace, 
     110                    memcpy( ((GByte *) pData) + (size_t)iBufYOff * nLineSpace, 
    111111                            pabySrcBlock + nSrcByteOffset,  
    112112                            nLineSpace ); 
    113113                else 
    114114                    memcpy( pabySrcBlock + nSrcByteOffset,  
    115                             ((GByte *) pData) + iBufYOff * nLineSpace, 
     115                            ((GByte *) pData) + (size_t)iBufYOff * nLineSpace, 
    116116                            nLineSpace ); 
    117117            } 
    118118            else 
     
    122122                if( eRWFlag == GF_Read ) 
    123123                    GDALCopyWords( pabySrcBlock + nSrcByteOffset, 
    124124                                   eDataType, nBandDataSize, 
    125                                    ((GByte *) pData) + iBufYOff * nLineSpace, 
     125                                   ((GByte *) pData) + (size_t)iBufYOff * nLineSpace, 
    126126                                   eBufType, nPixelSpace, nBufXSize ); 
    127127                else 
    128                     GDALCopyWords( ((GByte *) pData) + iBufYOff * nLineSpace, 
     128                    GDALCopyWords( ((GByte *) pData) + (size_t)iBufYOff * nLineSpace, 
    129129                                   eBufType, nPixelSpace, 
    130130                                   pabySrcBlock + nSrcByteOffset, 
    131131                                   eDataType, nBandDataSize, nBufXSize ); 
     
    176176 
    177177        for( iBufYOff = 0, iSrcY = nYOff; iBufYOff < nBufYSize; iBufYOff++, iSrcY++ ) 
    178178        { 
    179             int     iBufOffset, iSrcOffset, nXSpan; 
    180              
    181             iBufOffset = iBufYOff * nLineSpace; 
     179            size_t  iBufOffset, iSrcOffset; 
     180            int     nXSpan; 
     181 
     182            iBufOffset = (size_t)iBufYOff * nLineSpace; 
    182183            nLBlockY = iSrcY / nBlockYSize; 
    183184            nLBlockX = nLBlockXStart; 
    184185            iSrcX = nXOff; 
     
    229230/* -------------------------------------------------------------------- */ 
    230231/*      Copy over this chunk of data.                                   */ 
    231232/* -------------------------------------------------------------------- */ 
    232                 iSrcOffset = (iSrcX - nLBlockX*nBlockXSize 
    233                     + (iSrcY - nLBlockY*nBlockYSize) * nBlockXSize)*nBandDataSize; 
     233                iSrcOffset = ((size_t)iSrcX - (size_t)nLBlockX*nBlockXSize 
     234                    + ((size_t)iSrcY - (size_t)nLBlockY*nBlockYSize) * nBlockXSize)*nBandDataSize; 
    234235 
    235236                if( eDataType == eBufType  
    236237                    && nPixelSpace == nBufDataSize ) 
     
    293294 
    294295    for( iBufYOff = 0; iBufYOff < nBufYSize; iBufYOff++ ) 
    295296    { 
    296         int     iBufOffset, iSrcOffset; 
     297        size_t   iBufOffset, iSrcOffset; 
    297298         
    298299        dfSrcY = (iBufYOff+0.5) * dfSrcYInc + nYOff; 
    299300        iSrcY = (int) dfSrcY; 
    300301 
    301         iBufOffset = iBufYOff * nLineSpace; 
     302        iBufOffset = (size_t)iBufYOff * nLineSpace; 
    302303         
    303304        for( iBufXOff = 0; iBufXOff < nBufXSize; iBufXOff++ ) 
    304305        { 
     
    348349/* -------------------------------------------------------------------- */ 
    349350/*      Copy over this pixel of data.                                   */ 
    350351/* -------------------------------------------------------------------- */ 
    351             iSrcOffset = (iSrcX - nLBlockX*nBlockXSize 
    352                 + (iSrcY - nLBlockY*nBlockYSize) * nBlockXSize)*nBandDataSize; 
     352            iSrcOffset = ((size_t)iSrcX - (size_t)nLBlockX*nBlockXSize 
     353                + ((size_t)iSrcY - (size_t)nLBlockY*nBlockYSize) * nBlockXSize)*nBandDataSize; 
    353354 
    354355            if( eDataType == eBufType ) 
    355356            {