Package: release.debian.org Severity: normal User: release.debian....@packages.debian.org Usertags: unblock
Please unblock package drupal7 My upload includes two important security fixes plus several minor reliability fixes, backported respectively from versions 7.33 and 7.34. Debdiff attached, or available via anonscm: https://anonscm.debian.org/cgit/collab-maint/drupal7.git/diff/?id=debian/7.32-1%2bdeb8u1&id2=debian/7.32-1 I don't know how rigurous this "pre-approval" is, but I checked this with jmw yesterday on IRC. Thanks! unblock drupal7/7.32-1+deb8u1 -- System Information: Debian Release: jessie/sid APT prefers unstable APT policy: (500, 'unstable') Architecture: amd64 (x86_64) Kernel: Linux 3.16-2-amd64 (SMP w/4 CPU cores) Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8) Shell: /bin/sh linked to /bin/dash
diff -Nru drupal7-7.32/debian/changelog drupal7-7.32/debian/changelog --- drupal7-7.32/debian/changelog 2014-10-15 11:34:54.000000000 -0500 +++ drupal7-7.32/debian/changelog 2014-11-21 13:28:18.000000000 -0600 @@ -1,3 +1,14 @@ +drupal7 (7.32-1+deb8u1) unstable; urgency=high + + * Updated the VCS URL in debian/control as git.debian.org is deprecated + * Debian has frozen! We will start backporting the important fixes to + 7.32 + * Backported from 7.34: SA-CORE-2014-006 (Session hijacking CVE-2014- + 9015, Denial of service CVE-2014-9016) + * Several minor reliability fixes backported from 7.33 + + -- Gunnar Wolf <gw...@debian.org> Wed, 15 Oct 2014 12:45:29 -0500 + drupal7 (7.32-1) unstable; urgency=critical * New upstream release diff -Nru drupal7-7.32/debian/control drupal7-7.32/debian/control --- drupal7-7.32/debian/control 2014-10-15 11:34:54.000000000 -0500 +++ drupal7-7.32/debian/control 2014-11-21 13:28:18.000000000 -0600 @@ -6,7 +6,7 @@ Build-Depends: debhelper (>= 7.0.50~), yui-compressor Homepage: http://www.drupal.org/ Standards-Version: 3.9.6.0 -Vcs-Git: git://git.debian.org/git/collab-maint/drupal7.git +Vcs-Git: git://anonscm.debian.org/collab-maint/drupal7.git Vcs-Browser: http://anonscm.debian.org/gitweb/?p=collab-maint/drupal7.git Package: drupal7 diff -Nru drupal7-7.32/debian/patches/ajax_throbber_align drupal7-7.32/debian/patches/ajax_throbber_align --- drupal7-7.32/debian/patches/ajax_throbber_align 1969-12-31 18:00:00.000000000 -0600 +++ drupal7-7.32/debian/patches/ajax_throbber_align 2014-11-21 13:28:18.000000000 -0600 @@ -0,0 +1,112 @@ +Origin: vendor +Forwarded: not-needed +From: Gunnar Wolf <gw...@debian.org> +Last-Update: 2014-11-21 +Description: Fixes alignment issue in the Ajax progress throbber + Fixed a bug which caused the Ajax progress throbber to appear misaligned in + many situatons (minor styling change). + . + Fixes Drupal issue #1069152 + . + Backported from 7.33. +Index: drupal7/modules/system/system.base-rtl.css +=================================================================== +--- drupal7.orig/modules/system/system.base-rtl.css ++++ drupal7/modules/system/system.base-rtl.css +@@ -9,10 +9,10 @@ + */ + /* Animated throbber */ + html.js input.form-autocomplete { +- background-position: 0% 2px; ++ background-position: 0% center; + } + html.js input.throbbing { +- background-position: 0% -18px; ++ background-position: 0% center; + } + + /** +Index: drupal7/modules/system/system.base.css +=================================================================== +--- drupal7.orig/modules/system/system.base.css ++++ drupal7/modules/system/system.base.css +@@ -31,12 +31,13 @@ + } + /* Animated throbber */ + html.js input.form-autocomplete { +- background-image: url(../../misc/throbber.gif); +- background-position: 100% 2px; /* LTR */ ++ background-image: url(../../misc/throbber-inactive.png); ++ background-position: 100% center; /* LTR */ + background-repeat: no-repeat; + } + html.js input.throbbing { +- background-position: 100% -18px; /* LTR */ ++ background-image: url(../../misc/throbber-active.gif); ++ background-position: 100% center; /* LTR */ + } + + /** +@@ -164,7 +165,7 @@ table.sticky-header { + display: inline-block; + } + .ajax-progress .throbber { +- background: transparent url(../../misc/throbber.gif) no-repeat 0px -18px; ++ background: transparent url(../../misc/throbber-active.gif) no-repeat 0px center; + float: left; /* LTR */ + height: 15px; + margin: 2px; +Index: drupal7/themes/bartik/css/style.css +=================================================================== +--- drupal7.orig/themes/bartik/css/style.css ++++ drupal7/themes/bartik/css/style.css +@@ -1326,14 +1326,6 @@ input.form-button-disabled:active, + color: #717171; + } + +-/* Animated throbber */ +-html.js input.form-autocomplete { +- background-position: 100% 4px; /* LTR */ +-} +-html.js input.throbbing { +- background-position: 100% -16px; /* LTR */ +-} +- + /* Comment form */ + .comment-form label { + float: left; /* LTR */ +Index: drupal7/themes/seven/style.css +=================================================================== +--- drupal7.orig/themes/seven/style.css ++++ drupal7/themes/seven/style.css +@@ -709,12 +709,7 @@ select.form-select:focus { + color: #000; + border-color: #ace; + } +-html.js input.form-autocomplete { +- background-position: 100% 4px; +-} +-html.js input.throbbing { +- background-position: 100% -16px; +-} ++ + ul.action-links { + margin: 1em 0; + padding: 0 20px 0 20px; /* LTR */ +Index: drupal7/themes/bartik/css/style-rtl.css +=================================================================== +--- drupal7.orig/themes/bartik/css/style-rtl.css ++++ drupal7/themes/bartik/css/style-rtl.css +@@ -225,10 +225,10 @@ ul.action-links li a { + + /* Animated throbber */ + html.js input.form-autocomplete { +- background-position: 1% 4px; ++ background-position: 1% center; + } + html.js input.throbbing { +- background-position: 1% -16px; ++ background-position: 1% center; + } + + /* Comment form */ diff -Nru drupal7-7.32/debian/patches/db_sanitize_orderby drupal7-7.32/debian/patches/db_sanitize_orderby --- drupal7-7.32/debian/patches/db_sanitize_orderby 1969-12-31 18:00:00.000000000 -0600 +++ drupal7-7.32/debian/patches/db_sanitize_orderby 2014-11-21 13:28:18.000000000 -0600 @@ -0,0 +1,71 @@ +Origin: vendor +Forwarded: not-needed +From: Gunnar Wolf <gw...@debian.org> +Last-Update: 2014-11-21 +Description: Fixes Drupal issue #829464 + Security improvement: Made the database API's orderBy() method sanitize the + sort direction ("ASC" or "DESC") for queries built with db_select(), so that + calling code does not have to. + . + Backported from 7.33. +Index: drupal7/includes/database/select.inc +=================================================================== +--- drupal7.orig/includes/database/select.inc ++++ drupal7/includes/database/select.inc +@@ -377,7 +377,8 @@ interface SelectQueryInterface extends Q + * @param $field + * The field on which to order. + * @param $direction +- * The direction to sort. Legal values are "ASC" and "DESC". ++ * The direction to sort. Legal values are "ASC" and "DESC". Any other value ++ * will be converted to "ASC". + * @return SelectQueryInterface + * The called object. + */ +@@ -1384,6 +1385,8 @@ class SelectQuery extends Query implemen + } + + public function orderBy($field, $direction = 'ASC') { ++ // Only allow ASC and DESC, default to ASC. ++ $direction = strtoupper($direction) == 'DESC' ? 'DESC' : 'ASC'; + $this->order[$field] = $direction; + return $this; + } +Index: drupal7/includes/tablesort.inc +=================================================================== +--- drupal7.orig/includes/tablesort.inc ++++ drupal7/includes/tablesort.inc +@@ -46,10 +46,9 @@ class TableSort extends SelectQueryExten + // Based on code from db_escape_table(), but this can also contain a dot. + $field = preg_replace('/[^A-Za-z0-9_.]+/', '', $ts['sql']); + +- // Sort order can only be ASC or DESC. +- $sort = drupal_strtoupper($ts['sort']); +- $sort = in_array($sort, array('ASC', 'DESC')) ? $sort : ''; +- $this->orderBy($field, $sort); ++ // orderBy() will ensure that only ASC/DESC values are accepted, so we ++ // don't need to sanitize that here. ++ $this->orderBy($field, $ts['sort']); + } + return $this; + } +Index: drupal7/modules/simpletest/tests/database_test.test +=================================================================== +--- drupal7.orig/modules/simpletest/tests/database_test.test ++++ drupal7/modules/simpletest/tests/database_test.test +@@ -1947,6 +1947,15 @@ class DatabaseSelectOrderedTestCase exte + + $this->assertEqual($num_records, 4, 'Returned the correct number of rows.'); + } ++ ++ /** ++ * Tests that the sort direction is sanitized properly. ++ */ ++ function testOrderByEscaping() { ++ $query = db_select('test')->orderBy('name', 'invalid direction'); ++ $order_bys = $query->getOrderBy(); ++ $this->assertEqual($order_bys['name'], 'ASC', 'Invalid order by direction is converted to ASC.'); ++ } + } + + /** diff -Nru drupal7-7.32/debian/patches/dont_lose_user_pictures drupal7-7.32/debian/patches/dont_lose_user_pictures --- drupal7-7.32/debian/patches/dont_lose_user_pictures 1969-12-31 18:00:00.000000000 -0600 +++ drupal7-7.32/debian/patches/dont_lose_user_pictures 2014-11-21 13:28:18.000000000 -0600 @@ -0,0 +1,56 @@ +Origin: vendor +Forwarded: not-needed +From: Gunnar Wolf <gw...@debian.org> +Last-Update: 2014-11-21 +Description: Avoid losing user pictures when re-saving + Fixed a bug which caused user pictures to be removed from the user object + after saving, and resulted in data loss if the user account was subsequently + re-saved. + . + Fixes Drupal issue #935592 + . + Backported from 7.33. +Index: drupal7/modules/user/user.module +=================================================================== +--- drupal7.orig/modules/user/user.module ++++ drupal7/modules/user/user.module +@@ -501,12 +501,17 @@ function user_save($account, $edit = arr + file_usage_delete($account->original->picture, 'user', 'user', $account->uid); + file_delete($account->original->picture); + } ++ // Save the picture object, if it is set. drupal_write_record() expects ++ // $account->picture to be a FID. ++ $picture = empty($account->picture) ? NULL : $account->picture; + $account->picture = empty($account->picture->fid) ? 0 : $account->picture->fid; + + // Do not allow 'uid' to be changed. + $account->uid = $account->original->uid; + // Save changes to the user table. + $success = drupal_write_record('users', $account, 'uid'); ++ // Restore the picture object. ++ $account->picture = $picture; + if ($success === FALSE) { + // The query failed - better to abort the save than risk further + // data loss. +Index: drupal7/modules/user/user.test +=================================================================== +--- drupal7.orig/modules/user/user.test ++++ drupal7/modules/user/user.test +@@ -1127,6 +1127,17 @@ class UserPictureTestCase extends Drupal + + $pic_path2 = $this->saveUserPicture($image); + $this->assertNotEqual($pic_path, $pic_path2, 'Filename of second picture is different.'); ++ ++ // Check if user picture has a valid file ID after saving the user. ++ $account = user_load($this->user->uid, TRUE); ++ $this->assertTrue(is_object($account->picture), 'User picture object is valid after user load.'); ++ $this->assertNotNull($account->picture->fid, 'User picture object has a FID after user load.'); ++ $this->assertTrue(is_file($account->picture->uri), 'File is located in proper directory after user load.'); ++ user_save($account); ++ // Verify that the user save does not destroy the user picture object. ++ $this->assertTrue(is_object($account->picture), 'User picture object is valid after user save.'); ++ $this->assertNotNull($account->picture->fid, 'User picture object has a FID after user save.'); ++ $this->assertTrue(is_file($account->picture->uri), 'File is located in proper directory after user save.'); + } + } + diff -Nru drupal7-7.32/debian/patches/fix_bootstrap_phase drupal7-7.32/debian/patches/fix_bootstrap_phase --- drupal7-7.32/debian/patches/fix_bootstrap_phase 1969-12-31 18:00:00.000000000 -0600 +++ drupal7-7.32/debian/patches/fix_bootstrap_phase 2014-11-21 13:28:18.000000000 -0600 @@ -0,0 +1,65 @@ +Origin: vendor +Forwarded: not-needed +From: Gunnar Wolf <gw...@debian.org> +Last-Update: 2014-11-21 +Description: Fixes Drupal issue #667098 + Fixed a bug which caused drupal_get_bootstrap_phase() to abort the bootstrap + when called early in the page request. + . + Backported from 7.33. + +Index: drupal7/includes/bootstrap.inc +=================================================================== +--- drupal7.orig/includes/bootstrap.inc ++++ drupal7/includes/bootstrap.inc +@@ -2176,7 +2176,7 @@ function drupal_anonymous_user() { + * drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL); + * @endcode + * +- * @param $phase ++ * @param int $phase + * A constant telling which phase to bootstrap to. When you bootstrap to a + * particular phase, all earlier phases are run automatically. Possible + * values: +@@ -2189,11 +2189,11 @@ function drupal_anonymous_user() { + * - DRUPAL_BOOTSTRAP_LANGUAGE: Finds out the language of the page. + * - DRUPAL_BOOTSTRAP_FULL: Fully loads Drupal. Validates and fixes input + * data. +- * @param $new_phase ++ * @param boolean $new_phase + * A boolean, set to FALSE if calling drupal_bootstrap from inside a + * function called from drupal_bootstrap (recursion). + * +- * @return ++ * @return int + * The most recently completed phase. + */ + function drupal_bootstrap($phase = NULL, $new_phase = TRUE) { +@@ -2215,12 +2215,13 @@ function drupal_bootstrap($phase = NULL, + // bootstrap state. + static $stored_phase = -1; + +- // When not recursing, store the phase name so it's not forgotten while +- // recursing. +- if ($new_phase) { +- $final_phase = $phase; +- } + if (isset($phase)) { ++ // When not recursing, store the phase name so it's not forgotten while ++ // recursing but take care of not going backwards. ++ if ($new_phase && $phase >= $stored_phase) { ++ $final_phase = $phase; ++ } ++ + // Call a phase if it has not been called before and is below the requested + // phase. + while ($phases && $phase > $stored_phase && $final_phase > $stored_phase) { +@@ -2508,7 +2509,7 @@ function _drupal_bootstrap_page_header() + * @see drupal_bootstrap() + */ + function drupal_get_bootstrap_phase() { +- return drupal_bootstrap(); ++ return drupal_bootstrap(NULL, FALSE); + } + + /** diff -Nru drupal7-7.32/debian/patches/fix_field_has_data_return drupal7-7.32/debian/patches/fix_field_has_data_return --- drupal7-7.32/debian/patches/fix_field_has_data_return 1969-12-31 18:00:00.000000000 -0600 +++ drupal7-7.32/debian/patches/fix_field_has_data_return 2014-11-21 13:28:18.000000000 -0600 @@ -0,0 +1,108 @@ +Origin: vendor +Forwarded: not-needed +From: Gunnar Wolf <gw...@debian.org> +Last-Update: 2014-11-21 +Description: Avoid data loss on entities with revisions due to wrong return code + Fixed a bug in which field_has_data() did not return TRUE for fields that + only had data in older entity revisions, leading to loss of the field's data + when the field configuration was edited. + . + Fixes Drupal issue #2278583 + . + Backported from 7.33. +Index: drupal7/modules/field/field.module +=================================================================== +--- drupal7.orig/modules/field/field.module ++++ drupal7/modules/field/field.module +@@ -947,14 +947,17 @@ function field_get_items($entity_type, $ + */ + function field_has_data($field) { + $query = new EntityFieldQuery(); +- return (bool) $query +- ->fieldCondition($field) ++ $query = $query->fieldCondition($field) + ->range(0, 1) + ->count() + // Neutralize the 'entity_field_access' query tag added by + // field_sql_storage_field_storage_query(). The result cannot depend on the + // access grants of the current user. +- ->addTag('DANGEROUS_ACCESS_CHECK_OPT_OUT') ++ ->addTag('DANGEROUS_ACCESS_CHECK_OPT_OUT'); ++ ++ return (bool) $query ++ ->execute() || (bool) $query ++ ->age(FIELD_LOAD_REVISION) + ->execute(); + } + +Index: drupal7/modules/field/tests/field.test +=================================================================== +--- drupal7.orig/modules/field/tests/field.test ++++ drupal7/modules/field/tests/field.test +@@ -485,6 +485,66 @@ class FieldAttachStorageTestCase extends + } + + /** ++ * Test field_has_data(). ++ */ ++ function testFieldHasData() { ++ $entity_type = 'test_entity'; ++ $langcode = LANGUAGE_NONE; ++ ++ $field_name = 'field_1'; ++ $field = array('field_name' => $field_name, 'type' => 'test_field'); ++ $field = field_create_field($field); ++ ++ $this->assertFalse(field_has_data($field), "No data should be detected."); ++ ++ $instance = array( ++ 'field_name' => $field_name, ++ 'entity_type' => 'test_entity', ++ 'bundle' => 'test_bundle' ++ ); ++ $instance = field_create_instance($instance); ++ $table = _field_sql_storage_tablename($field); ++ $revision_table = _field_sql_storage_revision_tablename($field); ++ ++ $columns = array('entity_type', 'entity_id', 'revision_id', 'delta', 'language', $field_name . '_value'); ++ ++ $eid = 0; ++ ++ // Insert values into the field revision table. ++ $query = db_insert($revision_table)->fields($columns); ++ $query->values(array($entity_type, $eid, 0, 0, $langcode, 1)); ++ $query->execute(); ++ ++ $this->assertTrue(field_has_data($field), "Revision data only should be detected."); ++ ++ $field_name = 'field_2'; ++ $field = array('field_name' => $field_name, 'type' => 'test_field'); ++ $field = field_create_field($field); ++ ++ $this->assertFalse(field_has_data($field), "No data should be detected."); ++ ++ $instance = array( ++ 'field_name' => $field_name, ++ 'entity_type' => 'test_entity', ++ 'bundle' => 'test_bundle' ++ ); ++ $instance = field_create_instance($instance); ++ $table = _field_sql_storage_tablename($field); ++ $revision_table = _field_sql_storage_revision_tablename($field); ++ ++ $columns = array('entity_type', 'entity_id', 'revision_id', 'delta', 'language', $field_name . '_value'); ++ ++ $eid = 1; ++ ++ // Insert values into the field table. ++ $query = db_insert($table)->fields($columns); ++ $query->values(array($entity_type, $eid, 0, 0, $langcode, 1)); ++ $query->execute(); ++ ++ $this->assertTrue(field_has_data($field), "Values only in field table should be detected."); ++ } ++ ++ /** + * Test field_attach_delete(). + */ + function testFieldAttachDelete() { diff -Nru drupal7-7.32/debian/patches/SA-CORE-2014-006 drupal7-7.32/debian/patches/SA-CORE-2014-006 --- drupal7-7.32/debian/patches/SA-CORE-2014-006 1969-12-31 18:00:00.000000000 -0600 +++ drupal7-7.32/debian/patches/SA-CORE-2014-006 2014-11-21 13:28:18.000000000 -0600 @@ -0,0 +1,79 @@ +Origin: vendor +Forwarded: not-needed +From: Gunnar Wolf <gw...@debian.org> +Last-Update: 2014-11-21 +Description: Fixes SA-CORE-2014-006 (Session hijacking, Denial of service) + Backporting the diff between versions 7.33 and 7.34, applying it to + the currently frozen version (7.32). For further details, the + advisory is in: + . + http://drupal.org/SA-CORE-2014-006 + This fix coves CVE-2014-9015 and CVE-2014-9016. + +Index: drupal7/includes/password.inc +=================================================================== +--- drupal7.orig/includes/password.inc ++++ drupal7/includes/password.inc +@@ -140,7 +140,7 @@ function _password_enforce_log2_boundari + * @param $algo + * The string name of a hashing algorithm usable by hash(), like 'sha256'. + * @param $password +- * The plain-text password to hash. ++ * Plain-text password up to 512 bytes (128 to 512 UTF-8 characters) to hash. + * @param $setting + * An existing hash or the output of _password_generate_salt(). Must be + * at least 12 characters (the settings and salt). +@@ -150,6 +150,10 @@ function _password_enforce_log2_boundari + * The return string will be truncated at DRUPAL_HASH_LENGTH characters max. + */ + function _password_crypt($algo, $password, $setting) { ++ // Prevent DoS attacks by refusing to hash large passwords. ++ if (strlen($password) > 512) { ++ return FALSE; ++ } + // The first 12 characters of an existing hash are its setting string. + $setting = substr($setting, 0, 12); + +Index: drupal7/includes/session.inc +=================================================================== +--- drupal7.orig/includes/session.inc ++++ drupal7/includes/session.inc +@@ -79,7 +79,7 @@ function _drupal_session_read($sid) { + // Handle the case of first time visitors and clients that don't store + // cookies (eg. web crawlers). + $insecure_session_name = substr(session_name(), 1); +- if (!isset($_COOKIE[session_name()]) && !isset($_COOKIE[$insecure_session_name])) { ++ if (empty($sid) || (!isset($_COOKIE[session_name()]) && !isset($_COOKIE[$insecure_session_name]))) { + $user = drupal_anonymous_user(); + return ''; + } +Index: drupal7/modules/simpletest/tests/password.test +=================================================================== +--- drupal7.orig/modules/simpletest/tests/password.test ++++ drupal7/modules/simpletest/tests/password.test +@@ -57,4 +57,25 @@ class PasswordHashingTest extends Drupal + $this->assertFalse(user_needs_new_hash($account), 'Re-hashed password does not need a new hash.'); + $this->assertTrue(user_check_password($password, $account), 'Password check succeeds with re-hashed password.'); + } ++ ++ /** ++ * Verifies that passwords longer than 512 bytes are not hashed. ++ */ ++ public function testLongPassword() { ++ $password = str_repeat('x', 512); ++ $result = user_hash_password($password); ++ $this->assertFalse(empty($result), '512 byte long password is allowed.'); ++ $password = str_repeat('x', 513); ++ $result = user_hash_password($password); ++ $this->assertFalse($result, '513 byte long password is not allowed.'); ++ // Check a string of 3-byte UTF-8 characters. ++ $password = str_repeat('€', 170); ++ $result = user_hash_password($password); ++ $this->assertFalse(empty($result), '510 byte long password is allowed.'); ++ $password .= 'xx'; ++ $this->assertFalse(empty($result), '512 byte long password is allowed.'); ++ $password = str_repeat('€', 171); ++ $result = user_hash_password($password); ++ $this->assertFalse($result, '513 byte long password is not allowed.'); ++ } + } diff -Nru drupal7-7.32/debian/patches/series drupal7-7.32/debian/patches/series --- drupal7-7.32/debian/patches/series 2014-10-15 11:34:54.000000000 -0500 +++ drupal7-7.32/debian/patches/series 2014-11-21 13:28:18.000000000 -0600 @@ -1,2 +1,9 @@ cronjob.patch debian_security_warning +SA-CORE-2014-006 +fix_bootstrap_phase +unicode_for_php_5.6 +db_sanitize_orderby +ajax_throbber_align +fix_field_has_data_return +dont_lose_user_pictures diff -Nru drupal7-7.32/debian/patches/unicode_for_php_5.6 drupal7-7.32/debian/patches/unicode_for_php_5.6 --- drupal7-7.32/debian/patches/unicode_for_php_5.6 1969-12-31 18:00:00.000000000 -0600 +++ drupal7-7.32/debian/patches/unicode_for_php_5.6 2014-11-21 13:28:18.000000000 -0600 @@ -0,0 +1,34 @@ +Origin: vendor +Forwarded: not-needed +From: Gunnar Wolf <gw...@debian.org> +Last-Update: 2014-11-21 +Description: Fixes Drupal issue #2332295 + Fixed a bug in the Unicode requirements check which prevented installing Drupal on PHP 5.6. + . + Backported from 7.33. + +Index: drupal7/includes/unicode.inc +=================================================================== +--- drupal7.orig/includes/unicode.inc ++++ drupal7/includes/unicode.inc +@@ -116,11 +116,15 @@ function _unicode_check() { + if (ini_get('mbstring.encoding_translation') != 0) { + return array(UNICODE_ERROR, $t('Multibyte string input conversion in PHP is active and must be disabled. Check the php.ini <em>mbstring.encoding_translation</em> setting. Please refer to the <a href="@url">PHP mbstring documentation</a> for more information.', array('@url' => 'http://www.php.net/mbstring'))); + } +- if (ini_get('mbstring.http_input') != 'pass') { +- return array(UNICODE_ERROR, $t('Multibyte string input conversion in PHP is active and must be disabled. Check the php.ini <em>mbstring.http_input</em> setting. Please refer to the <a href="@url">PHP mbstring documentation</a> for more information.', array('@url' => 'http://www.php.net/mbstring'))); +- } +- if (ini_get('mbstring.http_output') != 'pass') { +- return array(UNICODE_ERROR, $t('Multibyte string output conversion in PHP is active and must be disabled. Check the php.ini <em>mbstring.http_output</em> setting. Please refer to the <a href="@url">PHP mbstring documentation</a> for more information.', array('@url' => 'http://www.php.net/mbstring'))); ++ // mbstring.http_input and mbstring.http_output are deprecated and empty by ++ // default in PHP 5.6. ++ if (version_compare(PHP_VERSION, '5.6.0') == -1) { ++ if (ini_get('mbstring.http_input') != 'pass') { ++ return array(UNICODE_ERROR, $t('Multibyte string input conversion in PHP is active and must be disabled. Check the php.ini <em>mbstring.http_input</em> setting. Please refer to the <a href="@url">PHP mbstring documentation</a> for more information.', array('@url' => 'http://www.php.net/mbstring'))); ++ } ++ if (ini_get('mbstring.http_output') != 'pass') { ++ return array(UNICODE_ERROR, $t('Multibyte string output conversion in PHP is active and must be disabled. Check the php.ini <em>mbstring.http_output</em> setting. Please refer to the <a href="@url">PHP mbstring documentation</a> for more information.', array('@url' => 'http://www.php.net/mbstring'))); ++ } + } + + // Set appropriate configuration