]> git.immae.eu Git - github/wallabag/wallabag.git/commitdiff
Replace images with &
authorJeremy Benoist <jeremy.benoist@gmail.com>
Thu, 1 Jun 2017 20:50:33 +0000 (22:50 +0200)
committerJeremy Benoist <jeremy.benoist@gmail.com>
Thu, 1 Jun 2017 20:50:33 +0000 (22:50 +0200)
Images with `&` in the path weren’t well replaced because they might be with `&amp;` in the html instead.

Replacing `&` with `&amp;` fix the problem.

src/Wallabag/CoreBundle/Helper/DownloadImages.php
tests/Wallabag/CoreBundle/Helper/DownloadImagesTest.php

index 0d330d2a315c5f01d9d1d11022cde49c7f29ae86..f7c26a38b43cd36328032b5e4fe30c7926bcd831 100644 (file)
@@ -66,6 +66,12 @@ class DownloadImages
                 continue;
             }
 
+            // if image contains "&"" and we can't find it in the html
+            // it might be because it's encoded as &amp;
+            if (false !== stripos($image, '&') && false === stripos($html, $image)) {
+                $image = str_replace('&', '&amp;', $image);
+            }
+
             $html = str_replace($image, $imagePath, $html);
         }
 
@@ -114,7 +120,7 @@ class DownloadImages
         $ext = $this->mimeGuesser->guess($res->getHeader('content-type'));
         $this->logger->debug('DownloadImages: Checking extension', ['ext' => $ext, 'header' => $res->getHeader('content-type')]);
         if (!in_array($ext, ['jpeg', 'jpg', 'gif', 'png'], true)) {
-            $this->logger->error('DownloadImages: Processed image with not allowed extension. Skipping '.$imagePath);
+            $this->logger->error('DownloadImages: Processed image with not allowed extension. Skipping: '.$imagePath);
 
             return false;
         }
index 85f12d87b27277f7f8a543fc0d947798d35c82ce..9125f8dcb2da20fbeb0ebd61a67efbdba11f00dc 100644 (file)
@@ -12,7 +12,24 @@ use GuzzleHttp\Stream\Stream;
 
 class DownloadImagesTest extends \PHPUnit_Framework_TestCase
 {
-    public function testProcessHtml()
+    public function dataForSuccessImage()
+    {
+        return [
+            'imgur' => [
+                '<div><img src="http://i.imgur.com/T9qgcHc.jpg" /></div>',
+                'http://imgur.com/gallery/WxtWY',
+            ],
+            'image with &' => [
+                '<div><img src="https://i2.wp.com/www.tvaddons.ag/wp-content/uploads/2017/01/Screen-Shot-2017-01-07-at-10.17.40-PM.jpg?w=640&amp;ssl=1" /></div>',
+                'https://www.tvaddons.ag/realdebrid-kodi-jarvis/',
+            ],
+        ];
+    }
+
+    /**
+     * @dataProvider dataForSuccessImage
+     */
+    public function testProcessHtml($html, $url)
     {
         $client = new Client();
 
@@ -27,9 +44,10 @@ class DownloadImagesTest extends \PHPUnit_Framework_TestCase
 
         $download = new DownloadImages($client, sys_get_temp_dir().'/wallabag_test', 'http://wallabag.io/', $logger);
 
-        $res = $download->processHtml(123, '<div><img src="http://i.imgur.com/T9qgcHc.jpg" /></div>', 'http://imgur.com/gallery/WxtWY');
+        $res = $download->processHtml(123, $html, $url);
 
-        $this->assertContains('http://wallabag.io/assets/images/9/b/9b0ead26/c638b4c2.png', $res);
+        // this the base path of all image (since it's calculated using the entry id: 123)
+        $this->assertContains('http://wallabag.io/assets/images/9/b/9b0ead26/', $res);
     }
 
     public function testProcessHtmlWithBadImage()