Page MenuHomePhabricator

Incorrect .tab data causes Exception when number of expected columns doesn't match
Open, MediumPublic

Description

This causes Exception in JsonConfig:

{
  "license": "CC0-1.0+",
  "schema": {
    "fields": [
      {"name": "a","type": "string"},
      {"name": "b","type": "string"},
      {"name": "c","type": "string"}
    ]
  },
  "data": [["a"]]
}
2017-02-07 01:12:46 [WJkfDgpAAEEAAbqopmMAAAAD] mw1270 commonswiki 1.29.0-wmf.10 exception ERROR: [WJkfDgpAAEEAAbqopmMAAAAD] /w/index.php?title=Data:Sandbox/Yurik/OSM_objects_pointing_to_disambigs.tab&action=submit   Exception from line 267 of /srv/mediawiki/php-1.29.0-wmf.10/extensions/JsonConfig/includes/JCObjContent.php: List index is too large at 'data[23][5]'. Index may not exceed list size. {"exception_id":"WJkfDgpAAEEAAbqopmMAAAAD","caught_by":"mwe_handler"}
[Exception Exception] (/srv/mediawiki/php-1.29.0-wmf.10/extensions/JsonConfig/includes/JCObjContent.php:267) List index is too large at 'data[23][5]'. Index may not exceed list size.
  #0 /srv/mediawiki/php-1.29.0-wmf.10/extensions/JsonConfig/includes/JCObjContent.php(287): JsonConfig\JCObjContent->testRecursive(array, array, JsonConfig\JCValue, array)
  #1 /srv/mediawiki/php-1.29.0-wmf.10/extensions/JsonConfig/includes/JCObjContent.php(287): JsonConfig\JCObjContent->testRecursive(array, array, JsonConfig\JCValue, array)
  #2 /srv/mediawiki/php-1.29.0-wmf.10/extensions/JsonConfig/includes/JCObjContent.php(220): JsonConfig\JCObjContent->testRecursive(array, array, JsonConfig\JCValue, array)
  #3 /srv/mediawiki/php-1.29.0-wmf.10/extensions/JsonConfig/includes/JCObjContent.php(170): JsonConfig\JCObjContent->testInt(array, array)
  #4 /srv/mediawiki/php-1.29.0-wmf.10/extensions/JsonConfig/includes/JCTabularContent.php(111): JsonConfig\JCObjContent->test(array, Closure$JsonConfig\JCValidators::isStringLine;883030259)
  #5 [internal function]: Closure$JsonConfig\JCTabularContent::validateContent#3(JsonConfig\JCValue, array, JsonConfig\JCTabularContent)
  #6 /srv/mediawiki/php-1.29.0-wmf.10/extensions/JsonConfig/includes/JCValidators.php(24): call_user_func(Closure$JsonConfig\JCTabularContent::validateContent#3;824286714, JsonConfig\JCValue, array, JsonConfig\JCTabularContent)
  #7 /srv/mediawiki/php-1.29.0-wmf.10/extensions/JsonConfig/includes/JCObjContent.php(314): JsonConfig\JCValidators::run(array, JsonConfig\JCValue, array, JsonConfig\JCTabularContent)
  #8 /srv/mediawiki/php-1.29.0-wmf.10/extensions/JsonConfig/includes/JCObjContent.php(236): JsonConfig\JCObjContent->testValue(array, JsonConfig\JCValue, array)
  #9 /srv/mediawiki/php-1.29.0-wmf.10/extensions/JsonConfig/includes/JCObjContent.php(287): JsonConfig\JCObjContent->testRecursive(array, array, JsonConfig\JCValue, array)
  #10 /srv/mediawiki/php-1.29.0-wmf.10/extensions/JsonConfig/includes/JCObjContent.php(287): JsonConfig\JCObjContent->testRecursive(array, array, JsonConfig\JCValue, array)
  #11 /srv/mediawiki/php-1.29.0-wmf.10/extensions/JsonConfig/includes/JCObjContent.php(220): JsonConfig\JCObjContent->testRecursive(array, array, JsonConfig\JCValue, array)
  #12 /srv/mediawiki/php-1.29.0-wmf.10/extensions/JsonConfig/includes/JCObjContent.php(200): JsonConfig\JCObjContent->testInt(array, array)
  #13 /srv/mediawiki/php-1.29.0-wmf.10/extensions/JsonConfig/includes/JCTabularContent.php(114): JsonConfig\JCObjContent->testEach(array, Closure$JsonConfig\JCTabularContent::validateContent#3;824286714)
  #14 /srv/mediawiki/php-1.29.0-wmf.10/extensions/JsonConfig/includes/JCObjContent.php(119): JsonConfig\JCTabularContent->validateContent()
  #15 /srv/mediawiki/php-1.29.0-wmf.10/extensions/JsonConfig/includes/JCContent.php(130): JsonConfig\JCObjContent->validate(stdClass)
  #16 /srv/mediawiki/php-1.29.0-wmf.10/extensions/JsonConfig/includes/JCContent.php(43): JsonConfig\JCContent->parse()
  #17 /srv/mediawiki/php-1.29.0-wmf.10/extensions/JsonConfig/includes/JCContentHandler.php(112): JsonConfig\JCContent->__construct(string, string, boolean)
  #18 /srv/mediawiki/php-1.29.0-wmf.10/includes/content/ContentHandler.php(141): JsonConfig\JCContentHandler->unserializeContent(string, string)
  #19 /srv/mediawiki/php-1.29.0-wmf.10/includes/EditPage.php(2571): ContentHandler::makeContent(string, Title, string, string)
  #20 /srv/mediawiki/php-1.29.0-wmf.10/includes/EditPage.php(3707): EditPage->toEditContent(string)
  #21 /srv/mediawiki/php-1.29.0-wmf.10/includes/EditPage.php(2597): EditPage->getPreviewText()
  #22 /srv/mediawiki/php-1.29.0-wmf.10/includes/EditPage.php(642): EditPage->showEditForm()
  #23 /srv/mediawiki/php-1.29.0-wmf.10/extensions/JsonConfig/includes/JCSingleton.php(632): EditPage->edit()
  #24 /srv/mediawiki/php-1.29.0-wmf.10/includes/Hooks.php(186): JsonConfig\JCSingleton::onCustomEditor(Article, User)
  #25 /srv/mediawiki/php-1.29.0-wmf.10/includes/actions/EditAction.php(57): Hooks::run(string, array)
  #26 /srv/mediawiki/php-1.29.0-wmf.10/includes/actions/SubmitAction.php(38): EditAction->show()
  #27 /srv/mediawiki/php-1.29.0-wmf.10/includes/MediaWiki.php(496): SubmitAction->show()
  #28 /srv/mediawiki/php-1.29.0-wmf.10/includes/MediaWiki.php(290): MediaWiki->performAction(Article, Title)
  #29 /srv/mediawiki/php-1.29.0-wmf.10/includes/MediaWiki.php(859): MediaWiki->performRequest()
  #30 /srv/mediawiki/php-1.29.0-wmf.10/includes/MediaWiki.php(520): MediaWiki->main()
  #31 /srv/mediawiki/php-1.29.0-wmf.10/index.php(43): MediaWiki->run()
  #32 /srv/mediawiki/w/index.php(3): include(string)
  #33 {main}

