Page MenuHomePhabricator

PHP Warning: Undefined array key "HTMLFormFieldCloner1x" / PHP Warning: Trying to access array offset on null
Closed, ResolvedPublicPRODUCTION ERROR

Description

Steps to reproduce

  • install Extension:SecurePoll
  • set yourself to be an election administrator
  • visit Special:SecurePoll/create
  • fill out the form, making sure to select "histogram range" as the poll type
  • add some questions and options
  • click "add another option". the page will refresh

What happens?

Warning: Undefined array key "HTMLFormFieldCloner1x" in /var/www/html/w/includes/htmlform/fields/HTMLFormFieldCloner.php on line 234

Warning: Trying to access array offset on null in /var/www/html/w/includes/htmlform/fields/HTMLFormFieldCloner.php on line 236

image.png (544×2 px, 136 KB)

What should happen instead?

  • no PHP warnings
Error
normalized_message
[{reqId}] {exception_url}   PHP Warning: Undefined array key "HTMLFormFieldCloner1x"
FrameLocationCall
from/srv/mediawiki/php-1.44.0-wmf.24/includes/htmlform/fields/HTMLFormFieldCloner.php(235)
#0/srv/mediawiki/php-1.44.0-wmf.24/includes/htmlform/fields/HTMLFormFieldCloner.php(235)MediaWiki\Exception\MWExceptionHandler::handleError(int, string, string, int)
#1/srv/mediawiki/php-1.44.0-wmf.24/includes/htmlform/HTMLFormField.php(216)MediaWiki\HTMLForm\Field\HTMLFormFieldCloner->extractFieldData(MediaWiki\HTMLForm\Field\HTMLCheckField, array)
#2/srv/mediawiki/php-1.44.0-wmf.24/includes/htmlform/HTMLFormField.php(329)MediaWiki\HTMLForm\HTMLFormField->getNearestFieldValue(array, string, bool, bool)
#3/srv/mediawiki/php-1.44.0-wmf.24/includes/htmlform/HTMLFormField.php(317)MediaWiki\HTMLForm\HTMLFormField->checkStateRecurse(array, array)
#4/srv/mediawiki/php-1.44.0-wmf.24/includes/htmlform/HTMLFormField.php(395)MediaWiki\HTMLForm\HTMLFormField->checkStateRecurse(array, array)
#5/srv/mediawiki/php-1.44.0-wmf.24/includes/htmlform/HTMLFormField.php(736)MediaWiki\HTMLForm\HTMLFormField->isHidden(array)
#6/srv/mediawiki/php-1.44.0-wmf.24/includes/htmlform/HTMLFormField.php(761)MediaWiki\HTMLForm\HTMLFormField->getDiv(null)
#7/srv/mediawiki/php-1.44.0-wmf.24/includes/htmlform/fields/HTMLFormFieldCloner.php(530)MediaWiki\HTMLForm\HTMLFormField->getOOUI(null)
#8/srv/mediawiki/php-1.44.0-wmf.24/includes/htmlform/fields/HTMLFormFieldCloner.php(566)MediaWiki\HTMLForm\Field\HTMLFormFieldCloner->getInputOOUIForKey(string, array)
#9/srv/mediawiki/php-1.44.0-wmf.24/includes/htmlform/HTMLFormField.php(754)MediaWiki\HTMLForm\Field\HTMLFormFieldCloner->getInputOOUI(array)
#10/srv/mediawiki/php-1.44.0-wmf.24/includes/htmlform/OOUIHTMLForm.php(177)MediaWiki\HTMLForm\HTMLFormField->getOOUI(array)
#11/srv/mediawiki/php-1.44.0-wmf.24/includes/htmlform/HTMLForm.php(1873)MediaWiki\HTMLForm\OOUIHTMLForm->formatField(MediaWiki\HTMLForm\Field\HTMLFormFieldCloner, array)
#12/srv/mediawiki/php-1.44.0-wmf.24/includes/htmlform/HTMLForm.php(1447)MediaWiki\HTMLForm\HTMLForm->displaySection(array, string)
#13/srv/mediawiki/php-1.44.0-wmf.24/includes/htmlform/OOUIHTMLForm.php(285)MediaWiki\HTMLForm\HTMLForm->getBody()
#14/srv/mediawiki/php-1.44.0-wmf.24/includes/htmlform/HTMLForm.php(1258)MediaWiki\HTMLForm\OOUIHTMLForm->getBody()
#15/srv/mediawiki/php-1.44.0-wmf.24/includes/htmlform/HTMLForm.php(1206)MediaWiki\HTMLForm\HTMLForm->getHTML(bool)
#16/srv/mediawiki/php-1.44.0-wmf.24/extensions/SecurePoll/includes/Pages/CreatePage.php(544)MediaWiki\HTMLForm\HTMLForm->displayForm(bool)
#17/srv/mediawiki/php-1.44.0-wmf.24/extensions/SecurePoll/includes/SpecialSecurePoll.php(66)MediaWiki\Extension\SecurePoll\Pages\CreatePage->execute(array)
#18/srv/mediawiki/php-1.44.0-wmf.24/includes/specialpage/SpecialPage.php(729)MediaWiki\Extension\SecurePoll\SpecialSecurePoll->execute(string)
#19/srv/mediawiki/php-1.44.0-wmf.24/includes/specialpage/SpecialPageFactory.php(1738)MediaWiki\SpecialPage\SpecialPage->run(string)
#20/srv/mediawiki/php-1.44.0-wmf.24/includes/actions/ActionEntryPoint.php(499)MediaWiki\SpecialPage\SpecialPageFactory->executePath(string, MediaWiki\Context\RequestContext)
#21/srv/mediawiki/php-1.44.0-wmf.24/includes/actions/ActionEntryPoint.php(143)MediaWiki\Actions\ActionEntryPoint->performRequest()
#22/srv/mediawiki/php-1.44.0-wmf.24/includes/MediaWikiEntryPoint.php(202)MediaWiki\Actions\ActionEntryPoint->execute()
#23/srv/mediawiki/php-1.44.0-wmf.24/index.php(58)MediaWiki\MediaWikiEntryPoint->run()
#24/srv/mediawiki/w/index.php(3)require(string)
#25{main}
Impact
Notes
Error
normalized_message
[{reqId}] {exception_url}   PHP Warning: Trying to access array offset on value of type null
FrameLocationCall
from/srv/mediawiki/php-1.44.0-wmf.24/includes/htmlform/fields/HTMLFormFieldCloner.php(237)
#0/srv/mediawiki/php-1.44.0-wmf.24/includes/htmlform/fields/HTMLFormFieldCloner.php(237)MediaWiki\Exception\MWExceptionHandler::handleError(int, string, string, int)
#1/srv/mediawiki/php-1.44.0-wmf.24/includes/htmlform/HTMLFormField.php(216)MediaWiki\HTMLForm\Field\HTMLFormFieldCloner->extractFieldData(MediaWiki\HTMLForm\Field\HTMLCheckField, null)
#2/srv/mediawiki/php-1.44.0-wmf.24/includes/htmlform/HTMLFormField.php(329)MediaWiki\HTMLForm\HTMLFormField->getNearestFieldValue(array, string, bool, bool)
#3/srv/mediawiki/php-1.44.0-wmf.24/includes/htmlform/HTMLFormField.php(317)MediaWiki\HTMLForm\HTMLFormField->checkStateRecurse(array, array)
#4/srv/mediawiki/php-1.44.0-wmf.24/includes/htmlform/HTMLFormField.php(395)MediaWiki\HTMLForm\HTMLFormField->checkStateRecurse(array, array)
#5/srv/mediawiki/php-1.44.0-wmf.24/includes/htmlform/HTMLFormField.php(736)MediaWiki\HTMLForm\HTMLFormField->isHidden(array)
#6/srv/mediawiki/php-1.44.0-wmf.24/includes/htmlform/HTMLFormField.php(761)MediaWiki\HTMLForm\HTMLFormField->getDiv(null)
#7/srv/mediawiki/php-1.44.0-wmf.24/includes/htmlform/fields/HTMLFormFieldCloner.php(530)MediaWiki\HTMLForm\HTMLFormField->getOOUI(null)
#8/srv/mediawiki/php-1.44.0-wmf.24/includes/htmlform/fields/HTMLFormFieldCloner.php(566)MediaWiki\HTMLForm\Field\HTMLFormFieldCloner->getInputOOUIForKey(string, array)
#9/srv/mediawiki/php-1.44.0-wmf.24/includes/htmlform/HTMLFormField.php(754)MediaWiki\HTMLForm\Field\HTMLFormFieldCloner->getInputOOUI(array)
#10/srv/mediawiki/php-1.44.0-wmf.24/includes/htmlform/OOUIHTMLForm.php(177)MediaWiki\HTMLForm\HTMLFormField->getOOUI(array)
#11/srv/mediawiki/php-1.44.0-wmf.24/includes/htmlform/HTMLForm.php(1873)MediaWiki\HTMLForm\OOUIHTMLForm->formatField(MediaWiki\HTMLForm\Field\HTMLFormFieldCloner, array)
#12/srv/mediawiki/php-1.44.0-wmf.24/includes/htmlform/HTMLForm.php(1447)MediaWiki\HTMLForm\HTMLForm->displaySection(array, string)
#13/srv/mediawiki/php-1.44.0-wmf.24/includes/htmlform/OOUIHTMLForm.php(285)MediaWiki\HTMLForm\HTMLForm->getBody()
#14/srv/mediawiki/php-1.44.0-wmf.24/includes/htmlform/HTMLForm.php(1258)MediaWiki\HTMLForm\OOUIHTMLForm->getBody()
#15/srv/mediawiki/php-1.44.0-wmf.24/includes/htmlform/HTMLForm.php(1206)MediaWiki\HTMLForm\HTMLForm->getHTML(bool)
#16/srv/mediawiki/php-1.44.0-wmf.24/extensions/SecurePoll/includes/Pages/CreatePage.php(544)MediaWiki\HTMLForm\HTMLForm->displayForm(bool)
#17/srv/mediawiki/php-1.44.0-wmf.24/extensions/SecurePoll/includes/SpecialSecurePoll.php(66)MediaWiki\Extension\SecurePoll\Pages\CreatePage->execute(array)
#18/srv/mediawiki/php-1.44.0-wmf.24/includes/specialpage/SpecialPage.php(729)MediaWiki\Extension\SecurePoll\SpecialSecurePoll->execute(string)
#19/srv/mediawiki/php-1.44.0-wmf.24/includes/specialpage/SpecialPageFactory.php(1738)MediaWiki\SpecialPage\SpecialPage->run(string)
#20/srv/mediawiki/php-1.44.0-wmf.24/includes/actions/ActionEntryPoint.php(499)MediaWiki\SpecialPage\SpecialPageFactory->executePath(string, MediaWiki\Context\RequestContext)
#21/srv/mediawiki/php-1.44.0-wmf.24/includes/actions/ActionEntryPoint.php(143)MediaWiki\Actions\ActionEntryPoint->performRequest()
#22/srv/mediawiki/php-1.44.0-wmf.24/includes/MediaWikiEntryPoint.php(202)MediaWiki\Actions\ActionEntryPoint->execute()
#23/srv/mediawiki/php-1.44.0-wmf.24/index.php(58)MediaWiki\MediaWikiEntryPoint->run()
#24/srv/mediawiki/w/index.php(3)require(string)
#25{main}
Impact
Notes

