<p>There is no way to prevent a recursive program from running out of stack if its given pathological input like this unless you wish to make some arbitrary limit on nesting levels that isn't there in the language (JSON) and may be too small on large systems that have big stacks and may be too big on small systems with small stacks.</p>
<p><a href="https://github.com/codebrainz" class="user-mention">@codebrainz</a> if you get Linus and MS and BSD to accept a new API to provide the real stack size (since existing ones return address space not physical limits) and then measure how much stack each iteration takes and divide to get the nesting limit we can prevent overflow.</p>
<p>Or you can unwind the stack on overflow, recognise its a recursive parser problem and unwind back to where the loop started, terminate the loop and return to Geany now with stack available.  That might "only" take patches to Glibc.</p>
<p>Or you can make the parser non-recursive and control what memory it uses each nesting level so you don't blow heap instead.  Pull requests are welcome <g-emoji class="g-emoji" alias="grin" fallback-src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f601.png" ios-version="6.0">😁</g-emoji></p>

<p style="font-size:small;-webkit-text-size-adjust:none;color:#666;">—<br />You are receiving this because you are subscribed to this thread.<br />Reply to this email directly, <a href="https://github.com/geany/geany/issues/1768#issuecomment-364712024">view it on GitHub</a>, or <a href="https://github.com/notifications/unsubscribe-auth/ABDrJ2a5p1szubc6cRkDFPAJZcw4vzVhks5tTkcrgaJpZM4SBFOp">mute the thread</a>.<img alt="" height="1" src="https://github.com/notifications/beacon/ABDrJ1g_QyCt36rm-QTUbc9ZI8iUrXhpks5tTkcrgaJpZM4SBFOp.gif" width="1" /></p>
<div itemscope itemtype="http://schema.org/EmailMessage">
<div itemprop="action" itemscope itemtype="http://schema.org/ViewAction">
  <link itemprop="url" href="https://github.com/geany/geany/issues/1768#issuecomment-364712024"></link>
  <meta itemprop="name" content="View Issue"></meta>
</div>
<meta itemprop="description" content="View this Issue on GitHub"></meta>
</div>

<script type="application/json" data-scope="inboxmarkup">{"api_version":"1.0","publisher":{"api_key":"05dde50f1d1a384dd78767c55493e4bb","name":"GitHub"},"entity":{"external_key":"github/geany/geany","title":"geany/geany","subtitle":"GitHub repository","main_image_url":"https://cloud.githubusercontent.com/assets/143418/17495839/a5054eac-5d88-11e6-95fc-7290892c7bb5.png","avatar_image_url":"https://cloud.githubusercontent.com/assets/143418/15842166/7c72db34-2c0b-11e6-9aed-b52498112777.png","action":{"name":"Open in GitHub","url":"https://github.com/geany/geany"}},"updates":{"snippets":[{"icon":"PERSON","message":"@elextr in #1768: There is no way to prevent a recursive program from running out of stack if its given pathological input like this unless you wish to make some arbitrary limit on nesting levels that isn't there in the language (JSON) and may be too small on large systems that have big stacks and may be too big on small systems with small stacks.\r\n\r\n@codebrainz if you get Linus and MS and BSD to accept a new API to provide the real stack size (since existing ones return address space not physical limits) and then measure how much stack each iteration takes and divide to get the nesting limit we can prevent overflow.  \r\n\r\nOr you can unwind the stack on overflow, recognise its a recursive parser problem and unwind back to where the loop started, terminate the loop and return to Geany now with stack available.  That might \"only\" take patches to Glibc.\r\n\r\nOr you can make the parser non-recursive and control what memory it uses each nesting level so you don't blow heap instead.  Pull requests are welcome :grin:"}],"action":{"name":"View Issue","url":"https://github.com/geany/geany/issues/1768#issuecomment-364712024"}}}</script>