v4.6.5 (2026-02-01)
- fix: make seeder to respect database group by @michalsn in #9886
- fix: ensure CSP nonces are Base64 encoded by @paulbalandan in #9907
- refactor: debugbar time header not dependent on locale by @michalsn in #9880
- refactor: Remove dead code from MySQLi Connection related to PHP 5 by @kamil-tekiela in #9887
- refactor: Clean up mysqli transactions by @kamil-tekiela in #9888
v4.6.4 (2025-12-12)
- fix: prevent non-shared DB instances from polluting shared cache by @michalsn in #9679
- fix:
Connection::getFieldData()default value convention forSQLSRVandOCI8by @michalsn in #9680 - fix:
Forge::modifyColumn()for Postgre handler by @michalsn in #9676 - fix: setting
created_atfield inModel::replace()method by @michalsn in #9693 - fix: Casting in insertBatch and updateBatch methods. by @patel-vansh in #9698
- fix:
compileOrderBy()method by @michalsn in #9697 - fix: SQLite3 password handling for empty string by @michalsn in #9729
- fix: TypeError in
valid_base64rule when checking invalid base64 strings by @michalsn in #9733 - fix: debug toolbar logs collector behavior on
isEmpty()by @mjomble in #9724 - fix: crash in
toggleViewsHints-debugDiv.appendChild(toolbar.js) by @mjomble in #9735 - fix: cannot read properties of null in
toggleViewsHints(toolbar.js) by @michalsn in #9736 - fix: type error in controlled cell by @michalsn in #9784
- fix: handle resources and closures in JSON exception responses by @michalsn in #9788
- fix: quote reserved keyword
timestampused as a field name for session table by @michalsn in #9805 - fix: Add an IDs for toolbar form fields by @neznaika0 in #9823
- fix: disable echo in the preload file by @michalsn in #9825
- fix(cache): prevent Redis error when
deleteMatching()finds no keys by @michalsn in #9829
- refactor: change
$requesttoCLIRequest|IncomingRequestinResponseTraitby @paulbalandan in #9658 - refactor: fix phpdoc and improve code in
Languageby @paulbalandan in #9656 - refactor: remove redundant property declarations in
BaseControllerby @paulbalandan in #9659 - refactor: update
CheckPhpInicode by @paulbalandan in #9672 - refactor: Improve types for phpstan by @neznaika0 in #9685
- refactor: fix phpstan issues on magic properties by @paulbalandan in #9728
- refactor: use
superglobalsservice in theUserAgentclass by @michalsn in #9783
v4.6.3 (2025-08-02)
- fix: CID check in Email class by @michalsn in #9645
- fix: SMTP connection resource validation in
Emailclass destructor by @michalsn in #9648
- refactor: update preload script to exclude
util_bootstrapby @ddevsr in #9649 - refactor: phpdoc for
Config\Filters::$globalsby @michalsn in #9652
v4.6.2 (2025-07-26)
-
ImageMagickHandler: Command Injection Vulnerability in ImageMagick Handler Fixes a vulnerability relating to uses of
ImageMagickHandler'sresize()ortext()methods where an attacker can upload malicious filenames containing shell metacharacters that get executed when the image is processed or when text is added to the image.See the security advisory for details. Credits to @vicevirus for reporting the issue.
- chore: add missing EscaperInterface to the AutoloadConfig by @michalsn in #9561
- fix: remove service dependency from sanitize_filename() helper function by @michalsn in #9560
- fix: use native PHP truthiness for condition evaluation in when()/whenNot() by @michalsn in #9576
- fix: add error handling for corrupted cache files in
FileHandlerby @michalsn in #9586 - fix: correct
getHostname()fallback logic inEmailclass by @michalsn in #9587 - fix: encapsulation violation in
BasePreparedQueryclass by @michalsn in #9603 - fix: URI authority generation for schemes without default ports by @michalsn in #9605
- fix: correct path parsing in
SiteURIFactory::parseRequestURI()by @michalsn in #9613 - fix: support for multibyte folder names when the app is served from a subfolder by @michalsn in #9615
- fix: use correct 24-hour time format in development error page. by @ping-yee in #9628
- fix: improve CURLRequest intermediate HTTP response handling by @michalsn in #9627
- fix: ensure
make:testworks on Windows by @paulbalandan in #9635 - fix: ensure
make:testgenerates test files ending inTestby @paulbalandan in #9636 - fix:
make:testrequires 3 inputs after entering an empty class name by @paulbalandan in #9637 - fix: add filename parameters to inline Content-Disposition headers by @michalsn in #9638
- refactor: add
system/util_bootstrap.phpto curb overreliance tosystem/Test/bootstrap.phpby @paulbalandan in #9562 - refactor: update places to use
system/util_bootstrap.phpby @paulbalandan in #9568 - refactor: more accurate array PHPDocs of Cookie by @paulbalandan in #9569
- refactor: use native phpdocs wherever possible by @paulbalandan in #9571
- refactor: fix
notIdentical.alwaysTrueerror by @paulbalandan in #9579 - refactor: fix phpstan errors in
Eventsby @paulbalandan in #9580 - refactor: fix non-booleans in if conditions by @paulbalandan in #9578
- refactor: fix and micro-optimize code in
Formatby @paulbalandan in #9583 - refactor: fix various phpstan errors in Log component by @paulbalandan in #9581
- refactor: partial fix errors on Email by @paulbalandan in #9582
- refactor: fix phpstan errors in
ResponseTraitby @paulbalandan in #9591 - refactor: precise PHPDocs for Autoloader by @paulbalandan in #9593
- refactor: fix phpstan errors in mock classes by @paulbalandan in #9594
- refactor: fix various phpstan errors in Cache by @paulbalandan in #9610
- fix: apply rector rule TernaryImplodeToImplodeRector by @michalsn in #9614
- refactor:
Console::showHeader()calldate()only once by @paulbalandan in #9616
v4.6.1 (2025-05-02)
- fix(CURLRequest): multiple header sections after redirects by @ducng99 in #9426
- fix: set headers for CORS by @michalsn in #9437
- fix: upsert with composite unique index by @michalsn in #9454
- fix:
getVersion()for OCI8 and SQLSRV drivers by @michalsn in #9471 - fix: Toolbar when
maxHistoryis set to0by @michalsn in #9506 - fix:
Session::markAsTempdata()adding wrong TTL by @paulbalandan in #9536 - fix: added "application/octet-stream" to the "stl" mime type in the M… by @Franky5831 in #9543
- refactor: get upper first protocol only one call in Email by @ddevsr in #9449
- refactor: PHPDocs in
env()by @ddevsr in #9468 - refactor: remove lowercase event name for logging by @ddevsr in #9483
- refactor: OCI8
limit()method by @michalsn in #9472 - refactor: deprecate redundant
FileHandlercache methods by @paulbalandan in #9511 - refactor: fix
variable.undefined(and other) errors by @paulbalandan in #9513 - refactor: fix
return.unusedTypeerrors by @paulbalandan in #9514 - refactor: add
CITestStreamFilterto phpstan-analysed list and fix errors by @paulbalandan in #9515 - refactor: fix
property.protectederrors by @paulbalandan in #9517 - refactor: fix
function.alreadyNarrowedTypeerrors by @paulbalandan in #9518 - refactor: fix
empty.propertyerrors by @paulbalandan in #9519 - refactor: import FQCNs by @paulbalandan in #9520
- refactor: fix
isset.propertyerrors by @paulbalandan in #9522 - refactor: fix
missingType.returnerrors by @warcooft in #9523 - refactor: fix
nullCoalesce.variableerrors by @warcooft in #9524 - refactor: fix phpstan errors in
URIandSiteURIby @paulbalandan in #9525 - refactor: fix
@readonlyproperty errors by @paulbalandan in #9529 - refactor: fix
missingType.returnerrors in system files by @paulbalandan in #9530 - refactor: fix
codeigniter.modelArgumentTypeerrors by @paulbalandan in #9533 - refactor: fix
SessionandSessionInterfacecode by @paulbalandan in #9535
v4.6.0 (2025-01-19)
- refactor: remove deprecated failValidationError() in API\ResponseTrait by @kenjis in #8793
- refactor: remove depreacted ResponseInterface::getReason() by @kenjis in #8841
- refactor: remove deprecated Logger::cleanFilenames() and TestLogger::cleanup() by @kenjis in #8843
- fix: Exception rework by @kenjis in #8728
- fix: DefinedRouteCollector to use RouteCollectionInterface by @kenjis in #8911
- fix: View::renderSection() return type by @kenjis in #8965
- feat: [Filters] enables a filter to run more than once with different arguments by @kenjis in #8977
- fix: add check for duplicate Registrar Auto-Discovery runs by @kenjis in #9073
- fix: Time loses microseconds by @kenjis in #9081
- feat: fix spark db:table causes errors with table name including special chars by @kenjis in #8748
- [4.6] fix: Time::createFromTimestamp() change for PHP 8.4 by @kenjis in #9105
- fix: Time::setTimestamp()'s different behavior than DateTime by @kenjis in #9106
- [4.6] fix: inconsistency in detailed error reporting by @kenjis in #9144
- [4.6] feat: force PHP default 32 chars length at 4 bits to Session ID by @kenjis in #9139
- fix: prioritize headers set by the
Responseclass by @michalsn in #9235
- [4.6] fix: add validation message for min_dims by @christianberkman in #8988
- fix: [Filters] normalize
$filtersarguments by @kenjis in #8994
- feat: [FileCollection] add function to reatain multiple patterns by @christianberkman in #8960
- feat: [Validation] add
min_dimsrule in FileRules by @christianberkman in #8966 - feat: add
foundRowsoption for MySQLi config by @ducng99 in #8979 - feat:
spark filter:checkshows filter classnames by @kenjis in #8985 - feat: add BaseConnection::resetTransStatus() by @kenjis in #8767
- feat: add Services::resetServicesCache() to reset services cache by @kenjis in #9012
- feat: add "400 Bad Request" page for end users by @kenjis in #9044
- feat: add directives to
phpini:checkcommand by @kenjis in #9117 - feat: multiple hostname routing by @ddevsr in #9150
- [4.6] feat: workaround for implicit nullable deprecations in PHP 8.4 by @kenjis in #9140
- feat: support CURL HTTP3 by @ddevsr in #9145
- feat: design info environment top in
error_exceptionby @ddevsr in #9241 - feat: [Validation] add support for
$dbGroupas parameter inis_uniqueandis_not_uniqueby @maniaba in #9216 - feat: added the
namespaceoption to thepublishcommand by @dimtrovich in #9278 - chore: update
Kintto v6.0 by @ddevsr in #9289 - feat: CURL option
force_ip_resolveby @ddevsr in #9194 - feat: add SQLite3 config synchronous by @michalsn in #9202
- feat: Differentiate between kilobyte/kibibyte and megabyte/mebibyte by @ThomasMeschke in #9277
- feat: Strict locale negotiation by @neznaika0 in #9360
- fix: Add support for multibyte strings by @neznaika0 in #9372
- feat: add page start end total to
PagerRendererby @murilohpucci in #9371 - feat: New command
lang:syncby @neznaika0 in #9023 - feat: additional
opcachesetting in check php.ini by @ddevsr in #9032
- [4.6] refactor: Validation rules and tests by @kenjis in #8975
- [4.6] refactor: add
: voidby @kenjis in #9013 - refactor: remove dependency on BaseConnection in TableName by @kenjis in #9104
- refactor: add return type to closuer in FilterCheck by @neznaika0 in #9190
- refactor: Remove deprecated
RedirectExceptionby @neznaika0 in #9399 - refactor: Remove deprecated
EVENT_PRIORITY_*by @neznaika0 in #9401 - refactor: Remove deprecated
View::$currentSectionby @neznaika0 in #9403 - refactor: Remove deprecated
Cache::$storePathby @neznaika0 in #9404 - refactor: Remove deprecated
Config\Format::getFormatter()by @neznaika0 in #9405 - refactor: Remove deprecation related to cookies by @neznaika0 in #9406
For the changelog of v4.5, see CHANGELOG_4.5.md.