]> code.delx.au - gnu-emacs/commitdiff
Backport: Memory leak fix and 19133 fix.
authorJan D <jan.h.d@swipnet.se>
Wed, 24 Dec 2014 11:24:14 +0000 (12:24 +0100)
committerJan D <jan.h.d@swipnet.se>
Wed, 24 Dec 2014 11:24:14 +0000 (12:24 +0100)
Fixes: debbugs:19133
* nsimage.m (allocInitFromFile:): Initialize bmRep.
(dealloc): Release bmRep.
(setPixmapData): Make bmRep local so class member is not
set.

src/ChangeLog
src/nsimage.m

index f98afd8026ff25d17c5d5fd77fe6a58df07b9a54..530b913078361d7a9c4a6fa144af2a63a3b27fad 100644 (file)
@@ -1,4 +1,11 @@
-2014-11-02  Jan Djärv  <jan.h.d@swipnet.se>
+2014-12-24  Jan Djärv  <jan.h.d@swipnet.se>
+
+       * nsimage.m (allocInitFromFile:): Initialize bmRep.
+       (dealloc): Release bmRep.
+        (setPixmapData): Make bmRep local so class member is not
+        set (Bug#19133).
+
+2014-12-24  Jan Djärv  <jan.h.d@swipnet.se>
 
        * nsterm.h (EmacsImage): Remove imageListNext, refCount, reference,
        imageListSetNext, imageListNext.
index cb29bf1b0475d6b29962dfc4bd26fe791b78cf33..a625f20616d7355cfbf30bb32739198b5501767a 100644 (file)
@@ -174,6 +174,7 @@ ns_set_alpha (void *img, int x, int y, unsigned char a)
   image = [[EmacsImage alloc] initByReferencingFile:
                      [NSString stringWithUTF8String: SSDATA (found)]];
 
+  image->bmRep = nil;
 #if defined (NS_IMPL_COCOA) && MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_6
   imgRep = [NSBitmapImageRep imageRepWithData:[image TIFFRepresentation]];
 #else
@@ -199,6 +200,7 @@ ns_set_alpha (void *img, int x, int y, unsigned char a)
 - (void)dealloc
 {
   [stippleMask release];
+  [bmRep release];
   [super dealloc];
 }
 
@@ -245,6 +247,7 @@ ns_set_alpha (void *img, int x, int y, unsigned char a)
               if (s >= bits + length)
                 {
                   [bmRep release];
+                  bmRep = nil;
                   return nil;
                 }
 #define hexchar(x) ('0' <= (x) && (x) <= '9' ? (x) - '0' : (x) - 'a' + 10)
@@ -348,7 +351,7 @@ ns_set_alpha (void *img, int x, int y, unsigned char a)
     {
       if ([rep respondsToSelector: @selector (getBitmapDataPlanes:)])
         {
-          bmRep = (NSBitmapImageRep *) rep;
+          NSBitmapImageRep *bmRep = (NSBitmapImageRep *) rep;
 
           if ([bmRep numberOfPlanes] >= 3)
               [bmRep getBitmapDataPlanes: pixmapData];