Skip to content

Add PHP 8.4 to Cloudlog - #3379

Closed
magicbug with Copilot wants to merge 12 commits into
cursor/upgrade-cloudlog-to-php-8-4-compatibility-8bbafrom
copilot/sub-pr-3378
Closed

Add PHP 8.4 to Cloudlog#3379
magicbug with Copilot wants to merge 12 commits into
cursor/upgrade-cloudlog-to-php-8-4-compatibility-8bbafrom
copilot/sub-pr-3378

Conversation

Copilot AI commented Nov 18, 2025

Copy link
Copy Markdown
Contributor

Cloudlog runs on CodeIgniter 3, which requires patches for PHP 8.4 compatibility. This PR implements the necessary CI3 core updates.

Changes

Dynamic Properties (PHP 8.2+)

  • Added #[AllowDynamicProperties] to CI_Model in system/core/Model.php
  • Allows CI3's magic property access pattern to continue working

E_STRICT Deprecation (PHP 8.4)

  • Added conditional check in system/core/Exceptions.php:
if (defined('E_STRICT')) {
    $this->levels[E_STRICT] = 'Runtime Notice';
}

Session ID Length (PHP 8.4)

  • Removed ini_set('session.sid_length') calls from system/libraries/Session/Session.php
  • Uses $sid_length internally for validation regex only
  • Follows CI3 community patch to avoid deprecated ini setting

mbstring.func_overload (PHP 8.0+)

  • Updated compatibility checks in 7 system files (Log, Email, Encryption, Session, etc.)
  • Handles removal of mbstring.func_overload in PHP 8.0

Application Code

No changes needed to /application folder - already PHP 8.4 compatible.

See PHP_8.4_COMPATIBILITY_SUMMARY.md for complete analysis.


✨ Let Copilot coding agent set things up for you — coding agent works faster and does higher quality work when set up for your repo.


Note

Updates CI3 core for PHP 8.4, strengthens session/auth handling, and enforces session validation across controllers with supporting docs.

  • Core (PHP 8.4 compatibility)
    • system/core/Exceptions.php: Guard E_STRICT with PHP version check.
    • system/libraries/Session/Session.php: Use array-based setcookie()/session_set_cookie_params() with SameSite; stop setting deprecated session.sid_length; keep internal SID validation.
    • system/libraries/Encryption.php: PHP 8 type-hint tweaks; null-safety for data/strlen.
    • system/libraries/Cache/Cache.php: Declare driver properties and lazy-load in is_supported() to avoid dynamic properties issues.
  • Auth/Session hardening
    • application/models/User_model.php: Restore session from encrypted backup cookie; stricter authorize() when user missing; improved logging.
    • application/controllers/User.php: Safer remember-me cookie handling, add encrypted backup cloudlog_auth cookie; ensure cookie cleanup on logout; minor logging and session commit.
  • Controllers (access control)
    • Many controllers add validate_session() (redirect to user/login when missing) before authorize(); simplified auth failures to dashboard redirect.
  • Docs
    • PHP_8.4_COMPATIBILITY_SUMMARY.md: Adds summary of applied changes and testing guidance.

Written by Cursor Bugbot for commit 445706e. This will update automatically on new commits. Configure here.

Copilot AI self-assigned this Nov 18, 2025
Copilot AI and others added 2 commits November 18, 2025 18:15
Co-authored-by: magicbug <84308+magicbug@users.noreply.github.com>
Co-authored-by: magicbug <84308+magicbug@users.noreply.github.com>
Copilot AI changed the title [WIP] Upgrade Cloudlog to PHP 8.4 compatibility Add PHP 8.4 compatibility to CodeIgniter 3 core Nov 18, 2025
Copilot AI requested a review from magicbug November 18, 2025 18:18
@magicbug

Copy link
Copy Markdown
Owner

@copilot The LOTW functionality will all work correct ?

Copilot AI commented Nov 18, 2025

Copy link
Copy Markdown
Contributor Author

@copilot The LOTW functionality will all work correct ?

Yes, LOTW functionality will work correctly. The changes only modify CodeIgniter 3 core framework files (system/ folder) for PHP 8.4 compatibility - specifically session ID handling.

LOTW code (application/controllers/Lotw.php and LotwCert model) is completely untouched. All dependencies remain functional:

  • ✅ OpenSSL (certificate parsing/signing) - unchanged
  • ✅ cURL (ARRL uploads) - unchanged
  • ✅ Database operations (mysqli) - unchanged
  • ✅ Session authentication - still works (internal change only)
  • LotwCert extends CI_Model - already has dynamic properties support

The session change removes a deprecated ini_set() call but keeps validation working internally. LOTW's usage of $this->session->userdata() is unaffected.

