vcl/source/bitmap/BitmapInterpolateScaleFilter.cxx |   81 +++++++++++----------
 1 file changed, 44 insertions(+), 37 deletions(-)

New commits:
commit 5cfb92d11de73aba88dce809cc0355a8d9c23e95
Author:     Caolán McNamara <caol...@redhat.com>
AuthorDate: Wed Dec 15 20:37:57 2021 +0000
Commit:     Caolán McNamara <caol...@redhat.com>
CommitDate: Thu Dec 16 09:40:34 2021 +0100

    crashtesting: Assertion `nMin <= nMax' failed in MinMax
    
    MinMax(T, tools::Long, tools::Long) [T = int]: Assertion `nMin <= nMax' 
failed.
    
    seen since
    
    commit 374e261ad1ea8b41f5ecdd850c27fdc961c4868b
    Date:   Sun Dec 5 11:55:58 2021 +0100
    
        increase maximum document thumbnail size from 256 to 512
    
    but presumably always lurked previously.
    
    This commit is supposed to change nothing, just rearrange to show that
    the nWidth == 1 branch (and adapted the nHeight == 1 branch too) doesn't
    use the data generated by the asserting block and move that block into
    the nWidth/nHeight != 1 branches
    
    Change-Id: I1d3284ee32c1eff738c34bc252400726dc7632b4
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/126895
    Tested-by: Jenkins
    Reviewed-by: Caolán McNamara <caol...@redhat.com>

