Skip to content
GitLab
  • Menu
Projects Groups Snippets
  • /
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
    • Contribute to GitLab
  • Sign in / Register
  • pike pike
  • Project information
    • Project information
    • Activity
    • Labels
    • Members
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributors
    • Graph
    • Compare
  • Issues 121
    • Issues 121
    • List
    • Boards
    • Service Desk
    • Milestones
  • Merge requests 0
    • Merge requests 0
  • CI/CD
    • CI/CD
    • Pipelines
    • Jobs
    • Schedules
  • Deployments
    • Deployments
    • Environments
    • Releases
  • Monitor
    • Monitor
    • Incidents
  • Analytics
    • Analytics
    • Value stream
    • CI/CD
    • Repository
  • Wiki
    • Wiki
  • Snippets
    • Snippets
  • Activity
  • Graph
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
Collapse sidebar
  • pikelang
  • pikepike
  • Issues
  • #7552
Closed
Open
Created Sep 02, 2015 by Peter Bortas@zinoOwner

Potential bug in array append and/or recursion?

Imported from http://bugzilla.roxen.com/bugzilla/show_bug.cgi?id=7552

Reported by Jonas Wallden jonasw@roxen.com

This is a infinite recursion issue seen with Pike 8.0 (b762abf9 from July 23, 2015).

In the backtrace the code is walking a tree structure, but the parameters indicate some weird parent/child loop. Since this was a freak occurrence that hasn't been reproduced I don't know if the tree construction (which is many years old) once in a blue moon can fail spectacularly and create that loop; another possibility is that the compilation/execution of the recursion fails in refcounts and/or recursion optimizations.

A simplified backtrace looks like this:

recurse( ({ @1 }) ) recurse(@2 = ({ @1 }) ) recurse(@2) [...repeat...] recurse(@2) recurse(@3 = ({ Node_with_no_children, @1 }) )

Here is the full backtrace and the relevant code:

          : Internal server error: Svalue stack overflow. (99624 of 100000 entries on stack, needed 256 more entries)
          : modules/sitebuilder/pike-modules/Sitebuilder.pmod/FS.pmod/VCFile.pike (70c61484):380: VCFile(N/E:72:[Basic]::/cms-components.xsl)->update_state(0,0,0,0,0,1)
          : modules/sitebuilder/pike-modules/Sitebuilder.pmod/FS.pmod/VCFile.pike (70c61484):318: VCFile(N/E:72:[Basic]::/cms-components.xsl)->init_state(UNDEFINED)
          : modules/sitebuilder/pike-modules/Sitebuilder.pmod/Workarea.pike (2ee0cf90):1304: Workarea(Basic:)->_sbobj(72,"cms-components.xsl",UNDEFINED,UNDEFINED)
