[gnome-color-manager] trivial: make the EDID code more resistant to broken data
- From: Richard Hughes <rhughes src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [gnome-color-manager] trivial: make the EDID code more resistant to broken data
- Date: Fri, 27 Nov 2009 12:31:29 +0000 (UTC)
commit a1c009662eb7bd525d86a9b0d3583228054f0c52
Author: Richard Hughes <richard hughsie com>
Date: Fri Nov 27 12:30:41 2009 +0000
trivial: make the EDID code more resistant to broken data
src/gcm-edid.c | 24 +++++++++++++++---------
1 files changed, 15 insertions(+), 9 deletions(-)
---
diff --git a/src/gcm-edid.c b/src/gcm-edid.c
index 4e263f8..be167d5 100644
--- a/src/gcm-edid.c
+++ b/src/gcm-edid.c
@@ -171,16 +171,16 @@ gcm_edid_parse (GcmEdid *edid, const guint8 *data, GError **error)
/* any useful blocks? */
if (data[i+3] == GCM_DESCRIPTOR_DISPLAY_PRODUCT_NAME) {
- priv->monitor_name = g_strdup ((const gchar *) &data[i+5]);
+ priv->monitor_name = g_strndup ((const gchar *) &data[i+5], 12);
egg_debug ("[extended EDID block] monitor name: %s", priv->monitor_name);
} else if (data[i+3] == GCM_DESCRIPTOR_DISPLAY_PRODUCT_SERIAL_NUMBER) {
g_free (priv->serial_number);
- priv->serial_number = g_strdup ((const gchar *) &data[i+5]);
+ priv->serial_number = g_strndup ((const gchar *) &data[i+5], 12);
egg_debug ("[extended EDID block] serial number: %s", priv->serial_number);
} else if (data[i+3] == GCM_DESCRIPTOR_COLOR_MANAGEMENT_DATA) {
egg_warning ("failing to parse color management data");
} else if (data[i+3] == GCM_DESCRIPTOR_ALPHANUMERIC_DATA_STRING) {
- priv->ascii_string = g_strdup ((const gchar *) &data[i+5]);
+ priv->ascii_string = g_strndup ((const gchar *) &data[i+5], 12);
egg_debug ("[extended EDID block] ascii string: %s", priv->ascii_string);
} else if (data[i+3] == GCM_DESCRIPTOR_COLOR_POINT) {
if (data[i+3+9] != 0xff) {
@@ -202,12 +202,18 @@ gcm_edid_parse (GcmEdid *edid, const guint8 *data, GError **error)
egg_warning ("%i extension blocks to parse", extension_blocks);
/* remove embedded newlines */
- if (priv->monitor_name != NULL)
- g_strdelimit (priv->monitor_name, "\n", '\0');
- if (priv->serial_number != NULL)
- g_strdelimit (priv->serial_number, "\n", '\0');
- if (priv->ascii_string != NULL)
- g_strdelimit (priv->ascii_string, "\n", '\0');
+ if (priv->monitor_name != NULL) {
+ g_strchomp (priv->monitor_name);
+ g_strdelimit (priv->monitor_name, "\n\r", '\0');
+ }
+ if (priv->serial_number != NULL) {
+ g_strchomp (priv->serial_number);
+ g_strdelimit (priv->serial_number, "\n\r", '\0');
+ }
+ if (priv->ascii_string != NULL) {
+ g_strchomp (priv->ascii_string);
+ g_strdelimit (priv->ascii_string, "\n\r", '\0');
+ }
out:
return ret;
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]