The flag ipb_allow_usertalk should be set to false for every block made on a wiki where $wgBlockAllowsUTEdit is false. This was inadvertently changed in 02cb7aefef02d - since then, the flag is true if the config is false. (This only affects blocks made via SpecialBlock::processForm.)
In other words, the block appears to let the blocked user edit their own talk page, but the config prohibits blocked users from editing their own talk pages. Luckily, the config "wins", since the config overrides the flag when checking if a blocked user can edit their talk page. So despite the bug, users are still blocked from their own talk page in practice.
However, in the log and on Special:BlockList, it looks as though the user can edit their own talk page. Also, if a wiki decides to change $wgBlockAllowsUTEdit from false to true, then users blocked before 02cb7aefef02d will still be blocked from editing their talk page, but those blocked after will now be able to edit their talk page.
We should fix the flag to match the config.
This is particularly needed ahead of T189073, in which we refactor SpecialBlock::processForm into a blocking service. Currently, extensions are setting the correct flags, but once they start calling the new service, they will be setting the wrong flag, unless we fix this first. We encountered this problem in T249562: Checkuser should allow reblocking users and tag pages even if users are already blocked.
SpecialBlock::processForm looks at the form field named 'DisableUTEdit', the config $wgBlockAllowsUTEditand whether the UserTalk namespace is blocked. It sets ipb_allow_usertalk based on these.
For the sake of testing and reviewing, here is what should happen (was discussed in T210475):
- If the UserTalk namespace is not blocked, then ipb_allow_usertalk is always true
- If the UserTalk namespace is blocked and $wgBlockAllowsUTEdit is false, then ipb_allow_usertalk is always false (this is the bug - it's currently always true)
- Otherwise, ipb_allow_usertalk is determined by the form field
(NB all sitewide blocks and some partial blocks block the UserTalk namespace.)