[DigitalPoint] App for Cloudflare®

[DigitalPoint] App for Cloudflare® 1.9.8.1

No permission to download
I am on 8.3.28 and it appears to be doing the same here. I even waited for a while refreshing the folder containing the uploaded test attachment. I would keep an eye if it does disappear after a few hours!
 
  • Sad
Reactions: rdn
I tested a video file, if it matters, as it's easier to locate on R2 than to test an image attachment.
If not a PHP 8.3/8.5 issue, could it be XF 2.3.8?

I am on 8.3.28 and it appears to be doing the same here
Do you have any attachment-related add-ons installed?
 
i do not think so except for this one. i only have it enabled for a few members and it is rarely used. reason why i never bothered to check this before lol.
 
It would be really nice to see in the CF analytics widget if AI bots are throwing a party on my site...
CloudFlare has AI Crawl Control Metrics. I found that Meta AI was getting ridiculous and needed to be blocked.
 
looks like it took around 50m but that image is gone from r2 bucket for me now! maybe it is being handled by a hourly cleanup cronjob?
 
I tested a video file, if it matters, as it's easier to locate on R2 than to test an image attachment.
If not a PHP 8.3/8.5 issue, could it be XF 2.3.8?


Do you have any attachment-related add-ons installed?
If you are talking about the underlying attachment data file, XenForo only deletes them hourly as part of the attachment clean up. Internally, XenForo treats attachments and attachment data differently (there is an xf_attachment table and a different xf_attachment_data table. When you delete an attachment, the attachment is immediately deleted, but the attachment data (which also includes the data file) is deleted as part of an hourly cleanup process.

If that's what you are seeing, it's nothing to do with the version of PHP, a lag with R2 or anything this addon is doing (it's the same behavior if you are using the local filesystem). It's just how XenForo works (and as always worked as far back as I can remember).
 
@digitalpoint is there any reason you haven't considered to an option to set up Edge TTL for
Code:
(http.request.uri.path.extension in {"css" "js" "png" "jpg" "jpeg" "gif" "ico" "svg" "webp" "woff" "woff2"})
?
 
@digitalpoint is there any reason you haven't considered to an option to set up Edge TTL for
Code:
(http.request.uri.path.extension in {"css" "js" "png" "jpg" "jpeg" "gif" "ico" "svg" "webp" "woff" "woff2"})
?

It already does (and has for a long time). This expression for a Cache Rule was generated by this addon for example:
Code:
(ends_with(http.request.uri.path, ".7z")) or (ends_with(http.request.uri.path, ".avi")) or (ends_with(http.request.uri.path, ".bz2")) or (ends_with(http.request.uri.path, ".csv")) or (ends_with(http.request.uri.path, ".css")) or (ends_with(http.request.uri.path, ".dmg")) or (ends_with(http.request.uri.path, ".doc")) or (ends_with(http.request.uri.path, ".docx")) or (ends_with(http.request.uri.path, ".eps")) or (ends_with(http.request.uri.path, ".exe")) or (ends_with(http.request.uri.path, ".gif")) or (ends_with(http.request.uri.path, ".gz")) or (ends_with(http.request.uri.path, ".ico")) or (ends_with(http.request.uri.path, ".iso")) or (ends_with(http.request.uri.path, ".jar")) or (ends_with(http.request.uri.path, ".jpeg")) or (ends_with(http.request.uri.path, ".jpg")) or (ends_with(http.request.uri.path, ".js")) or (ends_with(http.request.uri.path, ".mid")) or (ends_with(http.request.uri.path, ".midi")) or (ends_with(http.request.uri.path, ".mp3")) or (ends_with(http.request.uri.path, ".mp4")) or (ends_with(http.request.uri.path, ".mpeg")) or (ends_with(http.request.uri.path, ".ogg")) or (ends_with(http.request.uri.path, ".pdf")) or (ends_with(http.request.uri.path, ".ppt")) or (ends_with(http.request.uri.path, ".pptx")) or (ends_with(http.request.uri.path, ".rar")) or (ends_with(http.request.uri.path, ".tar")) or (ends_with(http.request.uri.path, ".svg")) or (ends_with(http.request.uri.path, ".svgz")) or (ends_with(http.request.uri.path, ".ttf")) or (ends_with(http.request.uri.path, ".webm")) or (ends_with(http.request.uri.path, ".webp")) or (ends_with(http.request.uri.path, ".woff")) or (ends_with(http.request.uri.path, ".woff2")) or (ends_with(http.request.uri.path, ".xls")) or (ends_with(http.request.uri.path, ".xlsx")) or (ends_with(http.request.uri.path, ".zip"))

It probably does make sense to clean it up though now that http.request.uri.path.extension is a thing, and probably could use some extra extensions like avif.
 
It already does (and has for a long time). This expression for a Cache Rule was generated by this addon for example:
That's weird, I don't see that cache rule on the CF account (even creating a new API key). What should I do to force the creation of it? By default it isn't created
 
Is this error related to this add-on?

  • ValueError: inet_pton(): Argument #1 ($ip) must not contain any null bytes
  • src/XF/Util/Ip.php:14
  • Generated by: Unknown account
  • Feb 8, 2026 at 4:23 PM

Stack trace​

#0 src/XF/Util/Ip.php(14): inet_pton([invalid])
#1 src/XF/Entity/Ip.php(25): XF\Util\Ip::stringToBinary([invalid], false)
#2 src/XF/Mvc/Entity/Entity.php(842): XF\Entity\Ip->verifyIp([invalid], 'ip', 6, Array)
#3 src/XF/Mvc/Entity/Entity.php(683): XF\Mvc\Entity\Entity->_verifyValueCustom([invalid], 'ip', 6, Array)
#4 src/XF/Mvc/Entity/Entity.php(618): XF\Mvc\Entity\Entity->set('ip', [invalid])
#5 src/XF/Repository/IpRepository.php(29): XF\Mvc\Entity\Entity->__set('ip', [invalid])
#6 src/XF/Service/Post/PreparerService.php(254): XF\Repository\IpRepository->logIp(25492, [invalid], 'post', 150769)
#7 src/XF/Service/Post/PreparerService.php(199): XF\Service\Post\PreparerService->writeIpLog([invalid])
#8 src/XF/Service/Thread/ReplierService.php(236): XF\Service\Post\PreparerService->afterInsert()
#9 src/addons/DigitalPoint/Analytics/XF/Service/Thread/Replier.php(9): XF\Service\Thread\ReplierService->_save()
#10 src/XF/Service/ValidateAndSavableTrait.php(42): DigitalPoint\Analytics\XF\Service\Thread\Replier->_save()
#11 src/XF/PreRegAction/Thread/Reply.php(47): XF\Service\Thread\ReplierService->save()
#12 src/XF/PreRegAction/AbstractHandler.php(132): XF\PreRegAction\Thread\Reply->executeAction(Object(XF\Entity\PreRegAction), Object(SV\SearchImprovements\XF\Entity\ThreadCollab), Object(SV\ElasticSearchEssentials\XF\Entity\User))
#13 src/XF.php(914): XF\PreRegAction\AbstractHandler->XF\PreRegAction\{closure}()
#14 src/XF/PreRegAction/AbstractHandler.php(125): XF::asVisitor(Object(SV\ElasticSearchEssentials\XF\Entity\User), Object(Closure))
#15 src/XF/Repository/PreRegActionRepository.php(96): XF\PreRegAction\AbstractHandler->completeAction(Object(XF\Entity\PreRegAction), Object(SV\ElasticSearchEssentials\XF\Entity\User))
#16 src/XF/Repository/PreRegActionRepository.php(126): XF\Repository\PreRegActionRepository->completeUserAction(Object(SV\ElasticSearchEssentials\XF\Entity\User), NULL)
#17 src/XF/ControllerPlugin/LoginPlugin.php(199): XF\Repository\PreRegActionRepository->completeUserActionIfPossible(Object(SV\ElasticSearchEssentials\XF\Entity\User), NULL)
#18 src/addons/SV/UserAutocomplete/XF/ControllerPlugin/Login.php(15): XF\ControllerPlugin\LoginPlugin->completeLogin(Object(SV\ElasticSearchEssentials\XF\Entity\User), true)
#19 src/XF/Pub/Controller/LoginController.php(183): SV\UserAutocomplete\XF\ControllerPlugin\Login->completeLogin(Object(SV\ElasticSearchEssentials\XF\Entity\User), true)
#20 src/addons/DigitalPoint/Analytics/XF/Pub/Controller/Login.php(13): XF\Pub\Controller\LoginController->actionLogin(Object(XF\Mvc\ParameterBag))
#21 src/XF/Mvc/Dispatcher.php(362): DigitalPoint\Analytics\XF\Pub\Controller\Login->actionLogin(Object(XF\Mvc\ParameterBag))
#22 src/XF/Mvc/Dispatcher.php(264): XF\Mvc\Dispatcher->dispatchClass('XF:Login', 'Login', Object(XF\Mvc\RouteMatch), Object(DigitalPoint\Cloudflare\XF\Pub\Controller\Login), NULL)
#23 src/XF/Mvc/Dispatcher.php(121): XF\Mvc\Dispatcher->dispatchFromMatch(Object(XF\Mvc\RouteMatch), Object(DigitalPoint\Cloudflare\XF\Pub\Controller\Login), NULL)
#24 src/XF/Mvc/Dispatcher.php(63): XF\Mvc\Dispatcher->dispatchLoop(Object(XF\Mvc\RouteMatch))
#25 src/XF/App.php(2824): XF\Mvc\Dispatcher->run()
#26 src/XF.php(814): XF\App->run()
#27 index.php(23): XF::runApp('XF\\Pub\\App')
#28 {main}

Request state​

array(4) {
["url"] => string(12) "/login/login"
["referrer"] => string(30) "https://rvforums.com/register/"
["_GET"] => array(0) {
}
["_POST"] => array(5) {
["_xfToken"] => string(8) "********"
["login"] => string(10) "[removed]"
["password"] => string(8) "********"
["remember"] => string(1) "1"
["_xfRedirect"] => string(30) "https://rvforums.com/register/"
}
}
 
Is this error related to this add-on?
It is not, although I do know what the issue is. PHP changed how inet_pton() works in PHP versions 8.5.1, 8.4.16, 8.3.29, 8.2.30 and 8.1.34

You can find the relevant bug report for XenForo here:


XenForo needs an update to it's XF/Util/Ip.php to make it compatible with the newer versions of PHP.
 
Back
Top Bottom