summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHans de Goede <hdegoede@redhat.com>2014-07-14 14:01:47 +0200
committerKeith Packard <keithp@keithp.com>2014-07-14 13:21:30 -0700
commit4dbb641bb2d4037f107b58b31e80963dc8b72c0e (patch)
treea9666f9a0a2dc41c4d21636dbf1cf0699b9bde60
parent25eca7ce35973577c8d85704c270f7fb53e6732e (diff)
config_odev_add_attribute*: Check for right attribute type
Don't allow setting string attributes to integers and vice versa. Signed-off-by: Hans de Goede <hdegoede@redhat.com> Reviewed-by: Keith Packard <keithp@keithp.com> Signed-off-by: Keith Packard <keithp@keithp.com>
-rw-r--r--config/config.c32
-rw-r--r--include/hotplug.h2
2 files changed, 33 insertions, 1 deletions
diff --git a/config/config.c b/config/config.c
index 551451623..a26d835e1 100644
--- a/config/config.c
+++ b/config/config.c
@@ -172,12 +172,38 @@ config_odev_find_or_add_attribute(struct OdevAttributes *attribs, int attrib)
return oa;
}
+static int config_odev_get_attribute_type(int attrib)
+{
+ switch (attrib) {
+ case ODEV_ATTRIB_PATH:
+ case ODEV_ATTRIB_SYSPATH:
+ case ODEV_ATTRIB_BUSID:
+ return ODEV_ATTRIB_STRING;
+ case ODEV_ATTRIB_FD:
+ case ODEV_ATTRIB_MAJOR:
+ case ODEV_ATTRIB_MINOR:
+ return ODEV_ATTRIB_INT;
+ case ODEV_ATTRIB_DRIVER:
+ return ODEV_ATTRIB_STRING;
+ default:
+ LogMessage(X_ERROR, "Error %s called for unknown attribute %d\n",
+ __func__, attrib);
+ return ODEV_ATTRIB_UNKNOWN;
+ }
+}
+
Bool
config_odev_add_attribute(struct OdevAttributes *attribs, int attrib,
const char *attrib_name)
{
struct OdevAttribute *oa;
+ if (config_odev_get_attribute_type(attrib) != ODEV_ATTRIB_STRING) {
+ LogMessage(X_ERROR, "Error %s called for non string attrib %d\n",
+ __func__, attrib);
+ return FALSE;
+ }
+
oa = config_odev_find_or_add_attribute(attribs, attrib);
free(oa->attrib_name);
oa->attrib_name = XNFstrdup(attrib_name);
@@ -191,6 +217,12 @@ config_odev_add_int_attribute(struct OdevAttributes *attribs, int attrib,
{
struct OdevAttribute *oa;
+ if (config_odev_get_attribute_type(attrib) != ODEV_ATTRIB_INT) {
+ LogMessage(X_ERROR, "Error %s called for non integer attrib %d\n",
+ __func__, attrib);
+ return FALSE;
+ }
+
oa = config_odev_find_or_add_attribute(attribs, attrib);
oa->attrib_value = attrib_value;
oa->attrib_type = ODEV_ATTRIB_INT;
diff --git a/include/hotplug.h b/include/hotplug.h
index b2c0d78a5..4c2fa970c 100644
--- a/include/hotplug.h
+++ b/include/hotplug.h
@@ -32,7 +32,7 @@ extern _X_EXPORT void config_pre_init(void);
extern _X_EXPORT void config_init(void);
extern _X_EXPORT void config_fini(void);
-enum { ODEV_ATTRIB_STRING, ODEV_ATTRIB_INT };
+enum { ODEV_ATTRIB_UNKNOWN = -1, ODEV_ATTRIB_STRING = 0, ODEV_ATTRIB_INT };
struct OdevAttribute {
struct xorg_list member;