Журнал изменений

Фильтр и поиск

Всего: 872 Доступных коммитов | Отфильтровано: 872 Коммиты | Страница: 65 / 88
23.02.2026
Fix: Update WHOIS servers and harden connection handling
Автор: Eduard Laas | Дата: 14:58 23.02.2026

Replace deprecated WHOIS server hostnames with current IANA-registered endpoints and add proper timeout and error handling for fsockopen calls in the whois module to prevent hanging requests and PHP warnings.

Core changes:

  1. WHOIS server registry (modules/whois/index.php):
  2. ru: whois.ripn.net → whois.tcinet.ru
  3. com/net: whois.crsnic.net → whois.verisign-grs.com
  4. org: whois.publicinterestregistry.net → whois.publicinterestregistry.org
  5. info: whois.afilias.net → whois.nic.info
  6. de: whois.nic.de → whois.denic.de
  7. ws: whois.nic.ws → whois.website.ws
  8. cn: whois.cnnic.net.cn → whois.cnnic.cn
  9. in/co.in/firm.in/gen.in/ind.in/net.in/org.in: whois.registry.in → whois.nixiregistry.in
  10. Connection handling (modules/whois/index.php):
  11. Add 10s timeout to all fsockopen calls
  12. Replace @ suppression with set_error_handler/restore_error_handler
  13. Remove redundant double-connect retry in whois()
  14. Variable rename (admin/modules/admins.php):
  15. $aroute → $afile for consistency with codebase convention

Benefits:

  • WHOIS lookups no longer fail silently due to dead server hostnames
  • Requests no longer hang indefinitely on unreachable servers
  • No @ error suppression in compliance with project guardrails
Chore: Migrate AI config from .rules/ to .agents/
Автор: Eduard Laas | Дата: 00:02 23.02.2026

Update .gitignore and project structure to reflect the transition from the legacy .rules/ directory to the new .agents/ convention for storing AI-workflow configuration. The git-rules.md file is removed as its content is superseded by the updated agent knowledge base.

Core changes:

  1. Ignored paths (.gitignore):
  2. Add AGENT.md to ignored files

    • Prevents session-specific agent manifests from being tracked
  3. Add .agents/ directory to ignored paths

    • Covers the new convention for AI workflow files
  4. Remove .rules/ from ignored paths

    • Directory is no longer used; rule files moved to .agents/
  5. Removed file (.rules/git-rules.md):
  6. Delete legacy git commit rules document

    • Rules are now maintained inside the .agents/ knowledge base

Benefits:

  • Consistent project layout aligning with current AI workflow conventions
  • Eliminates stale .rules/ directory from the repository
  • .gitignore accurately reflects the real project structure

Technical notes:

  • No functional code changes; configuration and documentation only
  • Backward compatibility: unaffected
20.02.2026
Docs: Sync root documentation with 6.3 codebase state
Автор: Eduard Laas | Дата: 12:37 20.02.2026

Four root markdown files updated to reflect the current state of the 6.3 codebase: corrected typos, updated progress percentage, unified log file extensions to .log, and added the logging hardening changelog that was missing from SECURITY.md.

Core changes:

  1. README.md:
  2. Progress badge and text updated from ~65% to ~70%
  3. chmod example: storage/logs/.txt → storage/logs/.log
  4. Typo PREFIX_DB corrected (was REFIX_DB in SQL code example)
  5. CONTRIBUTING.md:
  6. chmod example: storage/logs/.txt → storage/logs/.log
  7. All code examples use $afile (current canonical variable)
  8. Typo PREFIX_DB corrected in SQL example
  9. SECURITY.md:
  10. Typo PREFIX_DB corrected in SQL example
  11. Module count corrected: "27 modules" → "23 admin modules"
  12. Added Logging & Error Handling Hardening subsection under v6.3.0:

    • set_exception_handler(), register_shutdown_function()
    • Extended set_error_handler() error levels
    • Log rotation fix, .txt → .log rename, addCompress() migration
    • Unified log_size 10 MB and filesize() >= operator
  13. UPGRADING.md:
  14. chmod example: storage/logs/.txt → storage/logs/.log
  15. Status text updated from ~65% to ~70%
  16. Typo PREFIX_DB corrected in SQL example
  17. Troubleshooting log paths corrected:

    • storage/logs/error.log → error_php.log and error_site.log
  18. Renamed Files section: added all 5 log file renames (.txt → .log)

Benefits:

  • Documentation is consistent with current codebase
  • No misleading typos or outdated paths in public-facing docs
  • Logging hardening changes are now traceable in SECURITY.md

Technical notes:

  • $afile is the current canonical variable (replaces deprecated $admin_file)
  • All log channels now use storage/logs/ with .log extension
Fix: Harden statistics block in system.php head()
Автор: Eduard Laas | Дата: 12:37 20.02.2026

The visitor counter / statistics block in head() contained several reliability bugs: unguarded file reads, magic flock numbers, broken date comparison, unsafe $con array access, and missing directory guard before monthly archive rename.