16:44:13  : modules/sitebuilder/pike-modules/Sitebuilder.pmod/Workarea.pike (2ee0cf90):3056: Workarea(Basic:)->sbobj("cms-components.xsl",72,ProtocolCacheKey(inactive),UNDEFINED,UNDEFINED)
 0d 1h55m : modules/sitebuilder/pike-modules/Sitebuilder.pmod/Workarea.pike (2ee0cf90):6050: Workarea(Basic:)->locate_file("cms-components.xsl",VCDir(E:72:[Basic]::/),"sitebuilder/xsl-template",,,0)
          : modules/sitebuilder/modules/xsltransform/xsltransform.pike (2ea961c2):2412: RoxenModule(Basic/xsltransform#0)->get_xsl_path("cms-components.xsl",VCFile(E/E:72:[Basic]::/index.xml),0,@0=RequestID(/edit/__afs/compedit-get-fragments?path=%2Findex.xml&tag=2&sb_session_id=B96F7A67-1FEC-4A3C-86D8-846DE1C45BFD&rnd=1440773049777))
          : modules/sitebuilder/modules/xsltransform/xsltransform.pike (2ea961c2):2497: RoxenModule(Basic/xsltransform#0)->do_xsltransform("xsltransform",mapping[1],"<content-box component-position='middle' height='"+[518],@0,0,/Users/jonasw/Roxen/server/modules/sitebuilder/pike-modules/Sitebuilder.pmod/Editor.__class_66926_7_line_3900(),UNDEFINED)
          : modules/sitebuilder/pike-modules/Sitebuilder.pmod/Editor.pmod (01ee0491):3905: /Users/jonasw/Roxen/server/modules/sitebuilder/pike-modules/Sitebuilder.pmod/Editor.get_component_transform(ComponentInstance(form2-component),0,0,@0,,,1)
          : modules/sitebuilder/pike-modules/Sitebuilder.pmod/Editor.pmod (01ee0491):3339: /Users/jonasw/Roxen/server/modules/sitebuilder/pike-modules/Sitebuilder.pmod/Editor.item_for_frag(/Users/jonasw/Roxen/server/modules/sitebuilder/pike-modules/Sitebuilder.pmod/Editor.EditorPageState(),@1=Editor.Fragment(bfe691ac7b0ae19830d2452b7334f0b1,"comp:000055988faf:0000000006:4cd3",1,1,ch#1),,,3)
16:44:13  : modules/sitebuilder/pike-modules/Sitebuilder.pmod/Editor.pmod (01ee0491):3382: /Users/jonasw/Roxen/server/modules/sitebuilder/pike-modules/Sitebuilder.pmod/Editor.recurse(({@1}))
 0d 1h55m : modules/sitebuilder/pike-modules/Sitebuilder.pmod/Editor.pmod (01ee0491):3385: /Users/jonasw/Roxen/server/modules/sitebuilder/pike-modules/Sitebuilder.pmod/Editor.recurse(@2=({@1}))
          : modules/sitebuilder/pike-modules/Sitebuilder.pmod/Editor.pmod (01ee0491):3385: /Users/jonasw/Roxen/server/modules/sitebuilder/pike-modules/Sitebuilder.pmod/Editor.recurse(@2)
          : ... last 1 frames above repeated 8277 times ...
          : modules/sitebuilder/pike-modules/Sitebuilder.pmod/Editor.pmod (01ee0491):3385: /Users/jonasw/Roxen/server/modules/sitebuilder/pike-modules/Sitebuilder.pmod/Editor.recurse(@3=({Editor.Fragment(bdda1d0df467a1ea7f4a8fcc71daa3bc,"comp:00003d89db82:0000000000:281e",1,1,ch#-1),@1}))
          : modules/sitebuilder/pike-modules/Sitebuilder.pmod/Editor.pmod (01ee0491):3389: /Users/jonasw/Roxen/server/modules/sitebuilder/pike-modules/Sitebuilder.pmod/Editor.items_for_frags(@4=/Users/jonasw/Roxen/server/modules/sitebuilder/pike-modules/Sitebuilder.pmod/Editor.EditorPageState(),@3,@5=([]),UNDEFINED,UNDEFINED,@0)
16:44:13  : modules/sitebuilder/pike-modules/Sitebuilder.pmod/Editor.pmod (01ee0491):3431: /Users/jonasw/Roxen/server/modules/sitebuilder/pike-modules/Sitebuilder.pmod/Editor.get_fragments(@6=VCFile(E/E:72:[Basic]::/index.xml),UNDEFINED,UNDEFINED,@0)
 0d 1h55m : modules/sitebuilder/modules/manager/content_editor.pike (d10d5f89):6265: AFS.Action(compedit-get-fragments)->exec(@0,ClientSession("72-\"B96F7A67-1FEC-4A3C-86D8-846DE1C45BFD\"", 0, 61),mapping[12],"2")
          : etc/modules/AFS.pmod/Filesystem.pike:330: RoxenModule(Basic/content_editor#0)->call_fs_action("compedit-get-fragments",@0,@7=ClientSession("72-\"B96F7A67-1FEC-4A3C-86D8-846DE1C45BFD\"", 0, 61),mapping[12])
          : etc/modules/AFS.pmod/Filesystem.pike:374: RoxenModule(Basic/content_editor#0)->find_action("compedit-get-fragments",@0)
          : modules/sitebuilder/modules/manager/content_editor.pike (d10d5f89):2562: RoxenModule(Basic/content_editor#0)->find_file("__afs/compedit-get-fragments",@0,UNDEFINED)
          : base_server/configuration.pike (e4e92c15):2266: Configuration(Basic)->low_get_file(@0,UNDEFINED)
16:44:13  : base_server/configuration.pike (e4e92c15):2525: Configuration(Basic)->get_file(@0,UNDEFINED,UNDEFINED)
 0d 1h55m : base_server/configuration.pike (e4e92c15):2500: Configuration(Basic)->handle_request(@0,UNDEFINED)
          : protocols/http.pike (6608940b):3063: RequestID(/edit/__afs/compedit-get-fragments?path=%2Findex.xml&tag=2&sb_session_id=B96F7A67-1FEC-4A3C-86D8-846DE1C45BFD&rnd=1440773049777)->handle_request()
          : protocols/http.pike (6608940b):3006: RequestID(/edit/__afs/compedit-get-fragments?path=%2Findex.xml&tag=2&sb_session_id=B96F7A67-1FEC-4A3C-86D8-846DE1C45BFD&rnd=1440773049777)->handle_request_from_queue()
          : base_server/roxen.pike (a1029109):929: roxen()->handler_thread(14)


private array(mapping|array) items_for_frags(EditorPageState state,
					     array(Fragment) fragments,
					     mapping attrs,
					     string|void edit_sid,
					     string|void suppress_output_sid,
					     RequestID id)
{
  //  Iterate through nesting and accumulate all info. Children are
  //  output as a nested array following the parent component.
  array(mapping|array) recurse(array(Fragment) child_frags) {
    array(mapping|array) res = ({ });
    foreach (child_frags, Fragment f) {
      mapping item =
	item_for_frag(state, f, attrs, edit_sid, suppress_output_sid, id);
      res += ({ item });
      if (item.is_group && f->children)
	res += ({ recurse(f->children) });
    }
    return res;
  };
  return recurse(fragments);
}
Assignee
Assign to
Time tracking