From: Brad Jorsch Date: Thu, 28 Jan 2016 18:46:22 +0000 (-0500) Subject: User: Fix loading of user_token X-Git-Tag: 1.31.0-rc.0~8170^2 X-Git-Url: http://git.cyclocoop.org/%7B%24www_url%7Dadmin/compta/categories/modifier.php?a=commitdiff_plain;h=76d790623cc09dfbf51cbf45877f5f81af773303;p=lhc%2Fweb%2Fwiklou.git User: Fix loading of user_token Similar to T124414, we should always load user_token from the row even if user_email is unset. Also, I notice that maintenance/tables.sql defines the column as "binary(32)", which is going to append ASCII NUL bytes to the default empty-string. And before that it was "char(32)", which will append spaces. So trim both of those off when reading the field so the following check for === '' actually works. The latter doesn't seem to affect *most* WMF wikis, since they have the column defined as "varbinary(32)" for some reason. But there are a few with "binary(32)", I have no idea why. Change-Id: I50a813bb530639275628d9560c79a773676aa36d --- diff --git a/includes/user/User.php b/includes/user/User.php index a2681170ce..7c2924240c 100644 --- a/includes/user/User.php +++ b/includes/user/User.php @@ -1261,12 +1261,20 @@ class User implements IDBAccessObject { $all = false; } - if ( isset( $row->user_email ) ) { - $this->mEmail = $row->user_email; - $this->mToken = $row->user_token; - if ( $this->mToken == '' ) { + if ( isset( $row->user_token ) ) { + // The definition for the column is binary(32), so trim the NULs + // that appends. The previous definition was char(32), so trim + // spaces too. + $this->mToken = rtrim( $row->user_token, " \0" ); + if ( $this->mToken === '' ) { $this->mToken = null; } + } else { + $all = false; + } + + if ( isset( $row->user_email ) ) { + $this->mEmail = $row->user_email; $this->mEmailAuthenticated = wfTimestampOrNull( TS_MW, $row->user_email_authenticated ); $this->mEmailToken = $row->user_email_token; $this->mEmailTokenExpires = wfTimestampOrNull( TS_MW, $row->user_email_token_expires );