diff --git a/vcl/source/bitmap/BitmapInterpolateScaleFilter.cxx 
b/vcl/source/bitmap/BitmapInterpolateScaleFilter.cxx
index 5ff3c23ad1e9..ce32f2512163 100644
--- a/vcl/source/bitmap/BitmapInterpolateScaleFilter.cxx
+++ b/vcl/source/bitmap/BitmapInterpolateScaleFilter.cxx
@@ -47,26 +47,11 @@ BitmapEx BitmapInterpolateScaleFilter::execute(BitmapEx 
const& rBitmapEx) const
 
             if (pWriteAcc)
             {
-                const sal_Int32 nNewWidth1 = nNewWidth - 1;
-                const sal_Int32 nWidth1 = pReadAcc->Width() - 1;
-                const double fRevScaleX = static_cast<double>(nWidth1) / 
nNewWidth1;
-
-                std::unique_ptr<sal_Int32[]> pLutInt(new sal_Int32[nNewWidth]);
-                std::unique_ptr<sal_Int32[]> pLutFrac(new 
sal_Int32[nNewWidth]);
-
-                for (sal_Int32 nX = 0, nTemp = nWidth - 2; nX < nNewWidth; 
nX++)
-                {
-                    double fTemp = nX * fRevScaleX;
-                    pLutInt[nX] = MinMax(static_cast<sal_Int32>(fTemp), 0, 
nTemp);
-                    fTemp -= pLutInt[nX];
-                    pLutFrac[nX] = static_cast<sal_Int32>(fTemp * 1024.);
-                }
-
-                for (sal_Int32 nY = 0; nY < nHeight; nY++)
+                if (1 == nWidth)
                 {
-                    Scanline pScanlineRead = pReadAcc->GetScanline(nY);
-                    if (1 == nWidth)
+                    for (sal_Int32 nY = 0; nY < nHeight; nY++)
                     {
+                        Scanline pScanlineRead = pReadAcc->GetScanline(nY);
                         BitmapColor aCol0;
                         if (pReadAcc->HasPalette())
                         {
@@ -84,8 +69,27 @@ BitmapEx BitmapInterpolateScaleFilter::execute(BitmapEx 
const& rBitmapEx) const
                             pWriteAcc->SetPixelOnData(pScanline, nX, aCol0);
                         }
                     }
-                    else
+                }
+                else
+                {
+                    const sal_Int32 nNewWidth1 = nNewWidth - 1;
+                    const sal_Int32 nWidth1 = pReadAcc->Width() - 1;
+                    const double fRevScaleX = static_cast<double>(nWidth1) / 
nNewWidth1;
+
+                    std::unique_ptr<sal_Int32[]> pLutInt(new 
sal_Int32[nNewWidth]);
+                    std::unique_ptr<sal_Int32[]> pLutFrac(new 
sal_Int32[nNewWidth]);
+
+                    for (sal_Int32 nX = 0, nTemp = nWidth - 2; nX < nNewWidth; 
nX++)
                     {
+                        double fTemp = nX * fRevScaleX;
+                        pLutInt[nX] = MinMax(static_cast<sal_Int32>(fTemp), 0, 
nTemp);
+                        fTemp -= pLutInt[nX];
+                        pLutFrac[nX] = static_cast<sal_Int32>(fTemp * 1024.);
+                    }
+
+                    for (sal_Int32 nY = 0; nY < nHeight; nY++)
+                    {
+                        Scanline pScanlineRead = pReadAcc->GetScanline(nY);
                         Scanline pScanline = pWriteAcc->GetScanline(nY);
                         for (sal_Int32 nX = 0; nX < nNewWidth; nX++)
                         {
@@ -143,29 +147,14 @@ BitmapEx BitmapInterpolateScaleFilter::execute(BitmapEx 
const& rBitmapEx) const
 
                 if (pReadAcc && pWriteAcc)
                 {
-                    const sal_Int32 nNewHeight1 = nNewHeight - 1;
-                    const sal_Int32 nHeight1 = pReadAcc->Height() - 1;
-                    const double fRevScaleY = static_cast<double>(nHeight1) / 
nNewHeight1;
-
-                    std::unique_ptr<sal_Int32[]> pLutInt(new 
sal_Int32[nNewHeight]);
-                    std::unique_ptr<sal_Int32[]> pLutFrac(new 
sal_Int32[nNewHeight]);
-
-                    for (sal_Int32 nY = 0, nTemp = nHeight - 2; nY < 
nNewHeight; nY++)
-                    {
-                        double fTemp = nY * fRevScaleY;
-                        pLutInt[nY] = MinMax(static_cast<sal_Int32>(fTemp), 0, 
nTemp);
-                        fTemp -= pLutInt[nY];
-                        pLutFrac[nY] = static_cast<sal_Int32>(fTemp * 1024.);
-                    }
-
                     // after 1st step, bitmap *is* 24bit format (see above)
                     OSL_ENSURE(!pReadAcc->HasPalette(), "OOps, somehow 
ImplScaleInterpolate "
                                                         "in-between format has 
palette, should not "
                                                         "happen (!)");
 
-                    for (sal_Int32 nX = 0; nX < nNewWidth; nX++)
+                    if (1 == nHeight)
                     {
-                        if (1 == nHeight)
+                        for (sal_Int32 nX = 0; nX < nNewWidth; nX++)
                         {
                             BitmapColor aCol0 = pReadAcc->GetPixel(0, nX);
 
@@ -174,7 +163,25 @@ BitmapEx BitmapInterpolateScaleFilter::execute(BitmapEx 
const& rBitmapEx) const
                                 pWriteAcc->SetPixel(nY, nX, aCol0);
                             }
                         }
-                        else
+                    }
+                    else
+                    {
+                        const sal_Int32 nNewHeight1 = nNewHeight - 1;
+                        const sal_Int32 nHeight1 = pReadAcc->Height() - 1;
+                        const double fRevScaleY = 
static_cast<double>(nHeight1) / nNewHeight1;
+
+                        std::unique_ptr<sal_Int32[]> pLutInt(new 
sal_Int32[nNewHeight]);
+                        std::unique_ptr<sal_Int32[]> pLutFrac(new 
sal_Int32[nNewHeight]);
+
+                        for (sal_Int32 nY = 0, nTemp = nHeight - 2; nY < 
nNewHeight; nY++)
+                        {
+                            double fTemp = nY * fRevScaleY;
+                            pLutInt[nY] = 
MinMax(static_cast<sal_Int32>(fTemp), 0, nTemp);
+                            fTemp -= pLutInt[nY];
+                            pLutFrac[nY] = static_cast<sal_Int32>(fTemp * 
1024.);
+                        }
+
+                        for (sal_Int32 nX = 0; nX < nNewWidth; nX++)
                         {
                             for (sal_Int32 nY = 0; nY < nNewHeight; nY++)
                             {

Reply via email to