User Details
- User Since
- Oct 31 2014, 3:35 PM (580 w, 1 d)
- Availability
- Available
- LDAP User
- Unknown
- MediaWiki User
- Welterkj [ Global Accounts ]
Mar 12 2018
I slept on it and I think going with @Samwilson's fix is best (not the hybrid solution I described in my last post). The hybrid would just add code complexity and less predictable behavior in the extension.
Drat, foiled again. My strategy was to create a graphUpdater group with the necessary permissions and add it on the fly to a user needing to upload a graph. However, I discovered you can't add a group to an anonymous user (my first test).
If $wgEmailConfirmToEdit (and $wgEmailAuthentication) is true, is an anonymous user allowed to edit wikitext?
Mar 11 2018
My apologies. The fact that you went to the effort to code a fix after describing your "3rd solution" should have made it clear to me that the status quo was not acceptable.
As I got deeper into coding the "don't check for upload permission" change it got ugly. To be specific, UploadLocalFile::isUploadAllowedForTitle (GraphViz) currently calls UploadBase::verifyTitlePermissions (MediaWiki core) which checks whether the user can edit, upload and create the image AND if the user is allowed to overwrite an existing image. The overwrite check is done by calling the private method UploadBase::checkOverwrite. There is no way to bypass the upload permission check without also bypassing the overwrite check. The overwrite check looks very much like it should not be bypassed.
Mar 9 2018
I wrote a draft of the fix today and got an anonymous user to create a graph. I have to do some homework verifying correctness before I'm ready to check it in for review.
Mar 8 2018
No, my idea is to remove the restriction that graph editors must have upload permission.
Is this still an issue?
Feb 27 2018
Feb 18 2018
Jan 12 2018
Interesting. When I wrote GraphViz version 2.0.0 for MW 1.27 there was no page created in the "File" namespace for graph images but sure enough I see it on your MW 1.30 installation.
Jan 11 2018
GraphViz truly no longer performs uploads (i.e. creates file pages) since version 2.0.0. I'm puzzled that you say otherwise. Here is a tell-tale sign. Prior to version 2.0.0, a generated graph image would include a blue circle with an "i" inside in the lower right hand corner that would link to the file page associated with the graph. At version 2.0.0+, the little blue superimposed "info" icon is gone since there is no file page to link to.
Nov 27 2017
I am in agreement with @Samwilson with respect to the new version number, i.e. 2.1.1. However, the dependencies in composer.json do need to be updated so that installations with MW versions <= 1.28 do not automatically upgrade the GraphViz extension to an incompatible version. The version history needs to be updated as well. Sorry to make these comments here. I'll get them into gerrit when I have a little more time.
Nov 26 2017
@Samwilson, yes, I'd be very happy to have you as a co-maintainer! My apologies for slowing things down. I'm even rusty in gerrit and couldn't find a spot to add a code comment. My question is, what is the rationale for bumping the version all the way up to 3.0.0? Also, has anyone tested the extension with the full set of edits? If it still works I will quickly get out of the way :)
Apr 17 2017
@Samwilson, please review the change. If you could also confirm that it still satisfies your T151294 test case (but with multiple links) that would be great. Thanks.
When I comment-out the code added in T151294, this problem goes away.
Mar 28 2017
The recursive parse exception is due to an interaction with the
SpamBlacklist extension and the UploadVerifyFile hook. Since GraphViz no
longer creates a file page there is no wiki text for the SpamBlacklist
extension (or any other to examine). The only reliable way to prevent this
exception is for the custom GraphViz upload code to not call the
UploadVerifyFile hook. I've updated the patch accordingly.
Mar 26 2017
There shouldn't be any recursive calls to Parser::parse. Can you provide
the exception traceback and the wikitext?
Mar 24 2017
I switched to 1.28, recreated the problem and updated the patch to address it. Please try again.
Mar 23 2017
Please try the provided patch set and let me know if the redesign solves your problem.
Mar 10 2017
I've written a fix that is actually a design change. The fix performs the upload of graph or message sequence chart images without creating a file page. This approach eliminates the need for dummy file pages and other awkward techniques. Creation of these file pages may be considered a feature of the extension that will be lost. On balance, they seem to have caused more pain than good (both in the implementation and in the user community) and I now think it is best to abandon that feature. The fix needs some cleanup and additional testing so stay tuned.
Dec 20 2016
Thanks for reporting!
May 29 2015
The warnings you see are the result of the fix for T98500. In retrospect, it would have been nice to include a configuration option to suppress warnings. Feel free to open a ticket for that.
May 13 2015
Hi Prod, please try the latest dev-master version of GraphViz:
php composer.phar require mediawiki/graph-viz 'dev-master'
May 7 2015
Apr 29 2015
Please try the new patch. I found additional problems when doing edit->show preview (the graph doesn't display properly) but I wanted to first deliver the patch for fixing the fread warning.
Apr 12 2015
GraphViz::render: sourceChanged: 1
GraphViz::updateSource: file_put_contents(/home/welterkj/public_html/mediawiki/git/core/images/graphviz/Graphviz4_digraph_test_Welterkj.src,source) succeeded
wfShellExec: /bin/bash '/home/welterkj/public_html/mediawiki/git/core/includes/limit.sh' ''\''/usr/bin/dot'\'' -T '\''png'\'' -o '\''/home/welterkj/public_html/mediawiki/git/core/images/graphviz/images/Graphviz4_digraph_test_Welterkj_dot.png'\'' '\''/home/welterkj/public_html/mediawiki/git/core/images/graphviz/Graphviz4_digraph_test_Welterkj.src'\'' 2>&1' 'MW_INCLUDE_STDERR=;MW_CPU_LIMIT=180; MW_CGROUP='\'''\''; MW_MEM_LIMIT=0; MW_FILE_SIZE_LIMIT=102400; MW_WALL_CLOCK_LIMIT=180; MW_USE_LOG_PIPE=yes'
[error-json] {"id":"26d72684","type":"ErrorException","file":"/home/welterkj/public_html/mediawiki/git/core/includes/GlobalFunctions.php","line":2894,"message":"PHP Notice: ","suppressed":true,"url":"/wdev/index.php?title=Graphviz4&action=submit","backtrace":[{"function":"handleError","class":"MWExceptionHandler","type":"::","args":["integer","string","string","integer","array"]},{"file":"/home/welterkj/public_html/mediawiki/git/core/includes/GlobalFunctions.php","line":2894,"function":"trigger_error","args":["string"]},{"file":"/home/welterkj/public_html/mediawiki/git/core/extensions/GraphViz/GraphViz_body.php","line":1429,"function":"wfShellExec","args":["string","NULL"]},{"file":"/home/welterkj/public_html/mediawiki/git/core/extensions/GraphViz/GraphViz_body.php","line":1079,"function":"executeCommand","class":"GraphViz","type":"::","args":["string","string"]},{"file":"/home/welterkj/public_html/mediawiki/git/core/extensions/GraphViz/GraphViz_body.php","line":782,"function":"render","class":"GraphViz","type":"::","args":["string","array","Parser","PPFrame_DOM"]},{"function":"graphvizParserHook","class":"GraphViz","type":"::","args":["string","array","Parser","PPFrame_DOM"]},{"file":"/home/welterkj/public_html/mediawiki/git/core/includes/parser/Parser.php","line":4209,"function":"call_user_func_array","args":["array","array"]},{"file":"/home/welterkj/public_html/mediawiki/git/core/includes/parser/Preprocessor_DOM.php","line":1252,"function":"extensionSubstitution","class":"Parser","type":"->","args":["array","PPFrame_DOM"]},{"file":"/home/welterkj/public_html/mediawiki/git/core/includes/parser/Parser.php","line":3319,"function":"expand","class":"PPFrame_DOM","type":"->","args":["PPNode_DOM","integer"]},{"file":"/home/welterkj/public_html/mediawiki/git/core/includes/parser/Parser.php","line":1228,"function":"replaceVariables","class":"Parser","type":"->","args":["string"]},{"file":"/home/welterkj/public_html/mediawiki/git/core/includes/parser/Parser.php","line":431,"function":"internalParse","class":"Parser","type":"->","args":["string"]},{"file":"/home/welterkj/public_html/mediawiki/git/core/includes/content/WikitextContent.php","line":333,"function":"parse","class":"Parser","type":"->","args":["string","Title","ParserOptions","boolean","boolean","NULL"]},{"file":"/home/welterkj/public_html/mediawiki/git/core/includes/content/AbstractContent.php","line":497,"function":"fillParserOutput","class":"WikitextContent","type":"->","args":["Title","NULL","ParserOptions","boolean","ParserOutput"]},{"file":"/home/welterkj/public_html/mediawiki/git/core/includes/EditPage.php","line":3522,"function":"getParserOutput","class":"AbstractContent","type":"->","args":["Title","NULL","ParserOptions"]},{"file":"/home/welterkj/public_html/mediawiki/git/core/includes/EditPage.php","line":2320,"function":"getPreviewText","class":"EditPage","type":"->","args":[]},{"file":"/home/welterkj/public_html/mediawiki/git/core/includes/EditPage.php","line":560,"function":"showEditForm","class":"EditPage","type":"->","args":[]},{"file":"/home/welterkj/public_html/mediawiki/git/core/includes/actions/EditAction.php","line":56,"function":"edit","class":"EditPage","type":"->","args":[]},{"file":"/home/welterkj/public_html/mediawiki/git/core/includes/actions/SubmitAction.php","line":40,"function":"show","class":"EditAction","type":"->","args":[]},{"file":"/home/welterkj/public_html/mediawiki/git/core/includes/MediaWiki.php","line":403,"function":"show","class":"SubmitAction","type":"->","args":[]},{"file":"/home/welterkj/public_html/mediawiki/git/core/includes/MediaWiki.php","line":275,"function":"performAction","class":"MediaWiki","type":"->","args":["Article","Title"]},{"file":"/home/welterkj/public_html/mediawiki/git/core/includes/MediaWiki.php","line":571,"function":"performRequest","class":"MediaWiki","type":"->","args":[]},{"file":"/home/welterkj/public_html/mediawiki/git/core/includes/MediaWiki.php","line":422,"function":"main","class":"MediaWiki","type":"->","args":[]},{"file":"/home/welterkj/public_html/mediawiki/git/core/index.php","line":46,"function":"run","class":"MediaWiki","type":"->","args":[]}]}
FSFile::getProps: Getting file info for /home/welterkj/public_html/mediawiki/git/core/images/graphviz/images/Graphviz4_digraph_test_Welterkj_dot.png
MimeMagic::doGuessMimeType: analyzing head and tail of /home/welterkj/public_html/mediawiki/git/core/images/graphviz/images/Graphviz4_digraph_test_Welterkj_dot.png for magic numbers.
MimeMagic::doGuessMimeType: getimagesize detected /home/welterkj/public_html/mediawiki/git/core/images/graphviz/images/Graphviz4_digraph_test_Welterkj_dot.png as image/png
MimeMagic::guessMimeType: guessed mime type of /home/welterkj/public_html/mediawiki/git/core/images/graphviz/images/Graphviz4_digraph_test_Welterkj_dot.png: image/png
MimeMagic::improveTypeFromExtension: improved mime type for .png: image/png
FSFile::getProps: /home/welterkj/public_html/mediawiki/git/core/images/graphviz/images/Graphviz4_digraph_test_Welterkj_dot.png loaded, 3395 bytes, image/png.
mime: <image/png> extension: <png>
UploadBase::detectScript: checking for embedded scripts and HTML stuff
UploadBase::detectScript: no scripts found
ZipDirectoryReader: Fatal error: zip file lacks EOCDR signature. It probably isn't a zip file.
UploadBase::detectVirus: virus scanner disabled
FSFile::getProps: Getting file info for /home/welterkj/public_html/mediawiki/git/core/images/graphviz/images/Graphviz4_digraph_test_Welterkj_dot.png
MimeMagic::doGuessMimeType: analyzing head and tail of /home/welterkj/public_html/mediawiki/git/core/images/graphviz/images/Graphviz4_digraph_test_Welterkj_dot.png for magic numbers.
MimeMagic::doGuessMimeType: getimagesize detected /home/welterkj/public_html/mediawiki/git/core/images/graphviz/images/Graphviz4_digraph_test_Welterkj_dot.png as image/png
MimeMagic::guessMimeType: guessed mime type of /home/welterkj/public_html/mediawiki/git/core/images/graphviz/images/Graphviz4_digraph_test_Welterkj_dot.png: image/png
MimeMagic::improveTypeFromExtension: improved mime type for .png: image/png
FSFile::getProps: /home/welterkj/public_html/mediawiki/git/core/images/graphviz/images/Graphviz4_digraph_test_Welterkj_dot.png loaded, 3395 bytes, image/png.
UploadBase::verifyExtension: mime type image/png matches extension png, passing file
UploadBase::verifyFile: all clear; passing.
wfShellExec: /bin/bash '/home/welterkj/public_html/mediawiki/git/core/includes/limit.sh' ''\''/usr/bin/dot'\'' -T '\''cmapx'\'' -o '\''/home/welterkj/public_html/mediawiki/git/core/images/graphviz/Graphviz4_digraph_test_Welterkj_dot.map'\'' '\''/home/welterkj/public_html/mediawiki/git/core/images/graphviz/Graphviz4_digraph_test_Welterkj.src'\'' 2>&1' 'MW_INCLUDE_STDERR=;MW_CPU_LIMIT=180; MW_CGROUP='\'''\''; MW_MEM_LIMIT=0; MW_FILE_SIZE_LIMIT=102400; MW_WALL_CLOCK_LIMIT=180; MW_USE_LOG_PIPE=yes'
[error-json] {"id":"5e8a874c","type":"ErrorException","file":"/home/welterkj/public_html/mediawiki/git/core/includes/GlobalFunctions.php","line":2894,"message":"PHP Notice: ","suppressed":true,"url":"/wdev/index.php?title=Graphviz4&action=submit","backtrace":[{"function":"handleError","class":"MWExceptionHandler","type":"::","args":["integer","string","string","integer","array"]},{"file":"/home/welterkj/public_html/mediawiki/git/core/includes/GlobalFunctions.php","line":2894,"function":"trigger_error","args":["string"]},{"file":"/home/welterkj/public_html/mediawiki/git/core/extensions/GraphViz/GraphViz_body.php","line":1429,"function":"wfShellExec","args":["string","NULL"]},{"file":"/home/welterkj/public_html/mediawiki/git/core/extensions/GraphViz/GraphViz_body.php","line":1105,"function":"executeCommand","class":"GraphViz","type":"::","args":["string","string"]},{"file":"/home/welterkj/public_html/mediawiki/git/core/extensions/GraphViz/GraphViz_body.php","line":782,"function":"render","class":"GraphViz","type":"::","args":["string","array","Parser","PPFrame_DOM"]},{"function":"graphvizParserHook","class":"GraphViz","type":"::","args":["string","array","Parser","PPFrame_DOM"]},{"file":"/home/welterkj/public_html/mediawiki/git/core/includes/parser/Parser.php","line":4209,"function":"call_user_func_array","args":["array","array"]},{"file":"/home/welterkj/public_html/mediawiki/git/core/includes/parser/Preprocessor_DOM.php","line":1252,"function":"extensionSubstitution","class":"Parser","type":"->","args":["array","PPFrame_DOM"]},{"file":"/home/welterkj/public_html/mediawiki/git/core/includes/parser/Parser.php","line":3319,"function":"expand","class":"PPFrame_DOM","type":"->","args":["PPNode_DOM","integer"]},{"file":"/home/welterkj/public_html/mediawiki/git/core/includes/parser/Parser.php","line":1228,"function":"replaceVariables","class":"Parser","type":"->","args":["string"]},{"file":"/home/welterkj/public_html/mediawiki/git/core/includes/parser/Parser.php","line":431,"function":"internalParse","class":"Parser","type":"->","args":["string"]},{"file":"/home/welterkj/public_html/mediawiki/git/core/includes/content/WikitextContent.php","line":333,"function":"parse","class":"Parser","type":"->","args":["string","Title","ParserOptions","boolean","boolean","NULL"]},{"file":"/home/welterkj/public_html/mediawiki/git/core/includes/content/AbstractContent.php","line":497,"function":"fillParserOutput","class":"WikitextContent","type":"->","args":["Title","NULL","ParserOptions","boolean","ParserOutput"]},{"file":"/home/welterkj/public_html/mediawiki/git/core/includes/EditPage.php","line":3522,"function":"getParserOutput","class":"AbstractContent","type":"->","args":["Title","NULL","ParserOptions"]},{"file":"/home/welterkj/public_html/mediawiki/git/core/includes/EditPage.php","line":2320,"function":"getPreviewText","class":"EditPage","type":"->","args":[]},{"file":"/home/welterkj/public_html/mediawiki/git/core/includes/EditPage.php","line":560,"function":"showEditForm","class":"EditPage","type":"->","args":[]},{"file":"/home/welterkj/public_html/mediawiki/git/core/includes/actions/EditAction.php","line":56,"function":"edit","class":"EditPage","type":"->","args":[]},{"file":"/home/welterkj/public_html/mediawiki/git/core/includes/actions/SubmitAction.php","line":40,"function":"show","class":"EditAction","type":"->","args":[]},{"file":"/home/welterkj/public_html/mediawiki/git/core/includes/MediaWiki.php","line":403,"function":"show","class":"SubmitAction","type":"->","args":[]},{"file":"/home/welterkj/public_html/mediawiki/git/core/includes/MediaWiki.php","line":275,"function":"performAction","class":"MediaWiki","type":"->","args":["Article","Title"]},{"file":"/home/welterkj/public_html/mediawiki/git/core/includes/MediaWiki.php","line":571,"function":"performRequest","class":"MediaWiki","type":"->","args":[]},{"file":"/home/welterkj/public_html/mediawiki/git/core/includes/MediaWiki.php","line":422,"function":"main","class":"MediaWiki","type":"->","args":[]},{"file":"/home/welterkj/public_html/mediawiki/git/core/index.php","line":46,"function":"run","class":"MediaWiki","type":"->","args":[]}]}
GraphViz::render: Graphviz4 digraph test Welterkj dot.png does not exist
GraphViz::render: copying /home/welterkj/public_html/mediawiki/git/core/images/graphviz/images/Graphviz4_digraph_test_Welterkj_dot.png to /home/welterkj/public_html/mediawiki/git/core/images/graphviz/images/File_graph_GraphVizExtensionDummy_dot.png
GraphViz::disableHooks: hooks disabled
FSFile::getProps: Getting file info for /home/welterkj/public_html/mediawiki/git/core/images/graphviz/images/File_graph_GraphVizExtensionDummy_dot.png
[error] [b39f8b15] /wdev/index.php?title=Graphviz4&action=submit ErrorException from line 646 of /home/welterkj/public_html/mediawiki/git/core/includes/MimeMagic.php: PHP Warning: fread(): Length parameter must be greater than 0
#0 [internal function]: MWExceptionHandler::handleError(2, 'fread(): Length...', '/home/welterkj/...', 646, Array)
#1 /home/welterkj/public_html/mediawiki/git/core/includes/MimeMagic.php(646): fread(Resource id #107, 0)
#2 /home/welterkj/public_html/mediawiki/git/core/includes/MimeMagic.php(602): MimeMagic->doGuessMimeType('/home/welterkj/...', false)
#3 /home/welterkj/public_html/mediawiki/git/core/includes/filebackend/FSFile.php(94): MimeMagic->guessMimeType('/home/welterkj/...', false)
#4 /home/welterkj/public_html/mediawiki/git/core/includes/filebackend/FSFile.php(121): FSFile->getMimeType()
#5 /home/welterkj/public_html/mediawiki/git/core/includes/filebackend/FSFile.php(241): FSFile->getProps(true)
#6 /home/welterkj/public_html/mediawiki/git/core/includes/filerepo/file/LocalFile.php(1130): FSFile::getPropsFromPath('/home/welterkj/...')
#7 /home/welterkj/public_html/mediawiki/git/core/includes/upload/UploadBase.php(715): LocalFile->upload('/home/welterkj/...', 'generated by th...', '[[Category:Grap...', 1, NULL, false, Object(User))
#8 /home/welterkj/public_html/mediawiki/git/core/extensions/GraphViz/UploadLocalFile.php(238): UploadBase->performUpload('generated by th...', '[[Category:Grap...', false, Object(User))
#9 /home/welterkj/public_html/mediawiki/git/core/extensions/GraphViz/GraphViz_body.php(1193): UploadLocalFile::upload('File_graph_Grap...', '/home/welterkj/...', Object(User), 'generated by th...', '[[Category:Grap...', false, true)
#10 /home/welterkj/public_html/mediawiki/git/core/extensions/GraphViz/GraphViz_body.php(782): GraphViz::render('?digraph test {...', Array, Object(Parser), Object(PPFrame_DOM))
#11 [internal function]: GraphViz::graphvizParserHook('?digraph test {...', Array, Object(Parser), Object(PPFrame_DOM))
#12 /home/welterkj/public_html/mediawiki/git/core/includes/parser/Parser.php(4209): call_user_func_array(Array, Array)
#13 /home/welterkj/public_html/mediawiki/git/core/includes/parser/Preprocessor_DOM.php(1252): Parser->extensionSubstitution(Array, Object(PPFrame_DOM))
#14 /home/welterkj/public_html/mediawiki/git/core/includes/parser/Parser.php(3319): PPFrame_DOM->expand(Object(PPNode_DOM), 0)
#15 /home/welterkj/public_html/mediawiki/git/core/includes/parser/Parser.php(1228): Parser->replaceVariables('<graphviz>?digr...')
#16 /home/welterkj/public_html/mediawiki/git/core/includes/parser/Parser.php(431): Parser->internalParse('<graphviz>?digr...')
#17 /home/welterkj/public_html/mediawiki/git/core/includes/content/WikitextContent.php(333): Parser->parse('<graphviz>?digr...', Object(Title), Object(ParserOptions), true, true, NULL)
#18 /home/welterkj/public_html/mediawiki/git/core/includes/content/AbstractContent.php(497): WikitextContent->fillParserOutput(Object(Title), NULL, Object(ParserOptions), true, Object(ParserOutput))
#19 /home/welterkj/public_html/mediawiki/git/core/includes/EditPage.php(3522): AbstractContent->getParserOutput(Object(Title), NULL, Object(ParserOptions))
#20 /home/welterkj/public_html/mediawiki/git/core/includes/EditPage.php(2320): EditPage->getPreviewText()
#21 /home/welterkj/public_html/mediawiki/git/core/includes/EditPage.php(560): EditPage->showEditForm()
#22 /home/welterkj/public_html/mediawiki/git/core/includes/actions/EditAction.php(56): EditPage->edit()
#23 /home/welterkj/public_html/mediawiki/git/core/includes/actions/SubmitAction.php(40): EditAction->show()
#24 /home/welterkj/public_html/mediawiki/git/core/includes/MediaWiki.php(403): SubmitAction->show()
#25 /home/welterkj/public_html/mediawiki/git/core/includes/MediaWiki.php(275): MediaWiki->performAction(Object(Article), Object(Title))
#26 /home/welterkj/public_html/mediawiki/git/core/includes/MediaWiki.php(571): MediaWiki->performRequest()
#27 /home/welterkj/public_html/mediawiki/git/core/includes/MediaWiki.php(422): MediaWiki->main()
#28 /home/welterkj/public_html/mediawiki/git/core/index.php(46): MediaWiki->run()
#29 {main}
I reproduced the problem (with the debug log file disabled). Debug details to follow (from the debug toolbar).
Apr 11 2015
Prod, I was unable to reproduce the problem but I merged a fix that may fix the problem. Can you try it?
Note that GraphViz emits markup with typeof="mw:Extension/graphviz" and typeof="mw:Extension/mscgen". So, even though GraphViz uses ImageMap for generating HTML output, making the OCG bundler and renderer recognize mw:Extension/imagemap won't help GraphViz.
Apr 10 2015
Oops. The original description was correct so I restored it.
Graph images rendered by the GraphViz extension (and ImageMap) appear as non-editable images in VE when editing. In other words, the behavior of the extensions in VE is what I would expect/hope for.
Feb 12 2015
Can you recreate the problem? A debug log file would help put the problem in context:
https://www.mediawiki.org/wiki/Manual:How_to_debug#Setting_up_a_debug_log_file
Jan 26 2015
Regarding SRF process format, see:
https://github.com/SemanticMediaWiki/SemanticResultFormats/issues/49
Jan 15 2015
Hi, I merged a change for the unstub issue. Please try the fix again (same procedure as T75073#977379).
Jan 14 2015
I merged a fix for the problem that occurs at MW 1.25alpha. Thanks for reporting this. Please delete your extensions/Graphviz directory, re-install via composer (composer require mediawiki/graph-viz 'dev-master') and confirm that the issue is resolved for you.
I recreated the problem on MW 1.25alpha. Here is the backtrace:
Jan 8 2015
On the MW installation where you still see errors, please confirm that version 1.5.1 appears for GraphViz on the Special:Version page. Also, did you restart your web server after updating the extension? If not, a PHP accelerator like APC might have yielded an old version of the extension.
Dec 22 2014
@Temptuousinsolence, if you haven't already, could you install the fix via composer and confirm that it works? If so, I will release the version and close this task. Thanks!
Dec 18 2014
@tstarling, could you review this bug when you have a moment and share any more thoughts about refactoring the Parser to avoid the recursion seen in T75073#763545?
I noticed that Parser::lock() now throws an exception in the case of Parser::parse recursion. So now my only interest is eliminating Parser::parse recursion that arises from WikitTextContent usage of wgParser.
Dec 17 2014
Dec 16 2014
Dec 15 2014
Fix available in dev-master:
Dec 11 2014
Sure
Dec 10 2014
A trivial test using WikitextContent::getParser copied from MessageCache::getParser worked (replaced all instances of $wgParser in WikitextContent with getParser calls). It resolved the problem in T75073 and did not have any side effects I could see.
Dec 9 2014
@matmarex, thanks for the info about recursiveTagParse. The situation I'm grappling with is shown in the backtrace in T75073#763545. WikitextContent::getParserOutput called parser::parse in the midst of an ongoing parse due to the interoperation of two extensions (GraphViz and SMW). I'm fishing for a core improvement, if one can be found, because I don't love the solution I've written for GraphViz as described in T75073#798676 (I added you as a reviewer of that change in gerrit BTW).
Dec 8 2014
Here's an example that works:
@Aklapper, please add a phab project for GraphViz. There is no external bug tracker. Thanks.
Dec 3 2014
I created task T76651 to track my request to fix this issue in the core.
Dec 1 2014
I don't love the fix I currently have out for review. It disables all hooks while GraphViz is uploading a file. This solution brings the phrases "sledgehammer method" and "band-aid solution" to mind. However, I think it is safe enough for the time being to unblock GraphViz users that are eager for a fix while I investigate alternatives.
Nov 30 2014
I inquired on semediawiki-devel@lists.sourceforge.net about the consequences of disabling SMW hooks during the GraphViz upload. Here is the reply:
Nov 25 2014
If you don't mind, please add the diagnostic code I gave Nov. 14 to Parser.php in your mediawiki includes/parser directory (repeated here).