Event Timeline

brennen subscribed.

A handful of these (or very similar) in 1.35.0-wmf.31:

  • reqId: 688efabd-7085-408e-a8c4-57f9723ed2e6
  • URL: https://commons.wikimedia.org/w/api.php
  • Referer: https://commons.wikimedia.org/w/index.php?title=Data:COVID-19_Cases_in_Santa_Clara_County,_California.tab&action=edit
message
[688efabd-7085-408e-a8c4-57f9723ed2e6] /w/api.php   Exception from line 291 of /srv/mediawiki/php-1.35.0-wmf.31/extensions/JsonConfig/includes/JCObjContent.php: List index is too large at 'data[100][2]'. Index may not exceed list size.
trace
#0 /srv/mediawiki/php-1.35.0-wmf.31/extensions/JsonConfig/includes/JCObjContent.php(314): JsonConfig\JCObjContent->testRecursive(array, array, JsonConfig\JCValue, array)
#1 /srv/mediawiki/php-1.35.0-wmf.31/extensions/JsonConfig/includes/JCObjContent.php(314): JsonConfig\JCObjContent->testRecursive(array, array, JsonConfig\JCValue, array)
#2 /srv/mediawiki/php-1.35.0-wmf.31/extensions/JsonConfig/includes/JCObjContent.php(245): JsonConfig\JCObjContent->testRecursive(array, array, JsonConfig\JCValue, array)
#3 /srv/mediawiki/php-1.35.0-wmf.31/extensions/JsonConfig/includes/JCObjContent.php(190): JsonConfig\JCObjContent->testInt(array, array)
#4 /srv/mediawiki/php-1.35.0-wmf.31/extensions/JsonConfig/includes/JCTabularContent.php(115): JsonConfig\JCObjContent->test(array, Closure)
#5 [internal function]: JsonConfig\JCTabularContent->JsonConfig\{closure}(JsonConfig\JCValue, array, JsonConfig\JCTabularContent)
#6 /srv/mediawiki/php-1.35.0-wmf.31/extensions/JsonConfig/includes/JCValidators.php(27): call_user_func(Closure, JsonConfig\JCValue, array, JsonConfig\JCTabularContent)
#7 /srv/mediawiki/php-1.35.0-wmf.31/extensions/JsonConfig/includes/JCObjContent.php(341): JsonConfig\JCValidators::run(array, JsonConfig\JCValue, array, JsonConfig\JCTabularContent)
#8 /srv/mediawiki/php-1.35.0-wmf.31/extensions/JsonConfig/includes/JCObjContent.php(261): JsonConfig\JCObjContent->testValue(array, JsonConfig\JCValue, array)
#9 /srv/mediawiki/php-1.35.0-wmf.31/extensions/JsonConfig/includes/JCObjContent.php(314): JsonConfig\JCObjContent->testRecursive(array, array, JsonConfig\JCValue, array)
#10 /srv/mediawiki/php-1.35.0-wmf.31/extensions/JsonConfig/includes/JCObjContent.php(314): JsonConfig\JCObjContent->testRecursive(array, array, JsonConfig\JCValue, array)
#11 /srv/mediawiki/php-1.35.0-wmf.31/extensions/JsonConfig/includes/JCObjContent.php(245): JsonConfig\JCObjContent->testRecursive(array, array, JsonConfig\JCValue, array)
#12 /srv/mediawiki/php-1.35.0-wmf.31/extensions/JsonConfig/includes/JCObjContent.php(223): JsonConfig\JCObjContent->testInt(array, array)
#13 /srv/mediawiki/php-1.35.0-wmf.31/extensions/JsonConfig/includes/JCTabularContent.php(118): JsonConfig\JCObjContent->testEach(array, Closure)
#14 /srv/mediawiki/php-1.35.0-wmf.31/extensions/JsonConfig/includes/JCObjContent.php(134): JsonConfig\JCTabularContent->validateContent()
#15 /srv/mediawiki/php-1.35.0-wmf.31/extensions/JsonConfig/includes/JCContent.php(154): JsonConfig\JCObjContent->validate(stdClass)
#16 /srv/mediawiki/php-1.35.0-wmf.31/extensions/JsonConfig/includes/JCContent.php(48): JsonConfig\JCContent->parse()
#17 /srv/mediawiki/php-1.35.0-wmf.31/extensions/JsonConfig/includes/JCContentHandler.php(111): JsonConfig\JCContent->__construct(string, string, boolean)
#18 /srv/mediawiki/php-1.35.0-wmf.31/includes/content/ContentHandler.php(150): JsonConfig\JCContentHandler->unserializeContent(string, NULL)
#19 /srv/mediawiki/php-1.35.0-wmf.31/includes/api/ApiQueryRevisionsBase.php(628): ContentHandler::makeContent(string, Title, string, NULL)
#20 /srv/mediawiki/php-1.35.0-wmf.31/includes/api/ApiQueryRevisionsBase.php(402): ApiQueryRevisionsBase->extractDeprecatedContent(JsonConfig\JCTabularContent, MediaWiki\Revision\RevisionStoreRecord)
#21 /srv/mediawiki/php-1.35.0-wmf.31/includes/api/ApiQueryRevisionsBase.php(314): ApiQueryRevisionsBase->extractAllSlotInfo(MediaWiki\Revision\RevisionStoreRecord, integer)
#22 /srv/mediawiki/php-1.35.0-wmf.31/includes/api/ApiQueryRevisions.php(419): ApiQueryRevisionsBase->extractRevisionInfo(MediaWiki\Revision\RevisionStoreRecord, stdClass)
#23 /srv/mediawiki/php-1.35.0-wmf.31/includes/api/ApiQueryRevisionsBase.php(62): ApiQueryRevisions->run()
#24 /srv/mediawiki/php-1.35.0-wmf.31/includes/api/ApiQuery.php(263): ApiQueryRevisionsBase->execute()
#25 /srv/mediawiki/php-1.35.0-wmf.31/includes/api/ApiMain.php(1580): ApiQuery->execute()
#26 /srv/mediawiki/php-1.35.0-wmf.31/includes/api/ApiMain.php(523): ApiMain->executeAction()
#27 /srv/mediawiki/php-1.35.0-wmf.31/includes/api/ApiMain.php(494): ApiMain->executeActionWithErrorHandling()
#28 /srv/mediawiki/php-1.35.0-wmf.31/api.php(84): ApiMain->execute()
#29 /srv/mediawiki/w/api.php(3): require(string)
#30 {main}
brennen added a subscriber: DannyS712.

...although at a second glance, I notice Revision in this stack trace.

@DannyS712, mind having a glance at this one?

daniel triaged this task as Medium priority.May 8 2020, 10:08 AM

...although at a second glance, I notice Revision in this stack trace.

@DannyS712, mind having a glance at this one?

None of this looks familiar, sorry; the last change I made to the extension was March 11, and it was a no-op - https://gerrit.wikimedia.org/r/plugins/gitiles/mediawiki/extensions/JsonConfig/+/449989ab0e185be943fc6faf9974b95476e6a555

Aklapper added a subscriber: • AMooney.

@AMooney: Assuming that "Set projects" was accidentally used instead of "Add projects", hence restoring some previous project tags.

Krinkle subscribed.

Per mw:Maintainers, JsonConfig is currently assigned to Product Infra.

fwiw, confirmed still reproducible on Commons.