Event Timeline

Restricted Application added a subscriber: Aklapper. · View Herald Transcript

Got this in localhost testing today. Looks like the bug is still around.

image.png (1×1 px, 125 KB)

image.png (1×2 px, 98 KB)

image.png (1×2 px, 82 KB)

image.png (561×2 px, 30 KB)

Error
  • mwversion: 1.45.0-wmf.21
  • timestamp: 2025-10-06T20:37:43.916Z
  • phpversion: 8.1.33
  • reqId: 8e6bf2b0-90a2-4d7e-8f3e-9fbff011e440
  • Find reqId in Logstash
normalized_message
[{reqId}] {exception_url}   PHP Warning: Undefined array key "HTMLFormFieldCloner1x"
FrameLocationCall
from/srv/mediawiki/php-1.45.0-wmf.21/includes/htmlform/fields/HTMLFormFieldCloner.php(234)
#0/srv/mediawiki/php-1.45.0-wmf.21/includes/htmlform/fields/HTMLFormFieldCloner.php(234)MediaWiki\Exception\MWExceptionHandler::handleError(int, string, string, int)
#1/srv/mediawiki/php-1.45.0-wmf.21/includes/htmlform/HTMLFormField.php(216)MediaWiki\HTMLForm\Field\HTMLFormFieldCloner->extractFieldData(MediaWiki\HTMLForm\Field\HTMLCheckField, array)
#2/srv/mediawiki/php-1.45.0-wmf.21/includes/htmlform/HTMLFormField.php(329)MediaWiki\HTMLForm\HTMLFormField->getNearestFieldValue(array, string, bool, bool)
#3/srv/mediawiki/php-1.45.0-wmf.21/includes/htmlform/HTMLFormField.php(317)MediaWiki\HTMLForm\HTMLFormField->checkStateRecurse(array, array)
#4/srv/mediawiki/php-1.45.0-wmf.21/includes/htmlform/HTMLFormField.php(395)MediaWiki\HTMLForm\HTMLFormField->checkStateRecurse(array, array)
#5/srv/mediawiki/php-1.45.0-wmf.21/includes/htmlform/HTMLFormField.php(736)MediaWiki\HTMLForm\HTMLFormField->isHidden(array)
#6/srv/mediawiki/php-1.45.0-wmf.21/includes/htmlform/HTMLFormField.php(761)MediaWiki\HTMLForm\HTMLFormField->getDiv(null)
#7/srv/mediawiki/php-1.45.0-wmf.21/includes/htmlform/fields/HTMLFormFieldCloner.php(538)MediaWiki\HTMLForm\HTMLFormField->getOOUI(null)
#8/srv/mediawiki/php-1.45.0-wmf.21/includes/htmlform/fields/HTMLFormFieldCloner.php(580)MediaWiki\HTMLForm\Field\HTMLFormFieldCloner->getInputOOUIForKey(string, array)
#9/srv/mediawiki/php-1.45.0-wmf.21/includes/htmlform/HTMLFormField.php(754)MediaWiki\HTMLForm\Field\HTMLFormFieldCloner->getInputOOUI(array)
#10/srv/mediawiki/php-1.45.0-wmf.21/includes/htmlform/OOUIHTMLForm.php(179)MediaWiki\HTMLForm\HTMLFormField->getOOUI(array)
#11/srv/mediawiki/php-1.45.0-wmf.21/includes/htmlform/HTMLForm.php(1883)MediaWiki\HTMLForm\OOUIHTMLForm->formatField(MediaWiki\HTMLForm\Field\HTMLFormFieldCloner, array)
#12/srv/mediawiki/php-1.45.0-wmf.21/includes/htmlform/HTMLForm.php(1453)MediaWiki\HTMLForm\HTMLForm->displaySection(array, string)
#13/srv/mediawiki/php-1.45.0-wmf.21/includes/htmlform/OOUIHTMLForm.php(289)MediaWiki\HTMLForm\HTMLForm->getBody()
#14/srv/mediawiki/php-1.45.0-wmf.21/includes/htmlform/HTMLForm.php(1260)MediaWiki\HTMLForm\OOUIHTMLForm->getBody()
#15/srv/mediawiki/php-1.45.0-wmf.21/includes/htmlform/HTMLForm.php(1208)MediaWiki\HTMLForm\HTMLForm->getHTML(bool)
#16/srv/mediawiki/php-1.45.0-wmf.21/extensions/SecurePoll/includes/Pages/CreatePage.php(516)MediaWiki\HTMLForm\HTMLForm->displayForm(bool)
#17/srv/mediawiki/php-1.45.0-wmf.21/extensions/SecurePoll/includes/SpecialSecurePoll.php(61)MediaWiki\Extension\SecurePoll\Pages\CreatePage->execute(array)
#18/srv/mediawiki/php-1.45.0-wmf.21/includes/specialpage/SpecialPage.php(725)MediaWiki\Extension\SecurePoll\SpecialSecurePoll->execute(string)
#19/srv/mediawiki/php-1.45.0-wmf.21/includes/specialpage/SpecialPageFactory.php(1744)MediaWiki\SpecialPage\SpecialPage->run(string)
#20/srv/mediawiki/php-1.45.0-wmf.21/includes/actions/ActionEntryPoint.php(499)MediaWiki\SpecialPage\SpecialPageFactory->executePath(string, MediaWiki\Context\RequestContext)
#21/srv/mediawiki/php-1.45.0-wmf.21/includes/actions/ActionEntryPoint.php(143)MediaWiki\Actions\ActionEntryPoint->performRequest()
#22/srv/mediawiki/php-1.45.0-wmf.21/includes/MediaWikiEntryPoint.php(198)MediaWiki\Actions\ActionEntryPoint->execute()
#23/srv/mediawiki/php-1.45.0-wmf.21/index.php(58)MediaWiki\MediaWikiEntryPoint->run()
#24/srv/mediawiki/w/index.php(3)require(string)
#25{main}
Impact
Notes

