[PATCH 1/5] supplicant: Add a new validation type for UTF-8 strings
- From: Evan Broder <evan ebroder net>
- To: networkmanager-list gnome org
- Subject: [PATCH 1/5] supplicant: Add a new validation type for UTF-8 strings
- Date: Thu, 17 Nov 2011 16:36:14 -0800
---
src/supplicant-manager/nm-supplicant-config.c | 1 +
.../nm-supplicant-settings-verify.c | 25 ++++++++++++++++++++
.../nm-supplicant-settings-verify.h | 1 +
3 files changed, 27 insertions(+), 0 deletions(-)
diff --git a/src/supplicant-manager/nm-supplicant-config.c b/src/supplicant-manager/nm-supplicant-config.c
index 4860314..74455ee 100644
--- a/src/supplicant-manager/nm-supplicant-config.c
+++ b/src/supplicant-manager/nm-supplicant-config.c
@@ -293,6 +293,7 @@ get_hash_cb (gpointer key, gpointer value, gpointer user_data)
g_value_set_int (variant, atoi (opt->value));
break;
case TYPE_BYTES:
+ case TYPE_UTF8:
array = g_byte_array_sized_new (opt->len);
g_byte_array_append (array, (const guint8 *) opt->value, opt->len);
g_value_init (variant, DBUS_TYPE_G_UCHAR_ARRAY);
diff --git a/src/supplicant-manager/nm-supplicant-settings-verify.c b/src/supplicant-manager/nm-supplicant-settings-verify.c
index aea5bfe..7c66c1c 100644
--- a/src/supplicant-manager/nm-supplicant-settings-verify.c
+++ b/src/supplicant-manager/nm-supplicant-settings-verify.c
@@ -44,6 +44,10 @@ static gboolean validate_type_bytes (const struct Opt * opt,
const char * value,
const guint32 len);
+static gboolean validate_type_utf8 (const struct Opt *opt,
+ const char * value,
+ const guint32 len);
+
static gboolean validate_type_keyword (const struct Opt * opt,
const char * value,
const guint32 len);
@@ -58,6 +62,7 @@ struct validate_entry {
static const struct validate_entry validate_table[] = {
{ TYPE_INT, validate_type_int },
{ TYPE_BYTES, validate_type_bytes },
+ { TYPE_UTF8, validate_type_utf8 },
{ TYPE_KEYWORD, validate_type_keyword },
};
@@ -174,6 +179,26 @@ validate_type_bytes (const struct Opt * opt,
}
static gboolean
+validate_type_utf8 (const struct Opt *opt,
+ const char * value,
+ const guint32 len)
+{
+ guint32 check_len;
+
+ g_return_val_if_fail (opt != NULL, FALSE);
+ g_return_val_if_fail (value != NULL, FALSE);
+
+ check_len = opt->int_high ? opt->int_high : 255;
+ /* Note that we deliberately don't validate the UTF-8, because
+ some "UTF-8" fields, such as 8021x.password, do not actually
+ have to be valid UTF-8 */
+ if (g_utf8_strlen (value, len) > check_len)
+ return FALSE;
+
+ return TRUE;
+}
+
+static gboolean
validate_type_keyword (const struct Opt * opt,
const char * value,
const guint32 len)
diff --git a/src/supplicant-manager/nm-supplicant-settings-verify.h b/src/supplicant-manager/nm-supplicant-settings-verify.h
index 0939ebd..4527a9e 100644
--- a/src/supplicant-manager/nm-supplicant-settings-verify.h
+++ b/src/supplicant-manager/nm-supplicant-settings-verify.h
@@ -25,6 +25,7 @@ typedef enum OptType {
TYPE_INVALID = 0,
TYPE_INT,
TYPE_BYTES,
+ TYPE_UTF8,
TYPE_KEYWORD,
TYPE_STRING
} OptType;
--
1.7.5.4
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]