From 6c6871f607eee72614ec2bf1524011374989dbe7 Mon Sep 17 00:00:00 2001 From: Flavio Copes Date: Sun, 20 Dec 2015 14:18:56 +0100 Subject: [PATCH 1/5] Proposed fix for #541 After reading http://stackoverflow.com/a/6998242 rawurldecode (and rawurlencode) is better over urldecode/urlencode: "rawurlencode is the way to go most of the time. It deals with the modern scheme for URI components, where as urlencode does things the old school way, where + meant "space." --- system/src/Grav/Common/Grav.php | 2 +- system/src/Grav/Common/Markdown/ParsedownGravTrait.php | 6 +++--- system/src/Grav/Common/Page/Medium/Medium.php | 2 +- system/src/Grav/Common/Uri.php | 10 +++++----- 4 files changed, 10 insertions(+), 10 deletions(-) diff --git a/system/src/Grav/Common/Grav.php b/system/src/Grav/Common/Grav.php index bb987f751..33b46acef 100644 --- a/system/src/Grav/Common/Grav.php +++ b/system/src/Grav/Common/Grav.php @@ -484,7 +484,7 @@ class Grav extends Container if ($page) { $media = $page->media()->all(); - $parsed_url = parse_url(urldecode($uri->basename())); + $parsed_url = parse_url(rawurldecode($uri->basename())); $media_file = $parsed_url['path']; diff --git a/system/src/Grav/Common/Markdown/ParsedownGravTrait.php b/system/src/Grav/Common/Markdown/ParsedownGravTrait.php index 460cf7490..d24635322 100644 --- a/system/src/Grav/Common/Markdown/ParsedownGravTrait.php +++ b/system/src/Grav/Common/Markdown/ParsedownGravTrait.php @@ -194,7 +194,7 @@ trait ParsedownGravTrait // get the local path to page media if possible if ($path_parts['dirname'] == $this->page->url(false, false, false)) { - $url['path'] = urldecode($path_parts['basename']); + $url['path'] = rawurldecode($path_parts['basename']); // get the media objects for this page $media = $this->page->media(); } else { @@ -204,7 +204,7 @@ trait ParsedownGravTrait $ext_page = $this->pages->dispatch($page_route, true); if ($ext_page) { $media = $ext_page->media(); - $url['path'] = urldecode($path_parts['basename']); + $url['path'] = rawurldecode($path_parts['basename']); } } @@ -226,7 +226,7 @@ trait ParsedownGravTrait // loop through actions for the image and call them foreach ($actions as $action) { - $medium = call_user_func_array(array($medium, $action['method']), explode(',', urldecode($action['params']))); + $medium = call_user_func_array(array($medium, $action['method']), explode(',', rawurldecode($action['params']))); } if (isset($url['fragment'])) { diff --git a/system/src/Grav/Common/Page/Medium/Medium.php b/system/src/Grav/Common/Page/Medium/Medium.php index 714eeb5e8..b1ba569a2 100644 --- a/system/src/Grav/Common/Page/Medium/Medium.php +++ b/system/src/Grav/Common/Page/Medium/Medium.php @@ -449,7 +449,7 @@ class Medium extends Data implements RenderableInterface { $qs = $method; if (count($args) > 1 || (count($args) == 1 && !empty($args[0]))) { - $qs .= '=' . implode(',', array_map(function ($a) { return urlencode($a); }, $args)); + $qs .= '=' . implode(',', array_map(function ($a) { return rawurlencode($a); }, $args)); } if (!empty($qs)) { diff --git a/system/src/Grav/Common/Uri.php b/system/src/Grav/Common/Uri.php index efe9d1efc..bde30115a 100644 --- a/system/src/Grav/Common/Uri.php +++ b/system/src/Grav/Common/Uri.php @@ -170,7 +170,7 @@ class Uri if (strpos($bit, $delimiter) !== false) { $param = explode($delimiter, $bit); if (count($param) == 2) { - $plain_var = filter_var(urldecode($param[1]), FILTER_SANITIZE_STRING); + $plain_var = filter_var(rawurldecode($param[1]), FILTER_SANITIZE_STRING); $this->params[$param[0]] = $plain_var; } } else { @@ -206,7 +206,7 @@ class Uri */ public function route($absolute = false, $domain = false) { - return urldecode(($absolute ? $this->rootUrl($domain) : '') . '/' . implode('/', $this->paths)); + return rawurldecode(($absolute ? $this->rootUrl($domain) : '') . '/' . implode('/', $this->paths)); } /** @@ -268,7 +268,7 @@ class Uri public function param($id) { if (isset($this->params[$id])) { - return urldecode($this->params[$id]); + return rawurldecode($this->params[$id]); } else { return false; } @@ -545,8 +545,8 @@ class Uri if (file_exists($full_path)) { // do nothing - } elseif (file_exists(urldecode($full_path))) { - $full_path = urldecode($full_path); + } elseif (file_exists(rawurldecode($full_path))) { + $full_path = rawurldecode($full_path); } else { return $normalized_url; } From 484a34cd92e2cbfb0122b9ed15227aaf14eaf7b0 Mon Sep 17 00:00:00 2001 From: Flavio Copes Date: Mon, 21 Dec 2015 13:55:29 +0100 Subject: [PATCH 2/5] Fix orientation for images added via twig --- system/src/Grav/Common/Page/Medium/ImageMedium.php | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/system/src/Grav/Common/Page/Medium/ImageMedium.php b/system/src/Grav/Common/Page/Medium/ImageMedium.php index 3db039643..6da85af45 100644 --- a/system/src/Grav/Common/Page/Medium/ImageMedium.php +++ b/system/src/Grav/Common/Page/Medium/ImageMedium.php @@ -41,7 +41,8 @@ class ImageMedium extends Medium public static $magic_actions = [ 'resize', 'forceResize', 'cropResize', 'crop', 'zoomCrop', 'negate', 'brightness', 'contrast', 'grayscale', 'emboss', - 'smooth', 'sharp', 'edge', 'colorize', 'sepia', 'enableProgressive' + 'smooth', 'sharp', 'edge', 'colorize', 'sepia', 'enableProgressive', + 'fixOrientation' ]; /** @@ -260,6 +261,7 @@ class ImageMedium extends Medium if ($this->image) { $this->image(); $this->image->clearOperations(); // Clear previously applied operations + $this->fixOrientation(); $this->filter(); } @@ -469,6 +471,7 @@ class ImageMedium extends Medium ->setPrettyName(basename($this->get('basename'))); $this->filter(); + $this->fixOrientation(); return $this; } From 4581077dcd08b613476b58f13316de8d7c54d555 Mon Sep 17 00:00:00 2001 From: Flavio Copes Date: Mon, 21 Dec 2015 19:10:19 +0100 Subject: [PATCH 3/5] Fix for images orientation in page content --- system/src/Grav/Common/Markdown/ParsedownGravTrait.php | 5 +++++ system/src/Grav/Common/Page/Medium/ImageMedium.php | 5 +---- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/system/src/Grav/Common/Markdown/ParsedownGravTrait.php b/system/src/Grav/Common/Markdown/ParsedownGravTrait.php index 460cf7490..21143636a 100644 --- a/system/src/Grav/Common/Markdown/ParsedownGravTrait.php +++ b/system/src/Grav/Common/Markdown/ParsedownGravTrait.php @@ -278,6 +278,8 @@ trait ParsedownGravTrait return $carry; }, []); + $actions['fixOrientation'] = true; + // valid attributes supported $valid_attributes = ['rel', 'target', 'id', 'class', 'classes']; @@ -301,6 +303,9 @@ trait ParsedownGravTrait } + $url['query']= http_build_query($actions, null, '&', PHP_QUERY_RFC3986); + } else { + $actions['fixOrientation'] = true; $url['query']= http_build_query($actions, null, '&', PHP_QUERY_RFC3986); } diff --git a/system/src/Grav/Common/Page/Medium/ImageMedium.php b/system/src/Grav/Common/Page/Medium/ImageMedium.php index 6da85af45..cc9e77717 100644 --- a/system/src/Grav/Common/Page/Medium/ImageMedium.php +++ b/system/src/Grav/Common/Page/Medium/ImageMedium.php @@ -41,8 +41,7 @@ class ImageMedium extends Medium public static $magic_actions = [ 'resize', 'forceResize', 'cropResize', 'crop', 'zoomCrop', 'negate', 'brightness', 'contrast', 'grayscale', 'emboss', - 'smooth', 'sharp', 'edge', 'colorize', 'sepia', 'enableProgressive', - 'fixOrientation' + 'smooth', 'sharp', 'edge', 'colorize', 'sepia', 'enableProgressive', 'fixOrientation' ]; /** @@ -261,7 +260,6 @@ class ImageMedium extends Medium if ($this->image) { $this->image(); $this->image->clearOperations(); // Clear previously applied operations - $this->fixOrientation(); $this->filter(); } @@ -471,7 +469,6 @@ class ImageMedium extends Medium ->setPrettyName(basename($this->get('basename'))); $this->filter(); - $this->fixOrientation(); return $this; } From b2c7e22634fcff63bbd9e2225b19de20d73ed01a Mon Sep 17 00:00:00 2001 From: Flavio Copes Date: Mon, 21 Dec 2015 19:18:51 +0100 Subject: [PATCH 4/5] Cleanup --- .../Grav/Common/Markdown/ParsedownGravTrait.php | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/system/src/Grav/Common/Markdown/ParsedownGravTrait.php b/system/src/Grav/Common/Markdown/ParsedownGravTrait.php index 21143636a..a51f20b52 100644 --- a/system/src/Grav/Common/Markdown/ParsedownGravTrait.php +++ b/system/src/Grav/Common/Markdown/ParsedownGravTrait.php @@ -267,7 +267,8 @@ trait ParsedownGravTrait // if this is a link if (isset($excerpt['element']['attributes']['href'])) { $url = parse_url(htmlspecialchars_decode($excerpt['element']['attributes']['href'])); - + $actions = []; + // if there is a query, then parse it and build action calls if (isset($url['query'])) { $actions = array_reduce(explode('&', $url['query']), function ($carry, $item) { @@ -278,8 +279,6 @@ trait ParsedownGravTrait return $carry; }, []); - $actions['fixOrientation'] = true; - // valid attributes supported $valid_attributes = ['rel', 'target', 'id', 'class', 'classes']; @@ -301,14 +300,11 @@ trait ParsedownGravTrait } } } - - - $url['query']= http_build_query($actions, null, '&', PHP_QUERY_RFC3986); - } else { - $actions['fixOrientation'] = true; - $url['query']= http_build_query($actions, null, '&', PHP_QUERY_RFC3986); } + $actions['fixOrientation'] = true; + $url['query']= http_build_query($actions, null, '&', PHP_QUERY_RFC3986); + // if no query elements left, unset query if (empty($url['query'])) { unset ($url['query']); From 7440074491250215284122185ab617b9826e8389 Mon Sep 17 00:00:00 2001 From: Andy Miller Date: Mon, 21 Dec 2015 21:46:36 -0700 Subject: [PATCH 5/5] Revert "Proposed fix for #541" This reverts commit 6c6871f607eee72614ec2bf1524011374989dbe7. --- system/src/Grav/Common/Grav.php | 2 +- system/src/Grav/Common/Markdown/ParsedownGravTrait.php | 6 +++--- system/src/Grav/Common/Page/Medium/Medium.php | 2 +- system/src/Grav/Common/Uri.php | 10 +++++----- 4 files changed, 10 insertions(+), 10 deletions(-) diff --git a/system/src/Grav/Common/Grav.php b/system/src/Grav/Common/Grav.php index 33b46acef..bb987f751 100644 --- a/system/src/Grav/Common/Grav.php +++ b/system/src/Grav/Common/Grav.php @@ -484,7 +484,7 @@ class Grav extends Container if ($page) { $media = $page->media()->all(); - $parsed_url = parse_url(rawurldecode($uri->basename())); + $parsed_url = parse_url(urldecode($uri->basename())); $media_file = $parsed_url['path']; diff --git a/system/src/Grav/Common/Markdown/ParsedownGravTrait.php b/system/src/Grav/Common/Markdown/ParsedownGravTrait.php index cb6194034..9b13c955c 100644 --- a/system/src/Grav/Common/Markdown/ParsedownGravTrait.php +++ b/system/src/Grav/Common/Markdown/ParsedownGravTrait.php @@ -194,7 +194,7 @@ trait ParsedownGravTrait // get the local path to page media if possible if ($path_parts['dirname'] == $this->page->url(false, false, false)) { - $url['path'] = rawurldecode($path_parts['basename']); + $url['path'] = urldecode($path_parts['basename']); // get the media objects for this page $media = $this->page->media(); } else { @@ -204,7 +204,7 @@ trait ParsedownGravTrait $ext_page = $this->pages->dispatch($page_route, true); if ($ext_page) { $media = $ext_page->media(); - $url['path'] = rawurldecode($path_parts['basename']); + $url['path'] = urldecode($path_parts['basename']); } } @@ -226,7 +226,7 @@ trait ParsedownGravTrait // loop through actions for the image and call them foreach ($actions as $action) { - $medium = call_user_func_array(array($medium, $action['method']), explode(',', rawurldecode($action['params']))); + $medium = call_user_func_array(array($medium, $action['method']), explode(',', urldecode($action['params']))); } if (isset($url['fragment'])) { diff --git a/system/src/Grav/Common/Page/Medium/Medium.php b/system/src/Grav/Common/Page/Medium/Medium.php index b1ba569a2..714eeb5e8 100644 --- a/system/src/Grav/Common/Page/Medium/Medium.php +++ b/system/src/Grav/Common/Page/Medium/Medium.php @@ -449,7 +449,7 @@ class Medium extends Data implements RenderableInterface { $qs = $method; if (count($args) > 1 || (count($args) == 1 && !empty($args[0]))) { - $qs .= '=' . implode(',', array_map(function ($a) { return rawurlencode($a); }, $args)); + $qs .= '=' . implode(',', array_map(function ($a) { return urlencode($a); }, $args)); } if (!empty($qs)) { diff --git a/system/src/Grav/Common/Uri.php b/system/src/Grav/Common/Uri.php index bde30115a..efe9d1efc 100644 --- a/system/src/Grav/Common/Uri.php +++ b/system/src/Grav/Common/Uri.php @@ -170,7 +170,7 @@ class Uri if (strpos($bit, $delimiter) !== false) { $param = explode($delimiter, $bit); if (count($param) == 2) { - $plain_var = filter_var(rawurldecode($param[1]), FILTER_SANITIZE_STRING); + $plain_var = filter_var(urldecode($param[1]), FILTER_SANITIZE_STRING); $this->params[$param[0]] = $plain_var; } } else { @@ -206,7 +206,7 @@ class Uri */ public function route($absolute = false, $domain = false) { - return rawurldecode(($absolute ? $this->rootUrl($domain) : '') . '/' . implode('/', $this->paths)); + return urldecode(($absolute ? $this->rootUrl($domain) : '') . '/' . implode('/', $this->paths)); } /** @@ -268,7 +268,7 @@ class Uri public function param($id) { if (isset($this->params[$id])) { - return rawurldecode($this->params[$id]); + return urldecode($this->params[$id]); } else { return false; } @@ -545,8 +545,8 @@ class Uri if (file_exists($full_path)) { // do nothing - } elseif (file_exists(rawurldecode($full_path))) { - $full_path = rawurldecode($full_path); + } elseif (file_exists(urldecode($full_path))) { + $full_path = urldecode($full_path); } else { return $normalized_url; }