Update of /cvsroot/ufraw/ufraw
In directory vz-cvs-3.sog:/tmp/cvs-serv31881

Modified Files:
        ufraw-batch.c ufraw-gimp.c ufraw.c ufraw.h ufraw_chooser.c 
        ufraw_preview.c ufraw_ufraw.c 
Log Message:
Fix segfault while loading darkframe.

Index: ufraw_chooser.c
===================================================================
RCS file: /cvsroot/ufraw/ufraw/ufraw_chooser.c,v
retrieving revision 1.35
retrieving revision 1.36
diff -u -d -r1.35 -r1.36
--- ufraw_chooser.c     20 Feb 2011 06:15:20 -0000      1.35
+++ ufraw_chooser.c     6 Nov 2011 03:30:55 -0000       1.36
@@ -151,6 +151,7 @@
             }
             int status = ufraw_config(uf, rc, conf, cmd);
             if (status == UFRAW_ERROR) {
+                ufraw_close_darkframe(uf->conf);
                 ufraw_close(uf);
             } else {
                 ufraw_preview(uf, rc, FALSE, NULL);
@@ -160,6 +161,9 @@
         }
         g_slist_free(saveList);
     }
+    if (rc->darkframe != NULL)
+        ufraw_close_darkframe(rc);
+
     gtk_widget_destroy(GTK_WIDGET(fileChooser));
     ufraw_message(UFRAW_SET_PARENT, NULL);
 }

Index: ufraw_preview.c
===================================================================
RCS file: /cvsroot/ufraw/ufraw/ufraw_preview.c,v
retrieving revision 1.357
retrieving revision 1.358
diff -u -d -r1.357 -r1.358
--- ufraw_preview.c     22 Aug 2011 03:45:56 -0000      1.357
+++ ufraw_preview.c     6 Nov 2011 03:30:55 -0000       1.358
@@ -2521,10 +2521,7 @@
     if (data->FreezeDialog) return;
     if (CFG->darkframe == NULL) return;
 
-    ufraw_close(CFG->darkframe);
-    g_free(CFG->darkframe);
-    CFG->darkframe = NULL;
-    CFG->darkframeFile[0] = '\0';
+    ufraw_close_darkframe(CFG);
 
     set_darkframe(data);
     (void)unused;
@@ -5904,6 +5901,8 @@
         strcpy(RC->outputFilename, "");
     }
     // UFRAW_RESPONSE_DELETE requires no special action
+    if (rc->darkframe != data->UF->conf->darkframe)
+        ufraw_close_darkframe(data->UF->conf);
     ufraw_close(data->UF);
     g_free(data->SpotLabels);
     g_free(data->AvrLabels);

Index: ufraw.h
===================================================================
RCS file: /cvsroot/ufraw/ufraw/ufraw.h,v
retrieving revision 1.163
retrieving revision 1.164
diff -u -d -r1.163 -r1.164
--- ufraw.h     27 Jul 2011 13:50:45 -0000      1.163
+++ ufraw.h     6 Nov 2011 03:30:55 -0000       1.164
@@ -379,6 +379,7 @@
                                       gboolean bufferok);
     ufraw_image_data *ufraw_convert_image_area(ufraw_data *uf, unsigned saidx,
             UFRawPhase phase);
+    void ufraw_close_darkframe(conf_data *uf);
     void ufraw_close(ufraw_data *uf);
     void ufraw_flip_orientation(ufraw_data *uf, int flip);
     void ufraw_flip_image(ufraw_data *uf, int flip);

Index: ufraw-gimp.c
===================================================================
RCS file: /cvsroot/ufraw/ufraw/ufraw-gimp.c,v
retrieving revision 1.67
retrieving revision 1.68
diff -u -d -r1.67 -r1.68
--- ufraw-gimp.c        20 Feb 2011 06:15:20 -0000      1.67
+++ ufraw-gimp.c        6 Nov 2011 03:30:55 -0000       1.68
@@ -272,6 +272,7 @@
         if (sendToGimpMode) gimp_progress_update(0.3);
         ufraw_save_gimp_image(uf, NULL);
         if (sendToGimpMode) gimp_progress_update(1.0);
