From 8b78253ddcf746b0ca4ccab4ca4de1f342637c84 Mon Sep 17 00:00:00 2001 From: Roman Kelesidis Date: Sat, 27 Jan 2024 10:33:02 +0700 Subject: [PATCH] Don't update download counter if attachment not exists (#1345) * Don't update download counter if attachment not exists * Update CHANGELOG.md * Update CHANGELOG.md * Updated --- CHANGELOG.md | 1 + bt/announce.php | 10 +- composer.lock | 377 +++++++++++++++++++++++++++++- dl.php | 13 +- library/attach_mod/displaying.php | 5 - 5 files changed, 381 insertions(+), 25 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index bf29cb9be..a27b1cc42 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,6 +20,7 @@ - Fixed auth(): empty $f_access [\#1329](https://github.com/torrentpier/torrentpier/pull/1329) ([belomaxorka](https://github.com/belomaxorka)) - Fixed HTTP 500 while cron running in server-side [\#1321](https://github.com/torrentpier/torrentpier/pull/1321) ([belomaxorka](https://github.com/belomaxorka)) - Sending debug errors to us 🌚 via Telegram bot [\#1323](https://github.com/torrentpier/torrentpier/pull/1323) ([belomaxorka](https://github.com/belomaxorka)) +- Don't update downloads counter if attachment not exists [\#1345](https://github.com/torrentpier/torrentpier/pull/1345) ([belomaxorka](https://github.com/belomaxorka)) - Minor improvements [\#1306](https://github.com/torrentpier/torrentpier/pull/1306), [\#1307](https://github.com/torrentpier/torrentpier/pull/1307), [\#1308](https://github.com/torrentpier/torrentpier/pull/1308), [\#1315](https://github.com/torrentpier/torrentpier/pull/1315), [\#1328](https://github.com/torrentpier/torrentpier/pull/1328), [\#1338](https://github.com/torrentpier/torrentpier/pull/1338) ([belomaxorka](https://github.com/belomaxorka)) - Some bugfixes [\#1326](https://github.com/torrentpier/torrentpier/pull/1326) ([belomaxorka](https://github.com/belomaxorka)) - Updated deps [\#1304](https://github.com/torrentpier/torrentpier/pull/1304), [\#1305](https://github.com/torrentpier/torrentpier/pull/1305) ([belomaxorka](https://github.com/belomaxorka)) diff --git a/bt/announce.php b/bt/announce.php index 29a2f4001..13e572f86 100644 --- a/bt/announce.php +++ b/bt/announce.php @@ -214,11 +214,11 @@ if ($lp_info) { // Check hybrid status if (!empty($row['info_hash']) && !empty($row['info_hash_v2'])) { - $stat_protocol = match($bb_cfg['tracker']['hybrid_stat_protocol']) { - 1 => $row['info_hash'], - 2 => substr($row['info_hash_v2'], 0, 20), - default => $row['info_hash'] - }; + $stat_protocol = match ($bb_cfg['tracker']['hybrid_stat_protocol']) { + 1 => $row['info_hash'], + 2 => substr($row['info_hash_v2'], 0, 20), + default => $row['info_hash'] + }; if ($info_hash !== $stat_protocol) { $hybrid_unrecord = true; // This allows us to announce only for one info-hash } diff --git a/composer.lock b/composer.lock index 4d900302e..5fd13e2d8 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "3e19fe76f513cea154195f8eb132bfa0", + "content-hash": "0d3ba700ad5fce7abfc08815599a39b3", "packages": [ { "name": "arokettu/bencode", @@ -136,6 +136,140 @@ }, "time": "2023-08-28T12:32:54+00:00" }, + { + "name": "arokettu/system-clock", + "version": "2.0.0", + "source": { + "type": "git", + "url": "https://github.com/arokettu/php-system-clock.git", + "reference": "e083272437c573b8b84d38aef3b89a1d07daca6f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/arokettu/php-system-clock/zipball/e083272437c573b8b84d38aef3b89a1d07daca6f", + "reference": "e083272437c573b8b84d38aef3b89a1d07daca6f", + "shasum": "" + }, + "require": { + "php": "^7.0 | ^8.0", + "psr/clock": "^1.0" + }, + "conflict": { + "arokettu/clock": "< 1.2 | >=2.0 <2.2" + }, + "provide": { + "psr/clock-implementation": "1.0" + }, + "require-dev": { + "sandfox.dev/code-standard": "^1.2022.06.29", + "squizlabs/php_codesniffer": "*", + "vimeo/psalm": "^4 | ^5" + }, + "type": "library", + "autoload": { + "classmap": [ + "SystemClock.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT-0" + ], + "authors": [ + { + "name": "Anton Smirnov", + "email": "sandfox@sandfox.me", + "homepage": "https://sandfox.me/", + "role": "developer" + } + ], + "description": "The smallest PSR-20 implementation", + "homepage": "https://sandfox.dev/php/clock/system-clock.html", + "keywords": [ + "clock", + "psr-20", + "smallest" + ], + "support": { + "chat": "https://gitter.im/arokettu/community", + "docs": "https://arokettu-clock.readthedocs.io/en/latest/system-clock.html", + "issues": "https://gitlab.com/sandfox/php-system-clock/-/issues", + "source": "https://gitlab.com/sandfox/php-system-clock" + }, + "time": "2023-06-02T16:38:36+00:00" + }, + { + "name": "arokettu/torrent-file", + "version": "5.2.1", + "source": { + "type": "git", + "url": "https://github.com/arokettu/torrent-file.git", + "reference": "7ad8f420836b849574ae62bef06ddbb0271b1ce6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/arokettu/torrent-file/zipball/7ad8f420836b849574ae62bef06ddbb0271b1ce6", + "reference": "7ad8f420836b849574ae62bef06ddbb0271b1ce6", + "shasum": "" + }, + "require": { + "arokettu/bencode": "^2.8 | ^3.1 | ^4.0", + "arokettu/system-clock": "^2.0", + "ext-hash": "*", + "nikic/iter": "^2.2", + "php": "^8.1", + "psr/clock": "^1.0", + "psr/event-dispatcher": "^1.0", + "symfony/filesystem": "^5.4 | ^6.0 | ^7.0", + "symfony/finder": "^5.4 | ^6.0 | ^7.0" + }, + "require-dev": { + "arokettu/clock": "^2.4", + "ext-openssl": "*", + "jetbrains/phpstorm-attributes": "^1.0", + "league/event": "^3.0", + "phpunit/phpunit": "^10.5.3", + "psy/psysh": "*", + "sandfox.dev/code-standard": "^1.2023.12.09", + "squizlabs/php_codesniffer": "*", + "vimeo/psalm": "^5.2" + }, + "suggest": { + "ext-openssl": "for signature logic" + }, + "type": "library", + "autoload": { + "psr-4": { + "Arokettu\\Torrent\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Anton Smirnov", + "email": "sandfox@sandfox.me", + "homepage": "https://sandfox.me/", + "role": "developer" + } + ], + "description": "A class to work with torrent files", + "homepage": "https://sandfox.dev/php/torrent-file.html", + "keywords": [ + "bittorrent", + "torrent", + "torrent-file" + ], + "support": { + "chat": "https://gitter.im/arokettu/community", + "docs": "https://torrent-file.readthedocs.io/", + "issues": "https://gitlab.com/sandfox/torrent-file/-/issues", + "source": "https://gitlab.com/sandfox/torrent-file" + }, + "time": "2023-12-17T19:59:55+00:00" + }, { "name": "bugsnag/bugsnag", "version": "v3.29.1", @@ -254,16 +388,16 @@ }, { "name": "composer/ca-bundle", - "version": "1.3.7", + "version": "1.4.0", "source": { "type": "git", "url": "https://github.com/composer/ca-bundle.git", - "reference": "76e46335014860eec1aa5a724799a00a2e47cc85" + "reference": "b66d11b7479109ab547f9405b97205640b17d385" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/ca-bundle/zipball/76e46335014860eec1aa5a724799a00a2e47cc85", - "reference": "76e46335014860eec1aa5a724799a00a2e47cc85", + "url": "https://api.github.com/repos/composer/ca-bundle/zipball/b66d11b7479109ab547f9405b97205640b17d385", + "reference": "b66d11b7479109ab547f9405b97205640b17d385", "shasum": "" }, "require": { @@ -275,7 +409,7 @@ "phpstan/phpstan": "^0.12.55", "psr/log": "^1.0", "symfony/phpunit-bridge": "^4.2 || ^5", - "symfony/process": "^2.5 || ^3.0 || ^4.0 || ^5.0 || ^6.0" + "symfony/process": "^2.5 || ^3.0 || ^4.0 || ^5.0 || ^6.0 || ^7.0" }, "type": "library", "extra": { @@ -310,7 +444,7 @@ "support": { "irc": "irc://irc.freenode.org/composer", "issues": "https://github.com/composer/ca-bundle/issues", - "source": "https://github.com/composer/ca-bundle/tree/1.3.7" + "source": "https://github.com/composer/ca-bundle/tree/1.4.0" }, "funding": [ { @@ -326,7 +460,7 @@ "type": "tidelift" } ], - "time": "2023-08-30T09:31:38+00:00" + "time": "2023-12-18T12:05:55+00:00" }, { "name": "doctrine/lexer", @@ -1384,6 +1518,58 @@ ], "time": "2023-10-27T15:32:31+00:00" }, + { + "name": "nikic/iter", + "version": "v2.4.0", + "source": { + "type": "git", + "url": "https://github.com/nikic/iter.git", + "reference": "09cd930fa9ff55747f34c7184532a5a1bd2385b1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nikic/iter/zipball/09cd930fa9ff55747f34c7184532a5a1bd2385b1", + "reference": "09cd930fa9ff55747f34c7184532a5a1bd2385b1", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "require-dev": { + "phpstan/phpstan": "^1.4", + "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0", + "vimeo/psalm": "^4.18 || ^5.13" + }, + "type": "library", + "autoload": { + "files": [ + "src/iter.func.php", + "src/iter.php", + "src/iter.rewindable.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Nikita Popov", + "email": "nikic@php.net" + } + ], + "description": "Iteration primitives using generators", + "keywords": [ + "functional", + "generator", + "iterator" + ], + "support": { + "issues": "https://github.com/nikic/iter/issues", + "source": "https://github.com/nikic/iter/tree/v2.4.0" + }, + "time": "2023-12-10T20:43:19+00:00" + }, { "name": "phpoption/phpoption", "version": "1.9.2", @@ -1459,6 +1645,54 @@ ], "time": "2023-11-12T21:59:55+00:00" }, + { + "name": "psr/clock", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/clock.git", + "reference": "e41a24703d4560fd0acb709162f73b8adfc3aa0d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/clock/zipball/e41a24703d4560fd0acb709162f73b8adfc3aa0d", + "reference": "e41a24703d4560fd0acb709162f73b8adfc3aa0d", + "shasum": "" + }, + "require": { + "php": "^7.0 || ^8.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Psr\\Clock\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for reading the clock.", + "homepage": "https://github.com/php-fig/clock", + "keywords": [ + "clock", + "now", + "psr", + "psr-20", + "time" + ], + "support": { + "issues": "https://github.com/php-fig/clock/issues", + "source": "https://github.com/php-fig/clock/tree/1.0.0" + }, + "time": "2022-11-25T14:36:26+00:00" + }, { "name": "psr/container", "version": "2.0.2", @@ -2098,6 +2332,133 @@ ], "time": "2023-05-23T14:45:45+00:00" }, + { + "name": "symfony/filesystem", + "version": "v6.4.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/filesystem.git", + "reference": "952a8cb588c3bc6ce76f6023000fb932f16a6e59" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/952a8cb588c3bc6ce76f6023000fb932f16a6e59", + "reference": "952a8cb588c3bc6ce76f6023000fb932f16a6e59", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-mbstring": "~1.8" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Filesystem\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides basic utilities for the filesystem", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/filesystem/tree/v6.4.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-07-26T17:27:13+00:00" + }, + { + "name": "symfony/finder", + "version": "v6.4.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/finder.git", + "reference": "11d736e97f116ac375a81f96e662911a34cd50ce" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/finder/zipball/11d736e97f116ac375a81f96e662911a34cd50ce", + "reference": "11d736e97f116ac375a81f96e662911a34cd50ce", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "symfony/filesystem": "^6.0|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Finder\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Finds files and directories via an intuitive fluent interface", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/finder/tree/v6.4.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-10-31T17:30:12+00:00" + }, { "name": "symfony/mailer", "version": "v6.4.2", diff --git a/dl.php b/dl.php index 4d77a9ffd..d28b5e836 100644 --- a/dl.php +++ b/dl.php @@ -26,14 +26,13 @@ function send_file_to_browser($attachment, $upload_dir) { global $bb_cfg, $lang; - $filename = ($upload_dir == '') ? $attachment['physical_filename'] : $upload_dir . '/' . $attachment['physical_filename']; - + $filename = $upload_dir . '/' . $attachment['physical_filename']; $gotit = false; - if (@!file_exists(realpath($filename))) { - bb_die($lang['ERROR_NO_ATTACHMENT'] . '

' . htmlCHR($filename)); - } else { + if (is_file(realpath($filename))) { $gotit = true; + } else { + bb_die($lang['ERROR_NO_ATTACHMENT'] . '

' . htmlCHR($filename)); } // Correct the mime type - we force application/octet-stream for all files, except images @@ -62,7 +61,7 @@ function send_file_to_browser($attachment, $upload_dir) // Now send the File Contents to the Browser if ($gotit) { - $size = @filesize($filename); + $size = filesize($filename); if ($size) { header("Content-length: $size"); } @@ -195,7 +194,7 @@ if (isset($download_mode[$attachment['extension']])) { } // Update download count -if (!$thumbnail) { +if (!$thumbnail && is_file(realpath($upload_dir . '/' . $attachment['physical_filename']))) { $sql = 'UPDATE ' . BB_ATTACHMENTS_DESC . ' SET download_count = download_count + 1 WHERE attach_id = ' . (int)$attachment['attach_id']; if (!DB()->sql_query($sql)) { diff --git a/library/attach_mod/displaying.php b/library/attach_mod/displaying.php index eff8d4adf..9616c22ef 100644 --- a/library/attach_mod/displaying.php +++ b/library/attach_mod/displaying.php @@ -181,11 +181,6 @@ function display_attachments($post_id) for ($i = 0; $i < $num_attachments; $i++) { $filename = $upload_dir . '/' . basename($attachments['_' . $post_id][$i]['physical_filename']); - // Checks the file existence - if (!is_file($filename)) { - continue; - } - $upload_image = ''; if ($attach_config['upload_img'] && empty($upload_icons[$attachments['_' . $post_id][$i]['extension']])) { $upload_image = '';