| Name | Modified | Size | Downloads / Week |
|---|---|---|---|
| Parent folder | |||
| core_image.phar | 2026-04-26 | 209.5 kB | |
| e107_v2.x_to_2.3.4_upgrade.tar.gz | 2026-04-26 | 11.4 MB | |
| e107_v2.x_to_2.3.4_upgrade.tar.xz | 2026-04-26 | 8.3 MB | |
| e107_v2.x_to_2.3.4_upgrade.zip | 2026-04-26 | 12.2 MB | |
| e107_v1.x_to_2.3.4_upgrade.tar.xz | 2026-04-26 | 10.2 MB | |
| e107_2.3.4_full.tar.gz | 2026-04-26 | 13.6 MB | |
| e107_v1.x_to_2.3.4_upgrade.tar.gz | 2026-04-26 | 13.6 MB | |
| e107_v1.x_to_2.3.4_upgrade.zip | 2026-04-26 | 14.8 MB | |
| e107_2.3.4_full.tar.xz | 2026-04-26 | 10.2 MB | |
| e107_2.3.4_full.zip | 2026-04-26 | 14.7 MB | |
| e107 v2.3.4 source code.tar.gz | 2026-04-26 | 15.7 MB | |
| e107 v2.3.4 source code.zip | 2026-04-26 | 17.0 MB | |
| README.md | 2026-04-26 | 15.8 kB | |
| Totals: 13 Items | 141.9 MB | 5 | |
[!CAUTION] v2.3.4 is a bug-fix release for sites on v2.3.3 or earlier. Upgrade from v2.3.3 or earlier 2.x. If your site tracks the
masterbranch, you are already past v2.3.4, so installing it would be a downgrade. v2.4.x is planned to be the next forward step.[!IMPORTANT] v2.3.4 collects the most overdue work in the queue: security advisory fixes for password reset, comment editing, and Media Manager imports; the PHP 8.x compatibility patches that have been accumulating; and the bug fixes that really needed to ship. It's not a feature release; the goal is to give v2.3.x sites a stable point release they can adopt while v2.4 work continues separately.
Highlights
- [Security] Critical Broken Access Control on comment edit (GHSA-5w63-63rh-99q6).
comment.phppreviously allowed any authenticated user to overwrite another user's comment by passing that comment'sitemid. TheupdateComment()SQL now requires the row'scomment_author_idto match the editor'sUSERID, so cross-user edits return "Update Failed" instead of succeeding silently. (https://github.com/e107inc/e107/commit/23961a8f) - [Security] Server-Side Request Forgery in Media Manager imports (GHSA-92fr-7h4f-22pp).
e_file::getRemoteFile()andgetRemoteContent()now reject URLs that resolve to private, loopback, link-local, or otherwise reserved IP addresses, and limit cURL to HTTP/HTTPS. Sites that legitimately need to fetch from intranet hosts can opt back in by defininge_REMOTE_FILE_ALLOW_PRIVATEtotrue. (https://github.com/e107inc/e107/commit/5f98cc9f, https://github.com/e107inc/e107/commit/40b2d111) - [Security] Host Header Injection in password reset (GHSA-7pmw-jwvr-cq2x). The emailed password-reset link no longer trusts the incoming HTTP
Hostheader. Requests with aHostthat doesn't match the configuredsiteurlare rejected, andfpw.phpnow refuses to run at all ifsiteurlis unset rather than falling back to HTTP_HOST. (https://github.com/e107inc/e107/commit/04511f9f, https://github.com/e107inc/e107/commit/b0dee823, https://github.com/e107inc/e107/commit/c4f9f71b) - [Security] Privilege hardening. Media Manager preferences and avatar settings now require Main Admin. The default userclass visibility and edit permissions are also Main Admin by default (previously Admin). (#5489, [#5477])
- Admin area usability. Numerous fatal-error and rendering fixes across admin search, admin UI grids, mailout, polls, datetimepicker, phpinfo, and legacy admin pages. (#5211, [#5464], [#5271], [#5473])
- Email reliability. Fixes to CC handling, DKIM identity, persistent-recipient leakage across
sendEmail()calls, and IP logging in notifications. (#5498, [#5535], [#5545]) - PHP 8.x compatibility. Several warnings and fatals on PHP 8.0–8.5 removed from
db_verify,thumb.php,file_class,theme_handler, and rating-/forum-info rendering. (#4501, [#5443], [#5482]) - Forum info restored.
sc_foruminfonow renders active-user counts and the newest member again. Two long-standing bugs had been hiding the whole block: theSELECTfor the newest user was commented out, and thee_TRACKING_DISABLEDternary condition was inverted so the block was only shown when tracking was disabled, which is never the default. (https://github.com/e107inc/e107/commit/0e23f651, https://github.com/e107inc/e107/commit/54e4b9de)
[!NOTE] A note from the maintainer, @Deltik:
v2.4 is going to need more time before it's at the quality level the e107 community deserves. Here's what's upcoming:
- MyISAM → InnoDB as the default engine, for crash recovery, row-level locking, and proper transactions
- utf8mb3 → utf8mb4 for native emoji support and full Unicode in usernames, posts, and comments
- Implicit FULLTEXT indexes that work on InnoDB, so search no longer pins us to MyISAM
- JWT-backed CAPTCHAs where the challenge carries its own server-signed solution token, eliminating the need to stash state in a guest session
- No more sessions for guests. Every anonymous visitor today gets a server-side session row; that goes away.
- New admin area skin with a collapsible sidebar, badges, and mobile navigation
- Bootstrap 5.3 + FontAwesome 6 UI refresh across the front-end and admin
- Admin change history with revert for auditable database edits
- Custom domains per page and static URL mapping for editorial control over URLs
- Schema.org (JSON-LD) support for better SEO, with news schema baked in
- Sitemap index support for sites past the single-sitemap limit
- Image alt-attribute management in Media Manager
- Plugin test runner so plugin authors can ship PHPUnit/Codeception tests with their plugins
- The community PR backlog finally getting reviewed and processed
For Administrators
Added
- Misconfiguration error on
fpw.phpwhen thesiteurlpreference is empty, so admins get a visible signal instead of silently broken password-reset emails. (GHSA-7pmw-jwvr-cq2x, https://github.com/e107inc/e107/commit/04511f9f)
Changed
- Comment editing (security).
comment.updateComment()now scopes the SQL update to the editor's own user id, so cross-user comment edits via/comment.php?mode=editare rejected. Ref: GHSA-5w63-63rh-99q6. (https://github.com/e107inc/e107/commit/23961a8f) - Remote file fetching (security).
e_file::getRemoteFile()andgetRemoteContent()now block private, loopback, link-local, and reserved IP ranges by default and limit cURL to HTTP/HTTPS. Definee_REMOTE_FILE_ALLOW_PRIVATE = trueto opt back in for intranet/self-hosted use. Ref: GHSA-92fr-7h4f-22pp. (https://github.com/e107inc/e107/commit/5f98cc9f, https://github.com/e107inc/e107/commit/40b2d111) - Password reset (security).
fpw.phpnow refuses to process any request when thesiteurlpreference is unset, and builds the reset link from the pref directly rather than fromSITEURL(which could be derived fromHTTP_HOST). Ref: GHSA-7pmw-jwvr-cq2x. (https://github.com/e107inc/e107/commit/04511f9f) - Host header validation (security). The core URL bootstrap now rejects requests whose
Hostheader doesn't match the configuredsiteurlor thesite_hostsconfig entry, with subdomain support. Misconfigured setups now fail fast with a "Site Configuration Issue" message. (#5458, GHSA-7pmw-jwvr-cq2x, https://github.com/e107inc/e107/commit/b0dee823, https://github.com/e107inc/e107/commit/c4f9f71b) - Media Manager permissions (security). Media Manager Preferences and Avatar settings now require Main Admin. Media Category management is restricted to the
A2permission. (#5489) - Userclass defaults (security). Default userclass visibility and edit permissions now default to Main Admin instead of Admin. (#5477)
- Admin area theme gate. Non-bootstrap3 admin themes that were known to break the admin area are no longer accepted; the admin falls back to a working theme. (https://github.com/e107inc/e107/commit/3b7097e0)
- Site redirection.
www.→ bare-domain (and vice versa) handling was refactored out ofclass2.phpinto a dedicated method. (#5097)
Fixed
- Fatal errors on the admin search page (#5211), the admin-UI with custom method attribute+filter (#5464), the polls form column selector (#5271), and the plugin-repair extended-user-field path (#5483).
- Admin user area: avatar rendering (#5146), extended user fields restored after plugin refresh (#5483), unbanned users keeping "not verified" status (https://github.com/e107inc/e107/commit/e875515d), oversized navigation icons (#5345).
- Admin email/mailout: CC recipients added correctly, DKIM identity corrected, recipients no longer persist across multiple
sendEmail()calls, core prefs no longer stored on instance, mailout mailer-type restriction that was blocking pref saves. (#5498, [#5535], [#4123], [#5355]) - Admin log: query-speed optimization and indexing improvements, duplicate column removed from the rolling log, debug SQL query output. (#5490, [#5473])
- Admin phpinfo page: responsive layout, dark-on-dark text readability in modern-light theme, refactored rendering for theme compatibility, and sidebar menu added to legacy admin pages. (https://github.com/e107inc/e107/commit/730245ef, https://github.com/e107inc/e107/commit/929f5494, https://github.com/e107inc/e107/commit/48b30bc8)
- Password reset: Bootstrap 5 fpw template rendering. (#5336)
- Avatars: remote file checks (#5146, [#5387]), missing-avatar fallback (https://github.com/e107inc/e107/commit/295a5dad), default avatar rendering (https://github.com/e107inc/e107/commit/81ae03c3), MIME type handling for remote images (#5387),
.wavaudio (#5390) and video dimension handling (#5396) in the media parser. - Forum plugin:
newforumposts_menupage rendering (#5340), shortcodes now usee_HTTPforonline.phplinks (PR [#5340]),sc_foruminfonow renders the active-users block and the newest-member link (previously hidden by an inverted condition, with the underlying user lookup query commented out) (https://github.com/e107inc/e107/commit/0e23f651, https://github.com/e107inc/e107/commit/54e4b9de). - Ratings: widget renders cleanly for items that have not been rated yet; previously a missing rating row triggered a PHP warning that became a fatal on PHP 8.5. (https://github.com/e107inc/e107/commit/db358ca1)
- News plugin: language loading (#5465), body/extended search scope (#5523).
- Signup: COPPA links updated (#5121), duplicate
LAN_ERROR_*constants removed (#3438). - Notifications: IPv4 format on
user_ban_flood(#3612), IP populated innotify_class(#5545), mcp_token tracker ignored in application tracker (#5288). - Core boot: database warning in
class2.php(#5220), missing creation-log entry ID (#5317), config-hash handling (#5120), override-class conflict (#5114), SEF URL in the admin user-settings nav link (#5082). - Download plugin: duplicate assignment in
download_shortcodes(https://github.com/e107inc/e107/commit/c55de23b), missingDOWNLOAD_CAT_CAPTIONtemplate var initialization (https://github.com/e107inc/e107/commit/83bd620e, https://github.com/e107inc/e107/commit/a996b769). - Theme modern-dark: admin nav dropdown alignment. (#5406)
- File Inspector: graceful handling of
tmpfile()failure in phar loaders. (https://github.com/e107inc/e107/commit/da1b6f9c)
For Developers
Added
e_file::isUrlSafe($url)helper that validates a URL against private/reserved IP ranges and the HTTP/HTTPS scheme; called bygetRemoteFile()andgetRemoteContent(). IPv4-mapped IPv6 inputs (e.g.::ffff:127.0.0.1) are canonicalized to their IPv4 form before the range check so they cannot bypass it. Ref: GHSA-92fr-7h4f-22pp. (https://github.com/e107inc/e107/commit/5f98cc9f, https://github.com/e107inc/e107/commit/40b2d111)- Scaffold for
XmlAdminIconsinplugin_class(with rename guard inmedia_class). (#5295)
Changed
- Comment ownership check.
comment::updateComment()now constrains its SQL update tocomment_author_id = USERID. If you maintain a fork or plugin that calls this method on behalf of another user (moderator tooling, cron-based imports), expect those calls to silently no-op and refactor toward a moderator-aware helper. Ref: GHSA-5w63-63rh-99q6. (https://github.com/e107inc/e107/commit/23961a8f) e_fileSSRF defense.getRemoteFile()andgetRemoteContent()reject URLs that resolve to private/loopback/reserved IPs and any non-HTTP(S) scheme; cURLCURLOPT_PROTOCOLS/CURLOPT_REDIR_PROTOCOLSare pinned to HTTP/HTTPS. IPv4-mapped IPv6 addresses are canonicalized to IPv4 before the range check, so::ffff:10.0.0.1is treated as10.0.0.1and blocked. Definee_REMOTE_FILE_ALLOW_PRIVATE = trueine107_config.phpto bypass for legitimate intranet use. Ref: GHSA-92fr-7h4f-22pp. (https://github.com/e107inc/e107/commit/5f98cc9f, https://github.com/e107inc/e107/commit/40b2d111)- Password reset link construction.
fpw.phpbuilds the reset URL frome107::getPref('siteurl')directly instead of theSITEURLconstant. If you rely onSITEURLin similar contexts elsewhere, consider doing the same for anything that leaves the server (emails, webhooks, signed URLs). Ref: GHSA-7pmw-jwvr-cq2x. (https://github.com/e107inc/e107/commit/04511f9f) - Language file tooltips. Inline tooltip LAN constants standardized; some constants were consolidated. (#5465)
- Permissions schema. Media Manager and userclass permissions tightened — plugins that depended on Admin (
A) access to Media Manager prefs or avatars will now need Main Admin (0). (#5489, [#5477])
Fixed
- PHP 8.x compatibility. Fatal errors and warnings removed from
db_verify_class(#4501),thumb.php(https://github.com/e107inc/e107/commit/aaa71257),file_class(finfo/getimagesizewarnings) (#4501),theme_handlerempty path warning (#5482),validator_classfatal (#5443),rater::render()(https://github.com/e107inc/e107/commit/db358ca1) andsc_foruminfo()(https://github.com/e107inc/e107/commit/0e23f651, https://github.com/e107inc/e107/commit/8c390f4f) — PHP 8.5 promoted the "list()onfalse" case to a new fatal warning. e_parse::cleanHtml(). HTML5 void elements (<source>,<wbr>, etc.) are now normalized before serialization sosaveHTML()output is identical across libxml versions. libxml < 2.13 parsed<source>as non-void and captured following content as its child; the new pre-serialization pass promotes that content to a sibling, and a complementary post-saveHTMLpass strips the stray</source>(and other void-element closing tags) that older libxml still emits, so every libxml ends up with the spec-compliant form. (https://github.com/e107inc/e107/commit/b63d11a2, https://github.com/e107inc/e107/commit/87abb7f7)e_parse_class. Base64 image data-URL generation when a file is set (https://github.com/e107inc/e107/commit/bc6b51d4), avatar upload path handling (https://github.com/e107inc/e107/commit/105fe205).- Plugin builder. Admin links, table-name test typo. (https://github.com/e107inc/e107/commit/8c319720, https://github.com/e107inc/e107/commit/d241ab64, https://github.com/e107inc/e107/commit/d4a665a2)
- Form handler. Help-icon rendering, optgroup class identifiers, DST-related test stability. (#5214, [#5269])
- JavaScript. Invalid-element tab switch issue in admin/front JS. (#5230)
- Update routines. Clear update info after GitHub update in admin boot/db, minor
update_routines.phptweak (#5481), warning suppression inadmin/auth.phpfor invalid language values (#5443). - Caching. Fatal in
plugin_class.phpcache-path resolution. (#5484)