diff --git a/plugins/FeedsParser.inc b/plugins/FeedsParser.inc index 81545d75d190071bb058fcec93183de7999ece97..73c7318f08d5b679353f041c41be4bd0f3687193 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 2cb5acd8fbe24a1576f6891b441a19f9d032a252..6138be0e5bf56f6c7ab9e18d0b21b13c5fbe34ac 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'); } /**