summaryrefslogtreecommitdiffstats
path: root/ipc/param_traits_macros.h
diff options
context:
space:
mode:
authortsepez@chromium.org <tsepez@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-06-04 07:20:32 +0000
committertsepez@chromium.org <tsepez@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-06-04 07:20:32 +0000
commitdedd0a9e00390f585c41f065d1bff0731bd4a2d8 (patch)
tree114983c99c00a83ceaceb8ec128d29718dbb7bcd /ipc/param_traits_macros.h
parentd966f777e418fbae4fef451a104bb1f7f326e434 (diff)
downloadchromium_src-dedd0a9e00390f585c41f065d1bff0731bd4a2d8.zip
chromium_src-dedd0a9e00390f585c41f065d1bff0731bd4a2d8.tar.gz
chromium_src-dedd0a9e00390f585c41f065d1bff0731bd4a2d8.tar.bz2
Implement off-the-wire validation scheme for emum types.
This CL adds explicit IPC macros that can be used to ensure that the values being read off the wire are legitimate for the enum type. BUG=176110 R=jam@chromium.org Review URL: https://chromiumcodereview.appspot.com/15841011 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@203892 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ipc/param_traits_macros.h')
-rw-r--r--ipc/param_traits_macros.h23
1 files changed, 21 insertions, 2 deletions
diff --git a/ipc/param_traits_macros.h b/ipc/param_traits_macros.h
index 58e74f6..ad87a93 100644
--- a/ipc/param_traits_macros.h
+++ b/ipc/param_traits_macros.h
@@ -23,8 +23,27 @@
#define IPC_STRUCT_TRAITS_PARENT(type)
#define IPC_STRUCT_TRAITS_END()
-// Traits generation for enums.
-#define IPC_ENUM_TRAITS(enum_name) \
+// Convenience macro for defining enumerated type traits for types which are
+// not range-checked by the IPC system. The author of the message handlers
+// is responsible for all validation. This macro should not need to be
+// subsequently redefined.
+#define IPC_ENUM_TRAITS(type) \
+ IPC_ENUM_TRAITS_VALIDATE(type, true)
+
+// Convenience macro for defining enumerated type traits for types which are
+// range-checked by the IPC system to be in the range of 0..maxvalue inclusive.
+// This macro should not need to be subsequently redefined.
+#define IPC_ENUM_TRAITS_MAX_VALUE(type, maxvalue) \
+ IPC_ENUM_TRAITS_MIN_MAX_VALUE(type, 0, maxvalue)
+
+// Convenience macro for defining enumerated type traits for types which are
+// range-checked by the IPC system to be in the range of minvalue..maxvalue
+// inclusive. This macro should not need to be subsequently redefined.
+#define IPC_ENUM_TRAITS_MIN_MAX_VALUE(type, minvalue, maxvalue) \
+ IPC_ENUM_TRAITS_VALIDATE(type, (value >= (minvalue) && value <= (maxvalue)))
+
+// Traits generation for enums. This macro may be redefined later.
+#define IPC_ENUM_TRAITS_VALIDATE(enum_name, validation_expression) \
namespace IPC { \
template <> \
struct IPC_MESSAGE_EXPORT ParamTraits<enum_name> { \