Change #1204640 had a related patch set uploaded (by Aklapper; author: Chuiimuii_ofc):

[mediawiki/core@master] HTMLForm: Fix 'Trying to access array offset on null' in HTMLFormFieldCloner

https://gerrit.wikimedia.org/r/1204640

Aklapper renamed this task from PHP Warning: Undefined array key "HTMLFormFieldCloner1x" to PHP Warning: Undefined array key "HTMLFormFieldCloner1x" / PHP Warning: Trying to access array offset on null.Nov 12 2025, 7:30 PM

The URL being loaded is seemingly https://zh.wikipedia.org/wiki/Special:SecurePoll/edit/435 so might need to get some some export from that -- @jrbs are you able to help with getting that?

Change #1204937 had a related patch set uploaded (by Chuiimuii_ofc; author: Chuiimuii_ofc):

[mediawiki/core@master] Fix production error in HTMLFormFieldCloner::extractFieldData

https://gerrit.wikimedia.org/r/1204937

Change #1204937 abandoned by Novem Linguae:

[mediawiki/core@master] Fix production error in HTMLFormFieldCloner::extractFieldData

Reason:

Duplicate of https://gerrit.wikimedia.org/r/1204640

https://gerrit.wikimedia.org/r/1204937

Change #1205494 had a related patch set uploaded (by Chuiimuii_ofc; author: Chuiimuii_ofc):

