From 342eac10474156e71309b0e6ce6670738f7668ec Mon Sep 17 00:00:00 2001 From: Andy Miller Date: Thu, 26 Sep 2019 18:35:25 -0600 Subject: [PATCH 01/12] Smarter CSV handling --- CHANGELOG.md | 6 ++++++ .../Grav/Framework/File/Formatter/CsvFormatter.php | 12 ++++++++++-- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ea3d60488..8dccef195 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,9 @@ +# v1.6.17 +## mm/dd/2019 + +1. [](#improved) + * Safer file handling in `CsvFormatter::decode()` + # v1.6.16 ## 09/19/2019 diff --git a/system/src/Grav/Framework/File/Formatter/CsvFormatter.php b/system/src/Grav/Framework/File/Formatter/CsvFormatter.php index 8945df004..74a56903a 100644 --- a/system/src/Grav/Framework/File/Formatter/CsvFormatter.php +++ b/system/src/Grav/Framework/File/Formatter/CsvFormatter.php @@ -81,8 +81,16 @@ class CsvFormatter extends AbstractFormatter // Get the data $list = []; - foreach ($lines as $line) { - $list[] = array_combine($header, str_getcsv($line, $delimiter)); + $line = null; + try { + foreach ($lines as $line) { + if (!empty($line)) { + $csv_line = str_getcsv($line, $delimiter); + $list[] = array_combine($header, $csv_line); + } + } + } catch (\Exception $e) { + throw new \Exception('Badly formatted CSV line: ' . $line); } return $list; From 91270c9c6654d7e2dfbf9b87f950647b5334adfc Mon Sep 17 00:00:00 2001 From: Andy Miller Date: Tue, 1 Oct 2019 17:51:02 -0600 Subject: [PATCH 02/12] CSVFormatter null char support --- .../src/Grav/Framework/File/Formatter/CsvFormatter.php | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/system/src/Grav/Framework/File/Formatter/CsvFormatter.php b/system/src/Grav/Framework/File/Formatter/CsvFormatter.php index 74a56903a..6c1c3b4f4 100644 --- a/system/src/Grav/Framework/File/Formatter/CsvFormatter.php +++ b/system/src/Grav/Framework/File/Formatter/CsvFormatter.php @@ -79,6 +79,9 @@ class CsvFormatter extends AbstractFormatter // Get the field names $header = str_getcsv(array_shift($lines), $delimiter); + // Allow for replacing a null string with null/empty value + $null_replace = $this->getConfig('null'); + // Get the data $list = []; $line = null; @@ -86,6 +89,13 @@ class CsvFormatter extends AbstractFormatter foreach ($lines as $line) { if (!empty($line)) { $csv_line = str_getcsv($line, $delimiter); + + if ($null_replace) { + array_walk($csv_line, function(&$el) use ($null_replace) { + $el = str_replace($null_replace, null, $el); + }); + } + $list[] = array_combine($header, $csv_line); } } From c795ead4029dd8d0ffd00b63048811484979a9c6 Mon Sep 17 00:00:00 2001 From: Andy Miller Date: Tue, 1 Oct 2019 17:52:14 -0600 Subject: [PATCH 03/12] Updated changelog --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8dccef195..b677f7e58 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,7 +2,7 @@ ## mm/dd/2019 1. [](#improved) - * Safer file handling in `CsvFormatter::decode()` + * Safer file handling + customizable null char replacment in `CsvFormatter::decode()` # v1.6.16 ## 09/19/2019 From eb1b9567df23cbec4ee082af3e333a863b0e702d Mon Sep 17 00:00:00 2001 From: Jeremy Gonyea Date: Thu, 3 Oct 2019 16:54:05 -0400 Subject: [PATCH 04/12] Updated for latest ddev version (#2676) --- webserver-configs/nginx-ddev-site.conf | 140 +++++++++++++++---------- 1 file changed, 82 insertions(+), 58 deletions(-) diff --git a/webserver-configs/nginx-ddev-site.conf b/webserver-configs/nginx-ddev-site.conf index e75cf2ff1..be3cf3721 100644 --- a/webserver-configs/nginx-ddev-site.conf +++ b/webserver-configs/nginx-ddev-site.conf @@ -2,7 +2,7 @@ # You can override ddev's configuration by placing an edited copy # of this config (or one of the other ones) in .ddev/nginx-site.conf -# See https://ddev.readthedocs.io/en/latest/users/extend/customization-extendibility/#providing-custom-nginx-configuration +# See https://ddev.readthedocs.io/en/stable/users/extend/customization-extendibility/#providing-custom-nginx-configuration # Set https to 'on' if x-forwarded-proto is https map $http_x_forwarded_proto $fcgi_https { @@ -11,11 +11,16 @@ map $http_x_forwarded_proto $fcgi_https { } server { - listen 80; ## listen for ipv4; this line is default and implied - listen [::]:80 default ipv6only=on; ## listen for ipv6 - # The NGINX_DOCROOT variable is substituted with + listen 80; + listen [::]:80 default ipv6only=on; + + # The WEBSERVER_DOCROOT variable is substituted with # its value when the container is started. - root $NGINX_DOCROOT; + root $WEBSERVER_DOCROOT; + + include /etc/nginx/monitoring.conf; + + index index.php index.htm index.html; # Make site accessible from http://localhost/ @@ -23,15 +28,20 @@ server { # Disable sendfile as per https://docs.vagrantup.com/v2/synced-folders/virtualbox.html sendfile off; - error_log /var/log/nginx/error.log info; + error_log /dev/stdout info; access_log /var/log/nginx/access.log; + ## Begin - Index + # for subfolders, simply adjust: + # `location /subfolder {` + # and the rewrite to use `/subfolder/index.php` location / { - absolute_redirect off; try_files $uri $uri/ /index.php?$query_string; } + ## End - Index - # pass the PHP scripts to FastCGI server listening on socket + + # pass the PHP scripts to FastCGI server listening on socket location ~ \.php$ { try_files $uri =404; fastcgi_split_path_info ^(.+\.php)(/.+)$; @@ -42,38 +52,78 @@ server { fastcgi_param SCRIPT_NAME $fastcgi_script_name; fastcgi_index index.php; include fastcgi_params; - fastcgi_intercept_errors on; + fastcgi_intercept_errors off; # fastcgi_read_timeout should match max_execution_time in php.ini fastcgi_read_timeout 10m; fastcgi_param SERVER_NAME $host; fastcgi_param HTTPS $fcgi_https; } - # Expire rules for static content - # Feed - location ~* \.(?:rss|atom|cache)$ { - expires 1h; - } + ## Begin - Security + # deny all direct access for these folders + location ~* /(\.git|cache|bin|logs|backup|tests)/.*$ { return 403; } + # deny running scripts inside core system folders + location ~* /(system|vendor)/.*\.(txt|xml|md|html|yaml|yml|php|pl|py|cgi|twig|sh|bat)$ { return 403; } + # deny running scripts inside user folder + location ~* /user/.*\.(txt|md|yaml|yml|php|pl|py|cgi|twig|sh|bat)$ { return 403; } + # deny access to specific files in the root folder + location ~ /(LICENSE\.txt|composer\.lock|composer\.json|nginx\.conf|web\.config|htaccess\.txt|\.htaccess) { return 403; } + ## End - Security - # Media: images, icons, video, audio, HTC - location ~* \.(?:jpg|jpeg|gif|png|ico|cur|gz|svg|svgz|mp4|ogg|ogv|webm|htc)$ { - expires 1M; - access_log off; - add_header Cache-Control "public"; - } + include /mnt/ddev_config/nginx/*.conf; +} - # Prevent clients from accessing hidden files (starting with a dot) - # This is particularly important if you store .htpasswd files in the site hierarchy - # Access to `/.well-known/` is allowed. - # https://www.mnot.net/blog/2010/04/07/well-known - # https://tools.ietf.org/html/rfc5785 - location ~* /\.(?!well-known\/) { - deny all; - } - # Prevent clients from accessing to backup/config/source files - location ~* (?:\.(?:bak|conf|dist|fla|in[ci]|log|psd|sh|sql|sw[op])|~)$ { - deny all; +server { + listen 443 ssl; + listen [::]:443 default ipv6only=on; + + # The WEBSERVER_DOCROOT variable is substituted with + # its value when the container is started. + root $WEBSERVER_DOCROOT; + + ssl_certificate /etc/ssl/certs/master.crt; + ssl_certificate_key /etc/ssl/certs/master.key; + + include /etc/nginx/monitoring.conf; + + + index index.php index.htm index.html; + + # Make site accessible from http://localhost/ + server_name _; + + # Disable sendfile as per https://docs.vagrantup.com/v2/synced-folders/virtualbox.html + sendfile off; + error_log /dev/stdout info; + access_log /var/log/nginx/access.log; + + ## Begin - Index + # for subfolders, simply adjust: + # `location /subfolder {` + # and the rewrite to use `/subfolder/index.php` + location / { + try_files $uri $uri/ /index.php?$query_string; + } + ## End - Index + + + # pass the PHP scripts to FastCGI server listening on socket + location ~ \.php$ { + try_files $uri =404; + fastcgi_split_path_info ^(.+\.php)(/.+)$; + fastcgi_pass unix:/run/php-fpm.sock; + fastcgi_buffers 16 16k; + fastcgi_buffer_size 32k; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_param SCRIPT_NAME $fastcgi_script_name; + fastcgi_index index.php; + include fastcgi_params; + fastcgi_intercept_errors off; + # fastcgi_read_timeout should match max_execution_time in php.ini + fastcgi_read_timeout 10m; + fastcgi_param SERVER_NAME $host; + fastcgi_param HTTPS $fcgi_https; } ## Begin - Security @@ -88,31 +138,5 @@ server { ## End - Security - ## provide a health check endpoint - location /healthcheck { - access_log off; - stub_status on; - keepalive_timeout 0; # Disable HTTP keepalive - return 200; - } - - error_page 400 401 /40x.html; - location = /40x.html { - root /usr/share/nginx/html; - } - - location ~ ^/(fpmstatus|ping)$ { - access_log off; - stub_status on; - keepalive_timeout 0; # Disable HTTP keepalive - allow 127.0.0.1; - allow all; - fastcgi_index index.php; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - include fastcgi_params; - fastcgi_pass unix:/run/php-fpm.sock; - } - - + include /mnt/ddev_config/nginx/*.conf; } - From feeee9ef8625be8c63013bc73784f18244d20b19 Mon Sep 17 00:00:00 2001 From: Matias Griese Date: Tue, 15 Oct 2019 19:00:25 +0300 Subject: [PATCH 05/12] Fixed PHP 7.1 bug in Flex --- CHANGELOG.md | 4 +++- system/src/Grav/Common/Media/Traits/MediaTrait.php | 2 +- system/src/Grav/Common/Page/Page.php | 2 +- system/src/Grav/Framework/Flex/Traits/FlexMediaTrait.php | 2 +- 4 files changed, 6 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b677f7e58..32f49c898 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,7 +2,9 @@ ## mm/dd/2019 1. [](#improved) - * Safer file handling + customizable null char replacment in `CsvFormatter::decode()` + * Safer file handling + customizable null char replacement in `CsvFormatter::decode()` +1. [](#bugfix) + * Fixed PHP 7.1 bug in Flex # v1.6.16 ## 09/19/2019 diff --git a/system/src/Grav/Common/Media/Traits/MediaTrait.php b/system/src/Grav/Common/Media/Traits/MediaTrait.php index c65f87da6..dc6550dbf 100644 --- a/system/src/Grav/Common/Media/Traits/MediaTrait.php +++ b/system/src/Grav/Common/Media/Traits/MediaTrait.php @@ -125,5 +125,5 @@ trait MediaTrait /** * @return string */ - abstract protected function getCacheKey(); + abstract protected function getCacheKey(): string; } diff --git a/system/src/Grav/Common/Page/Page.php b/system/src/Grav/Common/Page/Page.php index 173035981..f59665ff5 100644 --- a/system/src/Grav/Common/Page/Page.php +++ b/system/src/Grav/Common/Page/Page.php @@ -1200,7 +1200,7 @@ class Page implements PageInterface /** * @return string */ - protected function getCacheKey() + protected function getCacheKey(): string { return $this->id(); } diff --git a/system/src/Grav/Framework/Flex/Traits/FlexMediaTrait.php b/system/src/Grav/Framework/Flex/Traits/FlexMediaTrait.php index 8b2270604..c894634c6 100644 --- a/system/src/Grav/Framework/Flex/Traits/FlexMediaTrait.php +++ b/system/src/Grav/Framework/Flex/Traits/FlexMediaTrait.php @@ -342,5 +342,5 @@ trait FlexMediaTrait abstract public function getFlexDirectory(): FlexDirectory; - abstract public function getStorageKey(); + abstract public function getStorageKey(): string; } From d11772b6819015082185818e5c2d75c0b6d36c5e Mon Sep 17 00:00:00 2001 From: Djamil Legato Date: Wed, 16 Oct 2019 11:02:44 -0700 Subject: [PATCH 06/12] Change of Behavior: `Inflector::hyphenize` will now automatically trim dashes at beginning and end of a string. --- CHANGELOG.md | 1 + system/src/Grav/Common/Inflector.php | 2 ++ 2 files changed, 3 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 32f49c898..012ea9475 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,7 @@ 1. [](#improved) * Safer file handling + customizable null char replacement in `CsvFormatter::decode()` + * Change of Behavior: `Inflector::hyphenize` will now automatically trim dashes at beginning and end of a string. 1. [](#bugfix) * Fixed PHP 7.1 bug in Flex diff --git a/system/src/Grav/Common/Inflector.php b/system/src/Grav/Common/Inflector.php index a24bbfd84..eca93c197 100644 --- a/system/src/Grav/Common/Inflector.php +++ b/system/src/Grav/Common/Inflector.php @@ -193,6 +193,8 @@ class Inflector $regex3 = preg_replace('/([0-9])([A-Z])/', '\1-\2', $regex2); $regex4 = preg_replace('/[^A-Z^a-z^0-9]+/', '-', $regex3); + $regex4 = trim($regex4, '-'); + return strtolower($regex4); } From bc1dd2a7b4f82d3942b6227e92ca7dfd9edf0cbb Mon Sep 17 00:00:00 2001 From: Matias Griese Date: Wed, 16 Oct 2019 23:40:08 +0300 Subject: [PATCH 07/12] Added working ETag (304 Not Modified) support based on the final rendered HTML --- CHANGELOG.md | 2 ++ system/src/Grav/Common/Grav.php | 14 +++++++++++++- system/src/Grav/Common/Page/Page.php | 4 ++-- 3 files changed, 17 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 012ea9475..e5f258008 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,8 @@ # v1.6.17 ## mm/dd/2019 +1. [](#new) + * Added working ETag (304 Not Modified) support based on the final rendered HTML 1. [](#improved) * Safer file handling + customizable null char replacement in `CsvFormatter::decode()` * Change of Behavior: `Inflector::hyphenize` will now automatically trim dashes at beginning and end of a string. diff --git a/system/src/Grav/Common/Grav.php b/system/src/Grav/Common/Grav.php index 009d57de5..9cb74cc18 100644 --- a/system/src/Grav/Common/Grav.php +++ b/system/src/Grav/Common/Grav.php @@ -247,9 +247,21 @@ class Grav extends Container $collection = new RequestHandler($this->middleware, $default, $container); $response = $collection->handle($this['request']); + $body = $response->getBody(); + + // Handle ETag and If-None-Match headers. + if ($response->getHeaderLine('ETag') === '1') { + $etag = md5($body); + $response = $response->withHeader('ETag', $etag); + + if ($this['request']->getHeaderLine('If-None-Match') === $etag) { + $response = $response->withStatus(304); + $body = ''; + } + } $this->header($response); - echo $response->getBody(); + echo $body; $debugger->render(); diff --git a/system/src/Grav/Common/Page/Page.php b/system/src/Grav/Common/Page/Page.php index f59665ff5..199660852 100644 --- a/system/src/Grav/Common/Page/Page.php +++ b/system/src/Grav/Common/Page/Page.php @@ -529,9 +529,9 @@ class Page implements PageInterface $headers['Last-Modified'] = $last_modified_date; } - // Calculate ETag based on the raw file + // Ask Grav to calculate ETag from the final content. if ($this->eTag()) { - $headers['ETag'] = '"' . md5($this->raw() . $this->modified()).'"'; + $headers['ETag'] = '1'; } // Set Vary: Accept-Encoding header From b16e8066ca89b9772dc055a3ea548eb23127596b Mon Sep 17 00:00:00 2001 From: buzatuAda <52411474+buzatuAda@users.noreply.github.com> Date: Thu, 17 Oct 2019 14:55:27 +0300 Subject: [PATCH 08/12] fix exception array_merge() when $this->header->metadata is not array (#2701) Exception gets thrown when $this->header->metadata is not an array, added extra verification in order to make sure it is and array before doing array_merge() --- system/src/Grav/Common/Page/Page.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/system/src/Grav/Common/Page/Page.php b/system/src/Grav/Common/Page/Page.php index 199660852..ea10cd47b 100644 --- a/system/src/Grav/Common/Page/Page.php +++ b/system/src/Grav/Common/Page/Page.php @@ -1696,7 +1696,7 @@ class Page implements PageInterface // Get initial metadata for the page $metadata = array_merge($metadata, Grav::instance()['config']->get('site.metadata')); - if (isset($this->header->metadata)) { + if (isset($this->header->metadata) && is_array($this->header->metadata)) { // Merge any site.metadata settings in with page metadata $metadata = array_merge($metadata, $this->header->metadata); } From ab6b82eaaa083f6632db303c498aabbb941b2334 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Nadaud?= Date: Thu, 17 Oct 2019 13:56:46 +0200 Subject: [PATCH 09/12] Fix cache image generation when using cropresize (#2639) --- tests/unit/Grav/Common/Markdown/ParsedownTest.php | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/unit/Grav/Common/Markdown/ParsedownTest.php b/tests/unit/Grav/Common/Markdown/ParsedownTest.php index 58a1acf61..ede6736f7 100644 --- a/tests/unit/Grav/Common/Markdown/ParsedownTest.php +++ b/tests/unit/Grav/Common/Markdown/ParsedownTest.php @@ -110,6 +110,7 @@ class ParsedownTest extends \Codeception\TestCase\Test public function testImagesSubDir() { + $this->config->set('system.images.cache_all', false); $this->uri->initializeWithUrlAndRootPath('http://testing.dev/subdir/item2/item2-2', '/subdir')->init(); $this->assertRegexp('|