+        ufraw_close_darkframe(uf->conf);
         ufraw_close(uf);
         /* To make sure we don't delete the raw file by mistake we check
          * that the file is really an ID file. */

Index: ufraw_ufraw.c
===================================================================
RCS file: /cvsroot/ufraw/ufraw/ufraw_ufraw.c,v
retrieving revision 1.267
retrieving revision 1.268
diff -u -d -r1.267 -r1.268
--- ufraw_ufraw.c       22 Aug 2011 03:20:21 -0000      1.267
+++ ufraw_ufraw.c       6 Nov 2011 03:30:55 -0000       1.268
@@ -283,7 +283,7 @@
         if (strcmp(uf->conf->darkframeFile, uf->conf->darkframe->filename) == 
0)
             return UFRAW_SUCCESS;
         // Otherwise we need to close the previous darkframe
-        ufraw_close(uf->conf->darkframe);
+        ufraw_close_darkframe(uf->conf);
     }
     ufraw_data *dark = uf->conf->darkframe =
                            ufraw_open(uf->conf->darkframeFile);
@@ -694,6 +694,17 @@
     return UFRAW_SUCCESS;
 }
 
+/* Free any darkframe associated with conf */
+void ufraw_close_darkframe(conf_data *conf)
+{
+    if (conf && conf->darkframe != NULL) {
+        ufraw_close(conf->darkframe);
+        g_free(conf->darkframe);
+        conf->darkframe = NULL;
+        conf->darkframeFile[0] = '\0';
+    }
+}
+
 void ufraw_close(ufraw_data *uf)
 {
     dcraw_close(uf->raw);
@@ -713,10 +724,6 @@
     lf_modifier_destroy(uf->TCAmodifier);
     lf_modifier_destroy(uf->modifier);
 #endif
-    if (uf->conf->darkframe != NULL) {
-        ufraw_close(uf->conf->darkframe);
-        g_free(uf->conf->darkframe);
-    }
     ufobject_delete(uf->conf->ufobject);
     g_free(uf->conf);
     ufraw_message_reset(uf);

Index: ufraw.c
===================================================================
RCS file: /cvsroot/ufraw/ufraw/ufraw.c,v
retrieving revision 1.62
retrieving revision 1.63
diff -u -d -r1.62 -r1.63
--- ufraw.c     20 Feb 2011 06:15:20 -0000      1.62
+++ ufraw.c     6 Nov 2011 03:30:55 -0000       1.63
@@ -119,6 +119,7 @@
         }
         status = ufraw_config(uf, &rc, &conf, &cmd);
         if (status == UFRAW_ERROR) {
+            ufraw_close_darkframe(uf->conf);
             ufraw_close(uf);
             g_free(uf);
             gdk_threads_leave();

Index: ufraw-batch.c
===================================================================
RCS file: /cvsroot/ufraw/ufraw/ufraw-batch.c,v
retrieving revision 1.40
retrieving revision 1.41
diff -u -d -r1.40 -r1.41
--- ufraw-batch.c       20 Feb 2011 06:15:20 -0000      1.40
+++ ufraw-batch.c       6 Nov 2011 03:30:55 -0000       1.41
@@ -75,12 +75,14 @@
             uf->conf->createID = also_id;
         if (status == UFRAW_ERROR) {
             exitCode = 1;
+            ufraw_close_darkframe(uf->conf);
             ufraw_close(uf);
             g_free(uf);
             exit(1);
         }
         if (ufraw_load_raw(uf) != UFRAW_SUCCESS) {
             exitCode = 1;
+            ufraw_close_darkframe(uf->conf);
             ufraw_close(uf);
             g_free(uf);
             continue;
@@ -99,6 +101,7 @@
         } else {
             exitCode = 1;
         }
+        ufraw_close_darkframe(uf->conf);
         ufraw_close(uf);
         g_free(uf);
     }


------------------------------------------------------------------------------
RSA(R) Conference 2012
Save $700 by Nov 18
Register now
http://p.sf.net/sfu/rsa-sfdev2dev1
_______________________________________________
ufraw-cvs mailing list
ufraw-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/ufraw-cvs

Reply via email to