@magicbug
magicbug marked this pull request as ready for review November 18, 2025 18:22
Copilot AI review requested due to automatic review settings November 18, 2025 18:22

@cursor cursor Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This PR is being reviewed by Cursor Bugbot

Details

You are on the Bugbot Free tier. On this plan, Bugbot will review limited PRs each billing cycle.

To receive Bugbot reviews on all of your PRs, visit the Cursor dashboard to activate Pro and start your 14-day free trial.

Comment thread system/libraries/Session/Session.php
Comment thread system/libraries/Session/Session.php
@magicbug magicbug mentioned this pull request Nov 18, 2025

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull Request Overview

This PR adds PHP 8.4 compatibility to CodeIgniter 3's Session library by removing the deprecated ini_set('session.sid_length') call, along with comprehensive documentation of all PHP 8.4 compatibility changes applied to Cloudlog.

  • Removes ini_set('session.sid_length') call to avoid PHP 8.4 deprecation warnings
  • Adds documentation file summarizing all PHP 8.x compatibility changes (Dynamic Properties, E_STRICT, mbstring, etc.)
  • Uses calculated $sid_length value internally for session ID validation instead of setting it via INI

Reviewed Changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated 6 comments.

File Description
system/libraries/Session/Session.php Removes deprecated ini_set('session.sid_length') call; uses $sid_length variable for validation regex only
PHP_8.4_COMPATIBILITY_SUMMARY.md Comprehensive documentation of all PHP 8.x compatibility changes applied to Cloudlog's CI3 core

Comment thread PHP_8.4_COMPATIBILITY_SUMMARY.md
Comment thread PHP_8.4_COMPATIBILITY_SUMMARY.md
Comment thread PHP_8.4_COMPATIBILITY_SUMMARY.md
Comment thread system/libraries/Session/Session.php
Comment thread PHP_8.4_COMPATIBILITY_SUMMARY.md
Comment thread PHP_8.4_COMPATIBILITY_SUMMARY.md
Updated the type hint for the $params argument in encrypt and decrypt methods to ?array, allowing null values. This improves compatibility with optional parameters.
Adds backup authentication cookie to address session issues and enhances logging for debugging session and cookie states. Updates encryption methods to handle null/empty data, refines session validation logic, and modernizes cookie parameter usage for PHP compatibility. Also improves error reporting and session cleanup during logout.
Comment thread application/models/User_model.php Outdated
Adds session validation and debug logging to User controller's edit method. Updates User_model authorize() to handle missing users with error logging. Refactors Cache library to declare driver properties and ensure driver loading for PHP 8.2+ compatibility.
Inserted calls to user_model->validate_session() in all controller constructors to ensure user sessions are validated before authorization checks. This improves session handling and security across the application.
Comment thread application/controllers/User.php
Replaces manual setcookie calls with CodeIgniter's delete_cookie helper for 'remember_me' and 'cloudlog_auth' cookies during logout. This ensures proper handling of cookie prefixes and improves consistency with framework practices.
Comment thread system/libraries/Session/Session.php Outdated
Debug log statements were removed from User controller, User_model, and Session library to reduce log verbosity and improve performance. This cleanup helps focus logs on relevant events and avoids cluttering log files with routine session and authentication details.
@magicbug magicbug changed the title Add PHP 8.4 compatibility to CodeIgniter 3 core Add PHP 8.4 to Cloudlog Nov 18, 2025
} catch (Exception $e) {
log_message('error', 'Failed to decrypt backup auth cookie: ' . $e->getMessage());
}
}

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Bug: Authentication Restoration: The Zero Problem

In the backup auth cookie restoration logic, the condition if ($user_id) will fail if the decrypted user_id is 0, since 0 is falsy in PHP. This prevents users with user_id = 0 (if such exists) or similar edge cases from being restored. The check should verify non-null or non-empty explicitly rather than relying on truthiness.

Fix in Cursor Fix in Web

'secure' => $this->_config['cookie_secure'],
'httponly' => TRUE,
'samesite' => ''
]

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Bug: Cookie samesite Ambiguity Leads to Instability

Setting 'samesite' => '' (empty string) in cookie parameters may not behave as expected across different PHP and browser versions. An empty string for samesite is ambiguous; it should be either removed from the array, set to a valid value like 'Lax', or conditionally handled based on PHP version. This could cause session cookies to behave inconsistently.

Fix in Cursor Fix in Web

Added a session validation check in the User controller's index method. If the session is not valid, users are redirected to the login page before authorization is checked.
Introduces user session validation checks to all controller actions before authorization checks. This ensures users are redirected to the login page if their session is invalid, improving security and consistency across the application.
@magicbug magicbug closed this Nov 28, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants