From 1b14a06038045cdd46f5d89635ae888ab14a56f8 Mon Sep 17 00:00:00 2001
From: twistor <twistor@473738.no-reply.drupal.org>
Date: Tue, 30 Jun 2015 13:17:37 -0700
Subject: [PATCH] Issue #2510788 by twistor: Remove query string from path in
 FeedsEnclosure.

---
 plugins/FeedsParser.inc      | 10 +++++++---
 tests/feeds_mapper_file.test |  8 ++++++++
 2 files changed, 15 insertions(+), 3 deletions(-)

diff --git a/plugins/FeedsParser.inc b/plugins/FeedsParser.inc
index 81545d75..73c7318f 100644
--- a/plugins/FeedsParser.inc
+++ b/plugins/FeedsParser.inc
@@ -315,7 +315,7 @@ class FeedsEnclosure extends FeedsElement {
    */
   public function setAllowedExtensions($extensions) {
     // Normalize whitespace so that empty extensions are not allowed.
-    $this->allowedExtensions = trim(preg_replace('/\s+/', ' ', $extensions));
+    $this->allowedExtensions = drupal_strtolower(trim(preg_replace('/\s+/', ' ', $extensions)));
   }
 
   /**
@@ -371,7 +371,11 @@ class FeedsEnclosure extends FeedsElement {
       return $this->safeFilename;
     }
 
-    $filename = rawurldecode(drupal_basename($this->getValue()));
+    // Strip any query string or fragment from file name.
+    list($filename) = explode('?', $this->getValue());
+    list($filename) = explode('#', $filename);
+
+    $filename = rawurldecode(drupal_basename($filename));
 
     if (module_exists('transliteration')) {
       require_once drupal_get_path('module', 'transliteration') . '/transliteration.inc';
@@ -385,7 +389,7 @@ class FeedsEnclosure extends FeedsElement {
       $extension = FALSE;
     }
     else {
-      $extension = substr($filename, strrpos($filename, '.') + 1);
+      $extension = drupal_strtolower(substr($filename, strrpos($filename, '.') + 1));
     }
 
     if (!$extension || !in_array($extension, explode(' ', $this->allowedExtensions), TRUE)) {
diff --git a/tests/feeds_mapper_file.test b/tests/feeds_mapper_file.test
index 2cb5acd8..6138be0e 100644
--- a/tests/feeds_mapper_file.test
+++ b/tests/feeds_mapper_file.test
@@ -267,6 +267,14 @@ class FeedsMapperFileTestCase extends FeedsMapperTestCase {
       $message = t('The file @file has an invalid extension.', array('@file' => $filename));
       $this->assertTrue(db_query("SELECT 1 FROM {watchdog} WHERE message = :message", array(':message' => $message))->fetchField());
     }
+
+    // Test that query string and fragments are removed.
+    $enclosure = new FeedsEnclosure('http://example.com/image.jpg?thing=stuff', 'text/plain');
+    $this->assertEqual($enclosure->getLocalValue(), 'image.jpg');
+    $enclosure = new FeedsEnclosure('http://example.com/image.jpg#stuff', 'text/plain');
+    $this->assertEqual($enclosure->getLocalValue(), 'image.jpg');
+    $enclosure = new FeedsEnclosure('http://example.com/image.JPG?thing=stuff#stuff', 'text/plain');
+    $this->assertEqual($enclosure->getLocalValue(), 'image.JPG');
   }
 
   /**
-- 
GitLab