]> git.sur5r.net Git - glabels/commitdiff
Fix crash when encountering an invalid barcode backend
authorJim Evins <evins@snaught.com>
Fri, 24 Dec 2010 18:53:33 +0000 (13:53 -0500)
committerJim Evins <evins@snaught.com>
Fri, 24 Dec 2010 18:58:53 +0000 (13:58 -0500)
A file may have been saved from an instance of glabels that had a backend
enabled that is not enabled in the current instance of glabels.  This fix
accounts for this.  It is also possible that the glabels file was created
manually with an invalid backend ID or a typo.

src/bc-backends.c
src/bc-backends.h
src/xml-label.c

index 9f9904e2684ccbe0b0f37e8971558405d1d9f39a..0442f7f990bf285f51d157bfba92e695f53f06f9 100644 (file)
@@ -628,6 +628,31 @@ gl_barcode_backends_backend_name_to_id (const gchar *backend_name)
 }
 
 
+/*****************************************************************************/
+/* Test if backend id is valid.                                              */
+/*****************************************************************************/
+gboolean
+gl_barcode_backends_is_backend_id_valid (const gchar    *backend_id)
+{
+        gint i;
+
+        if (backend_id == NULL)
+        {
+                return FALSE;
+        }
+
+        for (i=0; backends[i].id != NULL; i++)
+        {
+                if (g_ascii_strcasecmp (backend_id, backends[i].id) == 0)
+                {
+                        return TRUE;
+                }
+        }
+
+        return FALSE;
+}
+
+
 /*****************************************************************************/
 /* Guess backend id from style id (for backwards compatability).             */
 /*****************************************************************************/
index 8ed764db408478040fe65b99a02708d8d1f89bdd..e284c1711cae7def4021f8ca29691d927c52741f 100644 (file)
@@ -33,6 +33,7 @@ void             gl_barcode_backends_free_backend_list    (GList          *backe
 const gchar     *gl_barcode_backends_backend_id_to_name   (const gchar    *backend_id);
 const gchar     *gl_barcode_backends_backend_name_to_id   (const gchar    *backend_name);
 
+gboolean         gl_barcode_backends_is_backend_id_valid  (const gchar    *backend_id);
 const gchar     *gl_barcode_backends_guess_backend_id     (const gchar    *id);
 
 GList           *gl_barcode_backends_get_styles_list      (const gchar    *backend_id);
index 0e7e7716e71b669b7507deddde3ae22a10317d29..79b4646938622d8b70633937ef32e30eff7fb0e5 100644 (file)
@@ -768,9 +768,17 @@ xml_parse_object_barcode (xmlNodePtr  node,
         style = gl_label_barcode_style_new ();
        backend_id = lgl_xml_get_prop_string (node, "backend", NULL);
        id = lgl_xml_get_prop_string (node, "style", NULL);
-        if ( !backend_id )
+        if ( !gl_barcode_backends_is_backend_id_valid (backend_id) )
         {
-                backend_id = g_strdup (gl_barcode_backends_guess_backend_id (id));
+                if ( backend_id == NULL )
+                {
+                        backend_id = g_strdup (gl_barcode_backends_guess_backend_id (id));
+                }
+                else
+                {
+                        g_free (backend_id);
+                        backend_id = g_strdup ("built-in");
+                }
         }
         gl_label_barcode_style_set_backend_id (style, backend_id);
         gl_label_barcode_style_set_style_id (style, id);