ForeignResourceManager: Catch responses other than 200 OK
authorTimo Tijhof <krinklemail@gmail.com>
Thu, 21 Feb 2019 23:44:56 +0000 (23:44 +0000)
committerKrinkle <krinklemail@gmail.com>
Thu, 21 Feb 2019 23:47:40 +0000 (23:47 +0000)
Makes it easier to catch issues like at I839301d05877eb63279c.

Change-Id: I22b9af7bf36a256d8363ed96fe42c087e0c8a895

includes/ForeignResourceManager.php

index d6175f6..18014fa 100644 (file)
@@ -132,10 +132,14 @@ class ForeignResourceManager {
        }
 
        private function fetch( $src, $integrity ) {
-               $data = Http::get( $src, [ 'followRedirects' => false ] );
-               if ( $data === false ) {
+               $req = MWHttpRequest::factory( $src, [ 'method' => 'GET', 'followRedirects' => false ] );
+               if ( !$req->execute()->isOK() ) {
                        throw new Exception( "Failed to download resource at {$src}" );
                }
+               if ( $req->getStatus() !== 200 ) {
+                       throw new Exception( "Unexpected HTTP {$req->getStatus()} response from {$src}" );
+               }
+               $data = $req->getContent();
                $algo = $integrity === null ? $this->defaultAlgo : explode( '-', $integrity )[0];
                $actualIntegrity = $algo . '-' . base64_encode( hash( $algo, $data, true ) );
                if ( $integrity === $actualIntegrity ) {