diff -u b/core/lib/Drupal/Core/Render/Element/Radio.php b/core/lib/Drupal/Core/Render/Element/Radio.php --- b/core/lib/Drupal/Core/Render/Element/Radio.php +++ b/core/lib/Drupal/Core/Render/Element/Radio.php @@ -54,17 +54,17 @@ $element['#attributes']['type'] = 'radio'; Element::setAttributes($element, array('id', 'name', '#return_value' => 'value')); - if (isset($element['#return_value'])) { + if (isset($element['#return_value']) && $element['#value'] !== FALSE) { // To avoid auto-casting during '==' we convert int 0 to '0' for both // operands. It will prevent wrong true-checking for both cases: 0 == // 'string' and 'string' == 0. - if ($element['#value'] === 0 || $element['#value'] === FALSE) { + if ($element['#value'] === 0) { $element['#value'] = '0'; } elseif ($element['#value'] === TRUE) { $element['#value'] = '1'; } - if ($element['#return_value'] === 0 || $element['#return_value'] === FALSE) { + if ($element['#return_value'] === 0) { $element['#return_value'] = '0'; } elseif ($element['#return_value'] === TRUE) { diff -u b/core/modules/system/src/Tests/Form/ElementTest.php b/core/modules/system/src/Tests/Form/ElementTest.php --- b/core/modules/system/src/Tests/Form/ElementTest.php +++ b/core/modules/system/src/Tests/Form/ElementTest.php @@ -103,9 +103,9 @@ $elements = $this->xpath('//input[@name="radios-boolean-true" and @checked]'); $this->assertEqual(count($elements), 1); $this->assertIdentical((string) $elements[0]['value'], '1'); + // A default value of FALSE indicates that nothing is set. $elements = $this->xpath('//input[@name="radios-boolean-false" and @checked]'); - $this->assertEqual(count($elements), 1); - $this->assertIdentical((string) $elements[0]['value'], '0'); + $this->assertEqual(count($elements), 0); } /**