Core changes:

  1. File read guard (core/system.php):
  2. file($spath.'statistic.log') → file_exists() check before file()

    • Prevents PHP warning when statistic.log does not yet exist
  3. flock constants (core/system.php):
  4. Magic numbers 2 and 3 → LOCK_EX and LOCK_UN for clarity
  5. $con array fallbacks (core/system.php):
  6. All $con[N] accesses guarded with ?? 0 to prevent undefined offset notices

    • $con[1], $con[3], $con[4], $con[5], $con[6], $con[7]
  7. $guest variable fix (core/system.php):
  8. !empty($guest) 1 → $guest 1 (double-negation logical error corrected)
  9. Date comparison fix (core/system.php):
  10. String date comparison replaced with filemtime($slog) < strtotime('today midnight')

    • Correct cross-midnight detection without locale-dependent string compare
  11. Directory guard before monthly archive (core/system.php):
  12. mkdir($sdir, 0755, true) added if statistic/ subdirectory does not exist
  13. Guarded unlink() calls (core/system.php):
  14. unlink(ips.log) and unlink(user.log) wrapped in file_exists() checks

Benefits:

  • No PHP warnings on first-run or missing log files
  • Correct guest/session detection logic
  • Safe monthly archive creation even on fresh installations
  • Code intent made explicit via named constants

Technical notes:

  • statistic.log format unchanged: d.m.Y|hosts|hits|allhits|engines|refers|homereqs|users
  • COUNTER_DIR constant must point to storage/counter/
Fix: Harden logging system in security.php
Автор: Eduard Laas | Дата: 12:37 20.02.2026

All 6 log functions unified and hardened: paths moved to LOGS_DIR, extensions renamed from .txt to .log, rotation logic corrected with proper fclose-before-compress pattern, and exception/fatal-error handlers added for complete error coverage.

Core changes:

  1. Log path and extension migration (core/security.php):
  2. config/logs/.txt → LOGS_DIR/.log for all 6 channels

    • log.log, error_site.log, error_sql.log, hack.log, warn.log, error_php.log
  3. Log rotation hardening (core/security.php):
  4. zip_compress() + unlink() → addCompress(dir, src, name, 'auto', true, true)

    • Proper fclose() before compression in all 6 functions
    • fopen() re-check after rotation (fhandle !== false guard)
  5. log_size fallback unified to 10 MB (was 1 MB in log_report)
  6. filesize() comparison unified to >= (was inconsistent > vs >=)
  7. Archive timestamp format unified to Y-m-d_H-i-s
  8. Error handler extensions (core/security.php):
  9. set_exception_handler() added — catches all uncaught exceptions → error_php.log
  10. register_shutdown_function() added — catches E_ERROR, E_PARSE, E_CORE_ERROR, E_COMPILE_ERROR
  11. set_error_handler() extended: cases 256 (USER_ERROR), 512 (USER_WARNING), 1024 (USER_NOTICE), 4096 (RECOVERABLE_ERROR), 16384 (USER_DEPRECATED)

  12. Variable shadowing fixed in error_sql_log(): $log parameter renamed to $sql

Benefits:

  • Fatal errors and uncaught exceptions now logged reliably
  • No file corruption from compress-while-open race condition
  • All log channels use consistent paths and size limits
  • Archives carry second-precision timestamps to prevent collisions

Technical notes:

  • LOGS_DIR constant must point to storage/logs/
  • addCompress() with $del=true handles archive and source deletion atomically
  • error_php.log used for both exception handler and shutdown function
Chore: Expand .gitattributes to enforce LF for all text files
Автор: Eduard Laas | Дата: 10:11 20.02.2026

Adds explicit eol=lf rules for all relevant text file types and marks binary assets to prevent line ending conversion.

Core changes:

  1. .gitattributes:
  2. Added global fallback: * text=auto eol=lf
  3. Added eol=lf for html, css, js, json, sql, xml, tpl, md, txt, ini, yaml, .htaccess
  4. Added binary markers for images, fonts, archives, pdf

    • Prevents Git from treating binaries as text and corrupting them

Benefits:

  • Consistent LF line endings across all editors and OS
  • No CRLF creep on Windows checkouts
  • Binary files protected from line ending conversion
Fix: Harden error_reporting_log() in security.php
Автор: Eduard Laas | Дата: 10:04 20.02.2026

Fixes error suppression, inconsistent comparisons and naming in the PHP error log rotation block of error_reporting_log().

Core changes:

  1. error_reporting_log() (core/security.php):
  2. Removed @ from fopen() calls, replaced with explicit !== false checks

    • Follows rule 2.8: never use error suppression operator
  3. Renamed \$path -> \$log for consistency with addErrorFile() in system.php
  4. Moved \$cfg = \$conf['security'] ?? [] inside if (\$error_write) block

    • \$cfg only needed when actually writing; skipped for NOTICE etc.
  5. Extracted \$max = \$cfg['log_size'] ?? 10485760 as named variable
  6. Changed filesize comparison > to >= (consistent with addErrorFile())
  7. Replaced \$ts/\$rot pattern with clean \$safe via pathinfo()

    • Result: error_php_2024-01-01_12-00-00.zip instead of error_php.log.20240101_120000.zip
  8. Updated addCompress() call to use \$bak=true for .bak fallback

