@@ -105,7 +105,7 @@ private function fetchReference(Reference $reference): void {
105105 }
106106 $ linkContentLength = $ headResponse ->getHeader ('Content-Length ' );
107107 if (is_numeric ($ linkContentLength ) && (int ) $ linkContentLength > 5 * 1024 * 1024 ) {
108- $ this ->logger ->debug ('Skip resolving links pointing to content length > 5 MB ' );
108+ $ this ->logger ->debug ('[Head] Skip resolving links pointing to content length > 5 MiB ' );
109109 return ;
110110 }
111111 $ linkContentType = $ headResponse ->getHeader ('Content-Type ' );
@@ -118,18 +118,28 @@ private function fetchReference(Reference $reference): void {
118118 return ;
119119 }
120120 try {
121- $ response = $ client ->get ($ reference ->getId (), [ 'timeout ' => 10 ]);
121+ $ response = $ client ->get ($ reference ->getId (), [ 'timeout ' => 10 , ' stream ' => true ]);
122122 } catch (\Exception $ e ) {
123123 $ this ->logger ->debug ('Failed to fetch link for obtaining open graph data ' , ['exception ' => $ e ]);
124124 return ;
125125 }
126126
127- $ responseBody = (string )$ response ->getBody ();
127+ $ body = $ response ->getBody ();
128+ if (is_resource ($ body )) {
129+ $ responseContent = fread ($ body , 5 * 1024 * 1024 );
130+ if (!feof ($ body )) {
131+ $ this ->logger ->debug ('[Get] Skip resolving links pointing to content length > 5 MiB ' );
132+ return ;
133+ }
134+ } else {
135+ $ this ->logger ->error ('[Get] Impossible to check content length ' );
136+ return ;
137+ }
128138
129139 // OpenGraph handling
130140 $ consumer = new Consumer ();
131141 $ consumer ->useFallbackMode = true ;
132- $ object = $ consumer ->loadHtml ($ responseBody );
142+ $ object = $ consumer ->loadHtml ($ responseContent );
133143
134144 $ reference ->setUrl ($ reference ->getId ());
135145
0 commit comments