tracker r2947 - in trunk: . src/tracker-extract tests/tracker-extract



Author: mottela
Date: Thu Feb 19 16:14:32 2009
New Revision: 2947
URL: http://svn.gnome.org/viewvc/tracker?rev=2947&view=rev

Log:
Error handling changed not to abort for jpegs

Modified:
   trunk/ChangeLog
   trunk/src/tracker-extract/tracker-extract-jpeg.c
   trunk/tests/tracker-extract/tracker-extract-gstreamer-test.c

Modified: trunk/src/tracker-extract/tracker-extract-jpeg.c
==============================================================================
--- trunk/src/tracker-extract/tracker-extract-jpeg.c	(original)
+++ trunk/src/tracker-extract/tracker-extract-jpeg.c	Thu Feb 19 16:14:32 2009
@@ -32,6 +32,7 @@
 #include <sys/types.h>
 #include <sys/stat.h>
 #include <unistd.h>
+#include <setjmp.h>
 
 #include <glib.h>
 #include <glib/gstdio.h>
@@ -107,6 +108,19 @@
 	{ -1, NULL, NULL }
 };
 
+struct tej_error_mgr 
+{
+	struct jpeg_error_mgr jpeg;
+	jmp_buf setjmp_buffer;
+};
+
+static void tracker_extract_jpeg_error_exit (j_common_ptr cinfo)
+{
+    struct tej_error_mgr *h = (struct tej_error_mgr *)cinfo->err;
+    (*cinfo->err->output_message)(cinfo);
+    longjmp(h->setjmp_buffer, 1);
+}
+
 static gchar *
 date_to_iso8601 (const gchar *date)
 {
@@ -252,7 +266,7 @@
 	size_t	     size;
 
 	struct jpeg_decompress_struct  cinfo;
-	struct jpeg_error_mgr	       jerr;
+	struct tej_error_mgr	       tejerr;
 	struct jpeg_marker_struct     *marker;
 	FILE			      *jpeg;
 	gint			       fd_jpeg;
@@ -277,16 +291,21 @@
 		gchar *str;
 		gsize  len;
 
-		cinfo.err = jpeg_std_error (&jerr);
-		jpeg_create_decompress (&cinfo);
+		cinfo.err = jpeg_std_error (&tejerr.jpeg);
+		tejerr.jpeg.error_exit = tracker_extract_jpeg_error_exit;
+		if (setjmp(tejerr.setjmp_buffer)) {
+			goto fail;
+		}
 
+		jpeg_create_decompress (&cinfo);
+		
 		jpeg_save_markers (&cinfo, JPEG_COM, 0xFFFF);
 		jpeg_save_markers (&cinfo, JPEG_APP0 + 1, 0xFFFF);
-
+		
 		jpeg_stdio_src (&cinfo, jpeg);
-
+		
 		jpeg_read_header (&cinfo, TRUE);
-
+		
 		/* FIXME? It is possible that there are markers after SOS,
 		 * but there shouldn't be. Should we decompress the whole file?
 		 *
@@ -294,22 +313,22 @@
 		 * jpeg_finish_decompress(&cinfo);
 		 *
 		 * jpeg_calc_output_dimensions(&cinfo);
-		*/
-
+		 */
+		
 		marker = (struct jpeg_marker_struct *) &cinfo.marker_list;
-
+		
 		while (marker) {
 			switch (marker->marker) {
 			case JPEG_COM:
 				len = marker->data_length;
 				str = g_strndup ((gchar*) marker->data, len);
-
+				
 				g_hash_table_insert (metadata,
 						     g_strdup ("Image:Comments"),
 						     tracker_escape_metadata (str));
 				g_free (str);
 				break;
-
+				
 			case JPEG_APP0+1:
 #ifdef HAVE_LIBEXIF
 				if (strncmp ("Exif", (gchar*) (marker->data), 5) == 0) {
@@ -363,7 +382,7 @@
 		}
 
 		jpeg_destroy_decompress (&cinfo);
-
+	fail:
 		fclose (jpeg);
 	} else {
 		close (fd_jpeg);

Modified: trunk/tests/tracker-extract/tracker-extract-gstreamer-test.c
==============================================================================
--- trunk/tests/tracker-extract/tracker-extract-gstreamer-test.c	(original)
+++ trunk/tests/tracker-extract/tracker-extract-gstreamer-test.c	Thu Feb 19 16:14:32 2009
@@ -42,7 +42,9 @@
 	g_test_message ("Testing extract functionality");
 	g_test_add_func ("/tracker-extract/tracker-extract-gstreamer/check-extract-data",
 			 test_tracker_extract_check_extract_data);
-#if 0
+#if 1
+	TrackerExtractData *data;
+
 	data = tracker_test_extract_get_extract ("audio/mpeg");
 
 	g_test_add_data_func ("/tracker-extract/tracker-extract-gstreamer/mp3/id3v1_basic",
@@ -63,7 +65,7 @@
 
 	if (g_test_perf()) {
 		g_test_add_data_func ("/tracker-extract/tracker-extract-gstreamer/mp3/performance_cbr",
-				      data, performance_tracker_extract_mp3);	
+				      data, test_tracker_extract_mp3_performance);	
 	}
 #endif
 



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]