[glabels] Fix crash when encountering an invalid barcode backend
- From: Jim Evins <jimevins src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [glabels] Fix crash when encountering an invalid barcode backend
- Date: Fri, 24 Dec 2010 18:59:01 +0000 (UTC)
commit 2fde09a614399ab805e94b036ac367beaa5a16c9
Author: Jim Evins <evins snaught com>
Date: Fri Dec 24 13:53:33 2010 -0500
Fix crash when encountering an invalid barcode backend
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 | 25 +++++++++++++++++++++++++
src/bc-backends.h | 1 +
src/xml-label.c | 12 ++++++++++--
3 files changed, 36 insertions(+), 2 deletions(-)
---
diff --git a/src/bc-backends.c b/src/bc-backends.c
index 9f9904e..0442f7f 100644
--- a/src/bc-backends.c
+++ b/src/bc-backends.c
@@ -629,6 +629,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). */
/*****************************************************************************/
const gchar *
diff --git a/src/bc-backends.h b/src/bc-backends.h
index 8ed764d..e284c17 100644
--- a/src/bc-backends.h
+++ b/src/bc-backends.h
@@ -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);
diff --git a/src/xml-label.c b/src/xml-label.c
index 0e7e771..79b4646 100644
--- a/src/xml-label.c
+++ b/src/xml-label.c
@@ -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);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]