Benefits:

  • No error suppression antipattern
  • Consistent variable naming across both log rotation functions
  • Cleaner archive filenames without double extension
  • .bak fallback guaranteed when no compression available

Technical notes:

  • Behavior identical when fopen() succeeds and compression is available
  • \$cfg scoped to write path only: minor efficiency gain on non-write errors
Fix: Harden addCompress(), addErrorFile() and addFile() logic
Автор: Eduard Laas | Дата: 10:03 20.02.2026

Addresses multiple correctness and safety issues in the compression and error-logging pipeline discovered during systematic code review.

Core changes:

  1. addCompress() (core/system.php):
  2. Added bool \$bak = false parameter for .bak fallback on no-compression

    • When \$algo === 'none' and \$bak=true: rename source to name.bak
    • Replaces broken array_intersect_key logic in callers
  3. Replaced temp-file ZIP string path with addFromString()

    • Eliminates temp file creation, write, and cleanup risk
  4. Added unlink() result check in ZIP file and gz/bz2 delete branches

    • Logs _ERR_DELETE on failure instead of silently ignoring
  5. addErrorFile() (core/system.php):
  6. Added static \$running recursion guard

    • Prevents addCompress->addErrorFile->addCompress infinite loop
    • Falls back to error_log() on recursive call
  7. Replaced hardcoded 10485760 with \$conf['security']['log_size']
  8. Replaced broken checkCompress()/array_intersect_key rotation block

    • New: addCompress(..., 'auto', true, true) with .bak fallback
  9. addFile() (core/system.php):
  10. Fixed bool-to-int coercion: return addCompress() ? 0 : 3

    • Previously false coerced to 0, masking compression errors
  11. addBackupDb() (core/system.php):
  12. Return value of addCompress() now checked

    • Returns false on compression failure instead of silently succeeding

Benefits:

  • Eliminates infinite recursion risk in error logging
  • Consistent error codes in addFile() (0=ok, 1=read, 2=write, 3=compress)
  • No temp file leaks in ZIP string compression path
  • .bak fallback guaranteed when no compression extension available

Technical notes:

  • \$bak parameter default false: backward compatible for all existing callers
  • Recursion guard uses static variable: resets correctly after each call
Refactor: Harden checkFileChmod() with ownership and writability checks
Автор: Eduard Laas | Дата: 08:57 20.02.2026

Replaces the unconditional chmod() calls with an ownership-aware guard using posix_geteuid(). This prevents the function from silently failing or changing permissions on files owned by another process, and eliminates string-based octal literals in favor of proper octdec() conversion for reliable permission mode handling.

Core changes:

  1. Permission checker (core/system.php):
  2. Replaced string octal '0'.\$chm with octdec((string)\$chm)

    • Ensures valid integer mode is passed to chmod()
  3. Added posix_geteuid() call with graceful fallback (-1) when unavailable
  4. Added file_put_contents() return value check before proceeding
  5. Added fileowner() comparison against current process UID

    • chmod() on temp probe file only when owned by current process
    • Falls back to is_writable() when posix functions unavailable
  6. Applied same ownership check before chmod() on target directory

    • \$cdir guards chmod(\$dir, \$mode) analogously to probe file guard
  7. Moved unlink() inside the file_put_contents() success branch

    • Prevents unlink() attempt when file creation failed

Benefits:

  • Eliminates silent chmod() failures on foreign-owned files
  • Correct permission integer conversion via octdec()
  • Robust probe-file lifecycle (create, test, cleanup on success only)

Technical notes:

  • posix_geteuid() may not be available on Windows; -1 signals fallback
  • Behavior unchanged when process owns all files and chmod is supported
Fix: Guard nullable config keys in admininfo() and shop module
Автор: Eduard Laas | Дата: 08:57 20.02.2026

Prevents undefined index notices when \$confst or \$confr are not initialized or incomplete. The shop module similarly guards against a missing 'defis' key in \$confso by falling back to \$conf['defis'] and then a safe default. Both fixes align with the project's pattern of defensive config access.

Core changes:

  1. Admin info panel (core/admin.php):
  2. Added \$confst to global variable declaration in admininfo()

    • Was missing, causing potential undefined variable notice
  3. Guarded \$confst['stat'] with is_array() + isset() check

    • Falls back to 0 if key is absent
  4. Guarded \$confr['refer'] with is_array() + isset() check

    • Falls back to 0 if key is absent
  5. Shop module (modules/shop/index.php):
  6. Replaced direct \$confso['defis'] with null-coalescing expression

    • Falls back to \$conf['defis'] then '-' as safe default
    • Applied consistently in shop() and view() functions

Benefits:

  • Eliminates undefined index PHP notices in admin dashboard
  • Safe fallback for missing shop separator config
  • Consistent defensive config access pattern

Technical notes:

  • No functional behavior change when config keys are present
  • Backward compatible with existing config structures

Всего: 872 на 88 страницах по 10 на каждой странице

1 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 88

Хотите опробовать SLAED CMS в действии?

Идеи и предложения
Обратная связь