Changelog History
Page 1
-
v1.8.2 Changes
June 27, 2019๐ Security advisories
- [SEC-CORE-009]: Unzip vulnerability to slip-attack!
๐ See the website for more information about reported security issues and their status.
๐ Important fixes, changes, notes. Read them carefully.
- โ The code has been scanned for new warnings emitted by PHP 7.2 and 7.3.
๐ Important fixes, changes, notes. Read them carefully.
- โ The code has been scanned for new warnings emitted by PHP 7.2. and PHP 7.3.
๐ Security related
๐ See the advisories.
Backward compatibility notes
- ๐ป
Fieldset
: An exception is thrown if you try todelete()
a Fieldset field that does not exist.
System changes
- โก๏ธ Htmlawed, used by
Security::clean()
, has been updated to v1.2.4.2, to provide PHP 7.3 compatibility.
Specific classes
- Fixed a bug in
get_common_path()
returning incorrect results when the first path passed is an empty string. - ๐
DB
: Broken database cached results object has been fixed (1.8.1.1 hotfix). DB
: Fixedlast_query()
no longer returning the last query after a call tocount_last_query()
.- ๐
DB
: Fixed database result iteration (1.8.1.4 hotfix). - ๐ง
DB
: Still capture any PDO errors in the event these have been disabled in the PHP configuration. DB
: New caching option onquery()
and a newcaching()
method allow you to enable/disable result caching on a per-query basis. NB: you need a result cache object if you need random access to database results.- ๐ง
Config
: You can now use dot-notation when specifying group names, so you can load configuration data at any level in the tree. - ๐
DB
: Fixed not being able to generate "ORDER BY group" due to a validation typo. - ๐
Crypt
: Replaced a PHP5.6+ function that creeped in by a coded alternative (1.8.1.3 hotfix). - ๐
ErrorHandler
: Added specific support for handling and displaying SoapFault error information. Fieldset
: Newset_name()
allows to you change the fieldname of an existing Fielset field.- ๐ป
Fieldset
: An exception is thrown if you try todelete()
a Fieldset field that does not exist. - ๐ฏ
Fieldset
: Newduplicate()
method allows you to clone an existing Fieldset field. Image
: Newextension()
method returns the extension of the image file.- ๐
Input
: Fixed incorrectly parsing multipart/form-data if the boundary contained + signs. - ๐
Input
: Fixed a bug that could assign rubbish data to theput()
,patch()
ordelete()
data fields. - ๐
Input
: URI parsing has been improved to fix issues with URI's containing encoded data. - ๐
Input
: Incorrectly parsing multipart/form-data when the form boundary string contains + signs. - ๐
Pagination
: Fixed bug which allowed page numbers not to be numeric. This is now enforced. - ๐
Session
: Re-initialize if a session is started after it was closed (1.8.1.2 hotfix). - ๐
Unzip
: Addressed the zip-slip security vulnerability (1.8.1.6 hotfix).
๐ฆ Packages
Email
: Mailgun driver has been made compatible with the Mailgun v3 API.Email
: It is now possible to define stream socket options for SMTP connections.- ๐
Email
: A bug that failed to strip HTML comments from HTML email bodies correctly has been fixed. - ๐
Oil
: Fixed broken SQL being generated for tables with Unique indexes in migrations. - ๐
Oil
: Fixed pagination when generating admin pages for tables. - โก๏ธ
Oil
: Admin scaffolding has been updated to generate better code. - ๐
Oil
: Everything related to Fuel Cells have been removed, it was never properly implemented. - โ
ORM
: A few PHP warnings have been fixed when callingto_array()
on an object with relations. ORM
:to_array()
now returns related data correctly.ORM
:Observer_Typing
no longer truncates float values with more than 6 digits precision.- ๐
ORM
:Observer_Typing
now supports columns of type 'date', 'time' and 'datetime'. ORM
: Models now have the option to allow PK's to be set. This is required for non-autoincrement PK's.- ๐
ORM
: Fixed a NestedSets bug that caused the tree-id not to be set on multi-tree models. - โก๏ธ
ORM
: Fixed bug that allowed Models derived from a database view to be updated (causing a DB error). ORM
: Allowis_changed()
to run observers before comparing, to prevent it always returning True when using the Typing observer bidirectionally.- ๐
ORM
: Fixed bug in which not all Model properties were initialized on aforge()
with partial data.
-
v1.8.1 Changes
April 18, 2018๐ Security advisories
- [SEC-CORE-008]: Crypt encryption has been compromised!
๐ See the website for more information about reported security issues and their status.
๐ Important fixes, changes, notes. Read them carefully.
- โ The code has been scanned for new warnings emitted by PHP 7.1.
- ๐ Support for PHPUnit v6 has been added.
- ๐ Support for php-fpm has been improved.
- ๐ Function overloading for multibyte functions is no longer supported.
- โช A workaround for PHP bug 55701 has been added.
๐ Security related
โฌ๏ธ The AES encryption used by the
Crypt
class has been compromised, as reported by Felix Widemann and Nils Rokita from Hamburg University. They have proven that with a powerful GPU, any encoded string can be decoded using brute force in a few minutes. If your application relies on theCrypt
class (and most do, because the session cookie is usingCrypt
to encode it), upgrading your applications is highly advised!If you manually want to convert data, for example because you have them stored in the database, simply use:
$new = \Crypt::encode(\Crypt::decode($old));
โก๏ธ It will detect if the string is using the old encryption or the new encryption. Your
crypt.php
containing the keys will be automatically updated as well (assuming the application has write rights to the file).Please note that due to the stronger encryption mechanism used, the encrypted strings are longer. This might be an issue where you have limited space available, for example is fixed or max width database fields, a session cookie that is already approaching the 4Kb limit, etc. So check the requirements of your application before upgrading!
Backward compatibility notes
- When you post a form that exceeds
max_input_vars
, in some PHP 7.x versions the excess values were silently dropped, causing incorrect application behavior.Input
now emits an E_WARNING if PHP doesn't do so. - ๐จ The
Session
classes have been refactored. The methodscreate()
/read()
andwrite()
are removed, andstart()
andclose()
added to more closely mimic native session behavior. - 0๏ธโฃ Database results can now be returned in list or collection (cached) form. A list can only be iterated over, a collection has direct (array) access. By default a collection is returned to retain BC with 1.8.0, but in most cases, a list is faster if random access isn't needed, especially if the resultset is big.
- ๐ Function overloading for multibyte functions is no longer supported. When you have this enabled in your PHP config, Fuel will refuse to start.
- ๐ If you require multibyte agnostic string functions for the functions of type 2 (see http://php.net/manual/en/mbstring.overload.php), use the methods in the
Str
class instead.
System changes
- โก๏ธ Markdown has been updated to v1.7.0.
- โก๏ธ Monolog has been updated to v1.18 (latest composer version).
- โก๏ธ PHPSecLib has been updated to v2.* (latest composer version).
- ๐จ URI parsing has been refactored for better NGINX and php-fpm support.
- ๐ The autoloader has been patched to better support classnames in local charactersets.
Specific classes
Asset
: You can now call custom defined asset types the same way as you would built-in types (js,css,img).- ๐จ
Config
:load()
has been refactored. It no longer overwrites on subsequent loads unless you want to. It also no longer returnsfalse
in that case, but always returns the loaded config. Crypt
: Has been rewritten using Sodium. Decrypting old encoded strings is transparent, and will be converted on encrypting.Date
:create_from_string()
no longer allows you to create timestamps from before the Unix Epoch, which wasn't supported, and caused weird things to happen...DB
: you can now useon_open()
andon_close()
when creating JOIN clauses.- โก๏ธ
DB
: UPDATE now supports the same JOIN clauses as SELECT. DB
: Database result objects are now sanitized automatically when passed to a View.DB
: You can now choose to return database results as a list (can only be looped over in sequence) or a collection (has random access). A list uses a lot less memory with large resultsets.DB
: Introduced acache()
method to return a list as a collection.DBUtil
: Now has alist_indexes()
method.- ๐
Fieldset
: Fixed invalid HTML for tabular forms being generated when it contained hidden columns. - ๐
Fieldset
: Tabular forms now have built-in support for pagination. - ๐
File
: Fixed several bugs that could cause errors whenopen_basedir
was in effect. - ๐
File
: Fixed broken file locking when usingopen_file()
. Lock type validation added. - ๐ง
Form
: Attribute usage with both configured attributes and passed attributes onopen()
calls has been fixed. - ๐
Format
: Fixed a bug in which importing a multi-line CSV file could cause data loss. - ๐
Image
: Alphablending has been fixed for Imagick. Image
: The Imagick driver now takes EXIF autorotation data into account, mimicing GD behaviour.- ๐
Input
: Only parses raw input when PHP hasn't done so (p.e. on put, patch or delete requests). Input
: A newraw()
method has been introduced to access the raw PHP input data (from php://input).- ๐ฒ
Log
: Error and Exception objects are now passed on to Monolog for more detailing logging options. Model_Crud
:count()
now uses the defined database connection, if available.- ๐
Model_Crud
: Freezing/unfreezing error fixed when unserializing data into an object. - ๐ง
Module
: You can now configure that you want routes loaded from the module when you load a module. Pagination
: You can now specify the starting page (number, or 'first' or 'last') when no page number is present in the URL.- ๐
Security
: You can now configure NOT to rotate the CSRF token after validation. - ๐
Security
:set_token()
is now a public method, so a token can be rotated manually. - ๐
Session
: Brokendestroy()
method has been fixed. Session
: You can now create a session instance without implicitly starting it.Session
: You can now reset an active session to an empty state.- ๐
View
: Fixed unsanitizing of Traversable objects.
๐ฆ Packages
- ๐
Auth
: Fixed a bug in the validation rules of the User model. Auth
: When checking for access, you can now also pass the area name only (matches any right assigned in that area).- ๐
Auth
: For security reasons, OpAuths response has been changed from serialized to jsob. This response is now supported. Oil
: Improved Model and Migration generation.- ๐
Oil
: Improved index support when generating migrations from an existing database table. - ๐
Oil
: Generated controllers now support pagination on their index page. Oil
: Generating from existing tables now yield more details about the column.- ๐
Parser
: Markdown views no longer uses a dedicated version of Markdown, but the version installed via Composer. - ๐
Parser
: Creating a parser view object without a view name passed no longer triggers an exception. - ๐ฆ
Parser
: Support added for Handlebars templates though the LightnCandy composerpackage. Orm
:forge()
now accepts an object implementing ArrayAccess to add data to the ORM object.- ๐
Orm
:Observer_Typing
now supports the fieldtypeencrypt
to transparently encrypt/decrypt data going into the database. - ๐
Orm
:Observer_Typing
now support a field definition 'db_decimals', which you can use if your internal representation is different from the column definition (so objects aren't marked as changed incorrectly). - ๐ง
Orm
: Added a 'caching' config key to the ORM config, to configure default object caching behaviour. Orm
: Now has acaching()
method to enable or disable ORM object caching.Orm
: Now has aflush_cache()
method to flush the loaded ORM object cache.Orm
: You can now disconnect related objects by assigningnull
orarray()
to the relation, which behaves identical to usingunset()
.Email
: Mailgun email header generation has been improved.
-
v1.8.0 Changes
April 12, 2016๐ Important fixes, changes, notes. Read them carefully.
โฌ๏ธ This version provides full compatibility with PHP 7. To achieve this, the \Fuel\Error class had to be renamed to \Fuel\Errorhandler. The new error handler has full support for PHP 7's new Error exceptions. If your application calls the Error class directly, or has extended the Error class, make sure you make the appropriate changes after you have upgraded!
โก๏ธ The oil installer has been updated to use composer to install Fuel, and to provide better support for MacOS.
Backward compatibility notes
- ๐ฆ The included PHPSecLib version has been swapped by the composer package. If your application creates instances of PHPSecLib classes, check your code for compatibility issues, for example with the use of namespaces.
-
v1.8.0.4
January 15, 2017 -
v1.8.0.1
June 03, 2016 -
v1.7.3 Changes
- ๐ The old "mysql" DB driver has been removed because of removal in recent PHP versions. You can keep using
mysqli
if for some reason you don't want to use PDO. A new "mysql" driver has been introduced that uses PDO underneath. This should be transparent for most applications.
- ๐ The old "mysql" DB driver has been removed because of removal in recent PHP versions. You can keep using
-
v1.7.2 Changes
๐ Important fixes, changes, notes. Read them carefully.
Viewmodel
๐ As of 1.7.2, the Viewmodel class is deprecated, and replaced by the Presenter class. Functionality has remained largely the same, and a Viewmodel alias is present to maintain backward compatibility.
It has proven difficult to explain what a Viewmodel is and does, and why you should use it. Also having a classes/view and a views folder was very confusing for a lot of people. It is also a step closer to Fuel v2, there this class is also called Presenter.
Backward compatibility notes
Request_Curl
0๏ธโฃ As a result of the security issue mentioned below, the auto-format of the response in the
Request_Curl
class is now disabled by default, as it is possible for a malicious site to construct a response of a specific reponse type that can lead to code execution. This means that if you useRequest_Curl
, you have to either enable this manually in your code (ONLY if you absolutely trust the site you connect to!), or add code to validate the response before you process it.Validation
The validation rule
required
rule no longer treats an input valuefalse
as a value, so passing this value will now trigger a validation error.Database
The PDO driver now returns the error code of the underlying database driver back as the error code in the
Database_Exception
, instead of the PDO error code. This allows you to act on specific platform errors.โช It also means you loose access to the original generic PDO error code, which you can work around by retrieving the current PDO database connection (through the
connection()
method on the database object) and call PDO'serrorCode()
method to retrieve the original generic PDO error code. -
v1.7.1 Changes
None.
-
v1.7 Changes
None.
-
v1.6.1 Changes
Backward compability notes
Orm: You can no longer use property assignment to create a custom property on a model object if that model implements an EAV container. It will set an EAV value instead.