[mediawiki/core@master] Optimize HTMLFormFieldCloner::extractFieldData array checks

https://gerrit.wikimedia.org/r/1205494

@Chuiimuii_ofc You can always update existing changeset (with git commit --amend and git review -R) instead of creating a new one.

i am aware but I wanted to create a fresh commit for my better
understanding of the code as im new to this

i am aware but I wanted to create a fresh commit for my better
understanding of the code as im new to this

It's easier for reviewers to see the changes you made between iterations and check if all review feedbacks are addressed.

It's ok for you to have a fresh commit locally, but please keep the Change-Id line so Gerrit can update the original changeset.

Change #1205494 abandoned by Novem Linguae:

[mediawiki/core@master] Optimize HTMLFormFieldCloner::extractFieldData array checks

Reason:

This is identical to https://gerrit.wikimedia.org/r/c/mediawiki/core/+/1204640 patch set 3. Please make further changes in that patch so that code review comments and history are not erased.

https://gerrit.wikimedia.org/r/1205494

Change #1205686 had a related patch set uploaded (by Func; author: Func):

[mediawiki/core@master] HTMLFormFieldCloner: Fix multiple bugs related to conditional states

https://gerrit.wikimedia.org/r/1205686

Change #1205494 restored by Chuiimuii_ofc:

