extragear/graphics/digikam/libs/dimg

classic Classic list List threaded Threaded
2 messages Options
Reply | Threaded
Open this post in threaded view
|

extragear/graphics/digikam/libs/dimg

Marcel Wiesweg
SVN commit 501049 by mwiesweg:

digikam from trunk: Dimg fixes

- fix memory leak: added missing deref() in DImg::copy()
  The object that is copied would leak its memory
- fix crash in jpegloader

CCMAIL:[hidden email]



 M  +2 -0      dimg.cpp  
 M  +1 -1      dimgloader.cpp  
 M  +6 -6      loaders/jpegloader.cpp  


--- trunk/extragear/graphics/digikam/libs/dimg/dimg.cpp #501048:501049
@@ -780,6 +780,8 @@
         m_priv->data = new uchar[size];
         memcpy(m_priv->data, old->data, size);
     }
+
+    old->deref();
 }
 
 void DImg::crop(QRect rect)
--- trunk/extragear/graphics/digikam/libs/dimg/dimgloader.cpp #501048:501049
@@ -40,7 +40,7 @@
     // Progress slice is the part of 100% concerned with the current granularity
     // (E.g. in a loop only the values from 10% to 90% are used, then progressSlice is 0.8)
     // Current default is 1/20, that is progress info every 5%
-    int granularity = (total / (20 * progressSlice)) / observer->granularity();
+    int granularity = (int)(( total / (20 * progressSlice)) / observer->granularity());
     return granularity ? granularity : 1;
 }
 
--- trunk/extragear/graphics/digikam/libs/dimg/loaders/jpegloader.cpp #501048:501049
@@ -171,7 +171,7 @@
 
     int w = cinfo.output_width;
     int h = cinfo.output_height;
-    uchar *dest;
+    uchar *dest = 0;
     
     if (loadImageData)
     {
@@ -205,9 +205,9 @@
             return false;
         }
     
-        ptr2 = new uchar[w * h * 4];
+        dest = new uchar[w * h * 4];
     
-        if (!ptr2)
+        if (!dest)
         {
             delete [] data;
             jpeg_destroy_decompress(&cinfo);
@@ -216,7 +216,7 @@
             return false;
         }
     
-        dest  = ptr2;
+        ptr2  = dest;
         count = 0;
         prevy = 0;
     
@@ -235,7 +235,7 @@
                     if (!observer->continueQuery(m_image))
                     {
                         delete [] data;
-                        delete [] ptr2;
+                        delete [] dest;
                         jpeg_destroy_decompress(&cinfo);
                         fclose(file);
                         return false;
@@ -280,7 +280,7 @@
                     if (!observer->continueQuery(m_image))
                     {
                         delete [] data;
-                        delete [] ptr2;
+                        delete [] dest;
                         jpeg_destroy_decompress(&cinfo);
                         fclose(file);
                         return false;
_______________________________________________
Digikam-devel mailing list
[hidden email]
https://mail.kde.org/mailman/listinfo/digikam-devel
Reply | Threaded
Open this post in threaded view
|

Re: extragear/graphics/digikam/libs/dimg

Gilles Caulier
Le Samedi 21 Janvier 2006 23:37, Marcel Wiesweg a écrit :

THANKS YOU very much Marcel. Great hacking !!! I have trying to solve this
problem since a long time in the past without sucess...

Gilles

> SVN commit 501049 by mwiesweg:
>
> digikam from trunk: Dimg fixes
>
> - fix memory leak: added missing deref() in DImg::copy()
>   The object that is copied would leak its memory
> - fix crash in jpegloader
>
> CCMAIL:[hidden email]
>
>
>
>  M  +2 -0      dimg.cpp
>  M  +1 -1      dimgloader.cpp
>  M  +6 -6      loaders/jpegloader.cpp
>
>
> --- trunk/extragear/graphics/digikam/libs/dimg/dimg.cpp #501048:501049
> @@ -780,6 +780,8 @@
>          m_priv->data = new uchar[size];
>          memcpy(m_priv->data, old->data, size);
>      }
> +
> +    old->deref();
>  }
>
>  void DImg::crop(QRect rect)
> --- trunk/extragear/graphics/digikam/libs/dimg/dimgloader.cpp
> #501048:501049 @@ -40,7 +40,7 @@
>      // Progress slice is the part of 100% concerned with the current
> granularity // (E.g. in a loop only the values from 10% to 90% are used,
> then progressSlice is 0.8) // Current default is 1/20, that is progress
> info every 5%
> -    int granularity = (total / (20 * progressSlice)) /
> observer->granularity(); +    int granularity = (int)(( total / (20 *
> progressSlice)) / observer->granularity()); return granularity ?
> granularity : 1;
>  }
>
> --- trunk/extragear/graphics/digikam/libs/dimg/loaders/jpegloader.cpp
> #501048:501049 @@ -171,7 +171,7 @@
>
>      int w = cinfo.output_width;
>      int h = cinfo.output_height;
> -    uchar *dest;
> +    uchar *dest = 0;
>
>      if (loadImageData)
>      {
> @@ -205,9 +205,9 @@
>              return false;
>          }
>
> -        ptr2 = new uchar[w * h * 4];
> +        dest = new uchar[w * h * 4];
>
> -        if (!ptr2)
> +        if (!dest)
>          {
>              delete [] data;
>              jpeg_destroy_decompress(&cinfo);
> @@ -216,7 +216,7 @@
>              return false;
>          }
>
> -        dest  = ptr2;
> +        ptr2  = dest;
>          count = 0;
>          prevy = 0;
>
> @@ -235,7 +235,7 @@
>                      if (!observer->continueQuery(m_image))
>                      {
>                          delete [] data;
> -                        delete [] ptr2;
> +                        delete [] dest;
>                          jpeg_destroy_decompress(&cinfo);
>                          fclose(file);
>                          return false;
> @@ -280,7 +280,7 @@
>                      if (!observer->continueQuery(m_image))
>                      {
>                          delete [] data;
> -                        delete [] ptr2;
> +                        delete [] dest;
>                          jpeg_destroy_decompress(&cinfo);
>                          fclose(file);
>                          return false;
> _______________________________________________
> Digikam-devel mailing list
> [hidden email]
> https://mail.kde.org/mailman/listinfo/digikam-devel
_______________________________________________
Digikam-devel mailing list
[hidden email]
https://mail.kde.org/mailman/listinfo/digikam-devel