diff --git a/core/modules/language/language.admin.inc b/core/modules/language/language.admin.inc
index 33bc147..71434b7 100644
--- a/core/modules/language/language.admin.inc
+++ b/core/modules/language/language.admin.inc
@@ -306,7 +306,7 @@ function language_admin_add_custom_form_validate($form, &$form_state) {
   if ($form_state['values']['predefined_langcode'] == 'custom') {
     $langcode = $form_state['values']['langcode'];
     // Reuse the editing form validation routine if we add a custom language.
-    language_admin_edit_form_validate($form, $form_state);
+    language_admin_edit_form_validate($form['custom_language'], $form_state);
 
     $languages = language_list();
     if (isset($languages[$langcode])) {
diff --git a/core/modules/language/language.test b/core/modules/language/language.test
index 0a59937..f86fcfa 100644
--- a/core/modules/language/language.test
+++ b/core/modules/language/language.test
@@ -177,5 +177,19 @@ class LanguageListTest extends DrupalWebTestCase {
     // We need raw here because %language and %langcode will add HTML.
     $t_args = array('%language' => 'English', '%langcode' => 'en');
     $this->assertRaw(t('The %language (%langcode) language has been removed.', $t_args), t('The English language has been removed.'));
+
+    // Try to add a language with an invalid name.
+    // Code for the language.
+    $langcode = 'xx_broken';
+    // The invalid name for the language.
+    $name = '<br />' . $this->randomName(16);
+    $edit_broken = array(
+     'predefined_langcode' => 'custom',
+     'langcode' => $langcode,
+     'name' => $name,
+     'direction' => '0',
+    );
+    $this->drupalPost('admin/config/regional/language/add', $edit_broken, t('Add custom language'));
+    $this->assertRaw(t('%field cannot contain any markup.', array('%field' => t('Language name'))), t('Markup in language name not allowed.'));
   }
 }