[mediawiki/core@master] Optimize HTMLFormFieldCloner::extractFieldData array checks

https://gerrit.wikimedia.org/r/1205494

Change #1205720 had a related patch set uploaded (by Func; author: Func):

[mediawiki/core@master] htmlform: Load ooui before infusing field cloner buttons

https://gerrit.wikimedia.org/r/1205720

Sorry for taking this over, I think it's just easier to fix my oversights on the original implementation (b67c7962) myself with solid comments, along with some other quirks I found.

Change #1205494 abandoned by Chuiimuii_ofc:

[mediawiki/core@master] Optimize HTMLFormFieldCloner::extractFieldData array checks

https://gerrit.wikimedia.org/r/1205494

Change #1204640 abandoned by Chuiimuii_ofc:

[mediawiki/core@master] HTMLForm: Fix 'Trying to access array offset on null' in HTMLFormFieldCloner

https://gerrit.wikimedia.org/r/1204640

Change #1204640 restored by Chuiimuii_ofc:

[mediawiki/core@master] HTMLForm: Fix 'Trying to access array offset on null' in HTMLFormFieldCloner

https://gerrit.wikimedia.org/r/1204640

Change #1205686 merged by jenkins-bot:

[mediawiki/core@master] HTMLFormFieldCloner: Fix multiple bugs related to conditional states

