diff options
author | Tim Starling <tstarling@wikimedia.org> | 2019-07-26 15:07:41 +1000 |
---|---|---|
committer | Tim Starling <tstarling@wikimedia.org> | 2019-07-26 16:15:30 +1000 |
commit | 51e837f68f6df7fdc6cb35803e497bfc0532c861 (patch) | |
tree | 775319bf2fd5d089e4ae24653fb6c39858703bed /includes/api/ApiUpload.php | |
parent | 4320a90bd508f010b430dcd7c038964be4d7d28c (diff) | |
download | mediawikicore-51e837f68f6df7fdc6cb35803e497bfc0532c861.tar.gz mediawikicore-51e837f68f6df7fdc6cb35803e497bfc0532c861.zip |
Don't try to store File objects to the upload session
File objects can contain closures which can't be serialized.
Instead, add makeWarningsSerializable(), which converts the warnings
to a serializable array. Make ApiUpload::transformWarnings() act on this
serializable array instead. For consistency, ApiUpload::getApiWarnings()
also needs to convert the result of checkWarnings() before transforming
it.
Bug: T228749
Change-Id: I8236aaf3683f93a03a5505803f4638e022cf6d85
Diffstat (limited to 'includes/api/ApiUpload.php')
-rw-r--r-- | includes/api/ApiUpload.php | 14 |
1 files changed, 5 insertions, 9 deletions
diff --git a/includes/api/ApiUpload.php b/includes/api/ApiUpload.php index fc41e4ea6a7e..b15b9989a00a 100644 --- a/includes/api/ApiUpload.php +++ b/includes/api/ApiUpload.php @@ -658,7 +658,7 @@ class ApiUpload extends ApiBase { * @return array */ protected function getApiWarnings() { - $warnings = $this->mUpload->checkWarnings(); + $warnings = UploadBase::makeWarningsSerializable( $this->mUpload->checkWarnings() ); return $this->transformWarnings( $warnings ); } @@ -670,9 +670,8 @@ class ApiUpload extends ApiBase { if ( isset( $warnings['duplicate'] ) ) { $dupes = []; - /** @var File $dupe */ foreach ( $warnings['duplicate'] as $dupe ) { - $dupes[] = $dupe->getName(); + $dupes[] = $dupe['fileName']; } ApiResult::setIndexedTagName( $dupes, 'duplicate' ); $warnings['duplicate'] = $dupes; @@ -681,27 +680,24 @@ class ApiUpload extends ApiBase { if ( isset( $warnings['exists'] ) ) { $warning = $warnings['exists']; unset( $warnings['exists'] ); - /** @var LocalFile $localFile */ $localFile = $warning['normalizedFile'] ?? $warning['file']; - $warnings[$warning['warning']] = $localFile->getName(); + $warnings[$warning['warning']] = $localFile['fileName']; } if ( isset( $warnings['no-change'] ) ) { - /** @var File $file */ $file = $warnings['no-change']; unset( $warnings['no-change'] ); $warnings['nochange'] = [ - 'timestamp' => wfTimestamp( TS_ISO_8601, $file->getTimestamp() ) + 'timestamp' => wfTimestamp( TS_ISO_8601, $file['timestamp'] ) ]; } if ( isset( $warnings['duplicate-version'] ) ) { $dupes = []; - /** @var File $dupe */ foreach ( $warnings['duplicate-version'] as $dupe ) { $dupes[] = [ - 'timestamp' => wfTimestamp( TS_ISO_8601, $dupe->getTimestamp() ) + 'timestamp' => wfTimestamp( TS_ISO_8601, $dupe['timestamp'] ) ]; } unset( $warnings['duplicate-version'] ); |