<\/p>|', From 8322a0cfa3f46066680036bd1ab66d6feacc1ff6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Nadaud?= Date: Thu, 17 Oct 2019 13:57:25 +0200 Subject: [PATCH 10/12] Make script name more explicit (#2637) --- composer.json | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/composer.json b/composer.json index 60ca21a61..34b4c8d18 100644 --- a/composer.json +++ b/composer.json @@ -2,7 +2,13 @@ "name": "getgrav/grav", "type": "project", "description": "Modern, Crazy Fast, Ridiculously Easy and Amazingly Powerful Flat-File CMS", - "keywords": ["cms","flat-file cms","flat cms","flatfile cms","php"], + "keywords": [ + "cms", + "flat-file cms", + "flat cms", + "flatfile cms", + "php" + ], "homepage": "https://getgrav.org", "license": "MIT", "require": { @@ -16,14 +22,11 @@ "symfony/polyfill-iconv": "^1.9", "symfony/polyfill-php72": "^1.9", "symfony/polyfill-php73": "^1.9", - "psr/simple-cache": "^1.0", "psr/http-message": "^1.0", "psr/http-server-middleware": "^1.0", - "kodus/psr7-server": "*", "nyholm/psr7": "^1.0", - "twig/twig": "~1.40", "erusev/parsedown": "1.6.4", "erusev/parsedown-extra": "~0.7", @@ -36,7 +39,6 @@ "doctrine/collections": "^1.5", "guzzlehttp/psr7": "^1.4", "filp/whoops": "~2.2", - "matthiasmullie/minify": "^1.3", "monolog/monolog": "~1.0", "gregwar/image": "2.*", @@ -83,10 +85,14 @@ "psr-4": { "Grav\\": "system/src/Grav" }, - "files": ["system/defines.php"] + "files": [ + "system/defines.php" + ] }, "archive": { - "exclude": ["VERSION"] + "exclude": [ + "VERSION" + ] }, "scripts": { "api-16": "vendor/bin/phpdoc-md generate system/src > user/pages/14.api/default.16.md", @@ -94,7 +100,7 @@ "post-create-project-cmd": "bin/grav install", "phpstan": "vendor/bin/phpstan analyse -l 2 -c ./tests/phpstan/phpstan.neon system/src --memory-limit=256M", "phpstan-framework": "vendor/bin/phpstan analyse -l 5 -c ./tests/phpstan/phpstan.neon system/src/Grav/Framework --memory-limit=256M", - "test-plugins": "vendor/bin/phpstan analyse -l 0 -c ./tests/phpstan/plugins.neon user/plugins --memory-limit=256M", + "phpstan-plugins": "vendor/bin/phpstan analyse -l 0 -c ./tests/phpstan/plugins.neon user/plugins --memory-limit=256M", "test": "vendor/bin/codecept run unit", "test-windows": "vendor\\bin\\codecept run unit" }, From 8678f22f6bf94e0a5c862f864e5a3d06cc31dd07 Mon Sep 17 00:00:00 2001 From: Keith Bentrup Date: Wed, 23 Oct 2019 17:39:05 -0400 Subject: [PATCH 11/12] do NOT ignore "." dirs OR ignore "." dirs and all children (#2581) If you ignore any "files" beginning with "." including directories, then the all() method will exclude .somedir, but not .somedir/somefile. Subsequently, when trying to copy all files returned from all(), it will fail when the method tries to copy a file into a directory that has not yet been created because .somedir was omitted from the return array of all(). I found this bug when trying to install the admin plugin and ./tmp was a mount and thus rename() failed and self:copy() was invoked instead (line 365). --- system/src/Grav/Common/Filesystem/Folder.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/system/src/Grav/Common/Filesystem/Folder.php b/system/src/Grav/Common/Filesystem/Folder.php index f17410c49..2a38d88e5 100644 --- a/system/src/Grav/Common/Filesystem/Folder.php +++ b/system/src/Grav/Common/Filesystem/Folder.php @@ -235,7 +235,7 @@ abstract class Folder /** @var \RecursiveDirectoryIterator $file */ foreach ($iterator as $file) { // Ignore hidden files. - if (strpos($file->getFilename(), '.') === 0) { + if (strpos($file->getFilename(), '.') === 0 && $file->isFile()) { continue; } if (!$folders && $file->isDir()) { From e0e92b843c1ef87c2092296238a6e77361119249 Mon Sep 17 00:00:00 2001 From: Andy Miller Date: Wed, 6 Nov 2019 16:06:45 -0700 Subject: [PATCH 12/12] prepare for release --- CHANGELOG.md | 8 ++++++-- system/defines.php | 2 +- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e5f258008..60933af6c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,13 +1,17 @@ # v1.6.17 -## mm/dd/2019 +## 10/06/2019 1. [](#new) * Added working ETag (304 Not Modified) support based on the final rendered HTML 1. [](#improved) * Safer file handling + customizable null char replacement in `CsvFormatter::decode()` * Change of Behavior: `Inflector::hyphenize` will now automatically trim dashes at beginning and end of a string. + * Change in Behavior for `Folder::all()` so no longer fails if trying to copy non-existent dot file [#2581](https://github.com/getgrav/grav/pull/2581) + * renamed composer `test-plugins` script to `phpstan-plugins` to be more explicit [#2637](https://github.com/getgrav/grav/pull/2637) 1. [](#bugfix) - * Fixed PHP 7.1 bug in Flex + * Fixed PHP 7.1 bug in FlexMedia + * Fix cache image generation when using cropResize [#2639](https://github.com/getgrav/grav/pull/2639) + * Fix `array_merge()` exception with non-array page header metadata [#2701](https://github.com/getgrav/grav/pull/2701) # v1.6.16 ## 09/19/2019 diff --git a/system/defines.php b/system/defines.php index 85d88d8f7..5a283c40a 100644 --- a/system/defines.php +++ b/system/defines.php @@ -8,7 +8,7 @@ // Some standard defines define('GRAV', true); -define('GRAV_VERSION', '1.6.16'); +define('GRAV_VERSION', '1.6.17'); define('GRAV_TESTING', false); define('DS', '/');