fix(server): add re-entrancy guard to close() to prevent stack overflow#1808
Open
lanxevo3 wants to merge 3 commits intomodelcontextprotocol:mainfrom
Open
fix(server): add re-entrancy guard to close() to prevent stack overflow#1808lanxevo3 wants to merge 3 commits intomodelcontextprotocol:mainfrom
lanxevo3 wants to merge 3 commits intomodelcontextprotocol:mainfrom
Conversation
OAuth 2.1 §3.2 requires token endpoint requests to use application/x-www-form-urlencoded regardless of grant type. Add an explicit header.set() call immediately before the fetch in executeTokenRequest() to prevent any addClientAuthentication implementation from accidentally overriding the Content-Type. Fixes modelcontextprotocol/inspector#1160
When close() is called while cleanup() callbacks are still running (e.g. a cleanup function that triggers onclose which calls close() again), the transport enters infinite recursion causing RangeError: Maximum call stack size exceeded — especially acute when multiple transports close simultaneously. The fix adds a _closed boolean flag checked at the top of close(). If the transport is already closing, subsequent calls return immediately instead of recursing. This is safe because close() is idempotent. Also applies to the idempotent close() contract: calling close() multiple times should have no additional effect after the first call. Fixes modelcontextprotocol#1699.
|
@modelcontextprotocol/client
@modelcontextprotocol/server
@modelcontextprotocol/express
@modelcontextprotocol/hono
@modelcontextprotocol/node
commit: |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
When close() is called while cleanup() callbacks are still running (e.g. a cleanup function triggers onclose which calls close() again), the transport enters infinite recursion causing RangeError: Maximum call stack size exceeded — especially acute when multiple transports close simultaneously.
Fix
Adds a _closed boolean flag checked at the top of close(). Subsequent calls return immediately instead of recursing. This is consistent with close() being idempotent by contract.
\\ ypescript
private _closed: boolean = false;
async close(): Promise {
if (this._closed) return;
this._closed = true;
// ... existing cleanup logic
}
\\
Fixes #1699.