diff --git a/modules/menu/menu.module b/modules/menu/menu.module
index ec41c2f..27a0d5d 100644
--- a/modules/menu/menu.module
+++ b/modules/menu/menu.module
@@ -250,6 +250,20 @@ function menu_load_all() {
  * @see menu_load()
  */
 function menu_save($menu) {
+  if (!is_array($menu)) {
+    throw new Exception(t('Attempt to save an uninitialized menu.'));
+  }
+
+  // Menu name is required.
+  if (empty($menu['menu_name'])) {
+    throw new Exception(t('Attempt to save an unnamed menu.'));
+  }
+
+  // Menu name cannot contain invalid characters.
+  if (preg_match('/[^a-z0-9-]+/', $menu['menu_name'])) {
+    throw new Exception(t('Attempt to save a menu with invalid characters. It must only contain lowercase letters, numbers and hyphens.'));
+  }
+
   $status = db_merge('menu_custom')
     ->key(array('menu_name' => $menu['menu_name']))
     ->fields(array(