https://gerrit.wikimedia.org/r/1205686

Change #1214181 had a related patch set uploaded (by Reedy; author: Func):

[mediawiki/core@REL1_45] HTMLFormFieldCloner: Fix multiple bugs related to conditional states

https://gerrit.wikimedia.org/r/1214181

Change #1214184 had a related patch set uploaded (by Reedy; author: Func):

[mediawiki/core@REL1_44] HTMLFormFieldCloner: Fix multiple bugs related to conditional states

https://gerrit.wikimedia.org/r/1214184

Change #1214188 had a related patch set uploaded (by Reedy; author: Func):

[mediawiki/core@REL1_43] HTMLFormFieldCloner: Fix multiple bugs related to conditional states

https://gerrit.wikimedia.org/r/1214188

Change #1214181 merged by jenkins-bot:

[mediawiki/core@REL1_45] HTMLFormFieldCloner: Fix multiple bugs related to conditional states

https://gerrit.wikimedia.org/r/1214181

Change #1214184 merged by jenkins-bot:

[mediawiki/core@REL1_44] HTMLFormFieldCloner: Fix multiple bugs related to conditional states

https://gerrit.wikimedia.org/r/1214184

Change #1214188 merged by jenkins-bot:

[mediawiki/core@REL1_43] HTMLFormFieldCloner: Fix multiple bugs related to conditional states

https://gerrit.wikimedia.org/r/1214188

Oh, I didn't think of backports. @Reedy, should we update the version numbers for wfDeprecated to minor versions of the next release of each branch?

Change #1205494 restored by Chuiimuii_ofc:

[mediawiki/core@master] Optimize HTMLFormFieldCloner::extractFieldData array checks

https://gerrit.wikimedia.org/r/1205494

Change #1204937 restored by Chuiimuii_ofc:

[mediawiki/core@master] Fix production error in HTMLFormFieldCloner::extractFieldData

https://gerrit.wikimedia.org/r/1204937

@Chuiimuii_ofc Please don't abuse the Gerrit system.

As for your patch, I think we don't want that much defensive programming here, as the given array is internal to HTMLForm, the root causes should be, and are identified and fixed.

You should move on and maybe look for tasks tagged as good first task if interested.

Im just a big admirer of you and your work function , I'm just reviewing
what changes you did to get merged and all . Pls don't bully me I'm just a
kid 😭

Change #1214573 had a related patch set uploaded (by Func; author: Func):

[mediawiki/core@master] HTMLFormFieldCloner: Update version number in deprecation message

https://gerrit.wikimedia.org/r/1214573

Change #1205494 abandoned by Aklapper:

[mediawiki/core@master] Optimize HTMLFormFieldCloner::extractFieldData array checks

Reason:

per Novem

https://gerrit.wikimedia.org/r/1205494

Change #1204937 abandoned by Aklapper:

[mediawiki/core@master] Fix production error in HTMLFormFieldCloner::extractFieldData

Reason:

Again: Duplicate of https://gerrit.wikimedia.org/r/1204640. Please do not restore. Thanks.

https://gerrit.wikimedia.org/r/1204937

SD0001 reassigned this task from Chuiimuii_ofc to Func.

Change #1204640 abandoned by SD0001:

[mediawiki/core@master] HTMLForm: Fix 'Trying to access array offset on null' in HTMLFormFieldCloner

Reason:

https://gerrit.wikimedia.org/r/c/mediawiki/core/+/1205686 was merged

https://gerrit.wikimedia.org/r/1204640

Change #1214573 merged by jenkins-bot:

[mediawiki/core@master] HTMLFormFieldCloner: Update version number in deprecation message

https://gerrit.wikimedia.org/r/1214573

Change #1216634 had a related patch set uploaded (by Reedy; author: Func):

[mediawiki/core@REL1_45] HTMLFormFieldCloner: Update version number in deprecation message

https://gerrit.wikimedia.org/r/1216634

Change #1216634 merged by jenkins-bot:

[mediawiki/core@REL1_45] HTMLFormFieldCloner: Update version number in deprecation message

https://gerrit.wikimedia.org/r/1216634