From: Aaron Date: Fri, 4 May 2012 22:23:57 +0000 (-0700) Subject: [FileBackend] Added copy() sanity checks to FSFileBackend. X-Git-Tag: 1.31.0-rc.0~23732^2 X-Git-Url: https://git.cyclocoop.org/%7B%24www_url%7Dadmin/compta/banques/ajouter.php?a=commitdiff_plain;h=a8076245aab9ed81a67d73fcd8f2504f5b514e90;p=lhc%2Fweb%2Fwiklou.git [FileBackend] Added copy() sanity checks to FSFileBackend. Change-Id: I3c7db46d74f744fbe877222639e78ea7318f8507 --- diff --git a/includes/filerepo/backend/FSFileBackend.php b/includes/filerepo/backend/FSFileBackend.php index 9839fa1b9b..23077b7e7a 100644 --- a/includes/filerepo/backend/FSFileBackend.php +++ b/includes/filerepo/backend/FSFileBackend.php @@ -175,7 +175,12 @@ class FSFileBackend extends FileBackendStore { } $ok = copy( $params['src'], $dest ); - if ( !$ok ) { + // In some cases (at least over NFS), copy() returns true when it fails. + if ( !$ok || ( filesize( $params['src'] ) !== filesize( $dest ) ) ) { + if ( $ok ) { // PHP bug + unlink( $dest ); // remove broken file + trigger_error( __METHOD__ . ": copy() failed but returned true." ); + } $status->fatal( 'backend-fail-store', $params['src'], $params['dst'] ); return $status; } @@ -218,7 +223,12 @@ class FSFileBackend extends FileBackendStore { } $ok = copy( $source, $dest ); - if ( !$ok ) { + // In some cases (at least over NFS), copy() returns true when it fails. + if ( !$ok || ( filesize( $source ) !== filesize( $dest ) ) ) { + if ( $ok ) { // PHP bug + unlink( $dest ); // remove broken file + trigger_error( __METHOD__ . ": copy() failed but returned true." ); + } $status->fatal( 'backend-fail-copy', $params['src'], $params['dst'] ); return $status; }