GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • Sign in
  • ActionsCI/CD and automation
  • CodespacesCloud development environments
  • All Features
  • Documentation
  • Training
  • Certifications
  • Build with Copilot
  • Customize Copilot
  • Integrations
  • Trending repos
  • GitHub Sponsors
  • Developer articles
  • Enterprises

This view

  • Original page
  • New address

GeezerVison is showing github.com — http2: avoid uaf while receiving and sending rst_stream by Eusgor · Pull Request #64166 · nodejs/node

Conversation

@Eusgor

@Eusgor Eusgor commented Jun 27, 2026

Copy link
Copy Markdown
Contributor

Mark the session as receiving around nghttp2_session_mem_recv() and defer RST_STREAM handling while receive is in progress. This prevents closing a stream while nghttp2 still processes it and avoids heap-use-after-free in nghttp2_session_mem_recv2().

Fixes: #64113

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions
@nodejs-github-bot

nodejs-github-bot commented Jun 27, 2026

Copy link
Copy Markdown
Collaborator

Review requested:

  • @nodejs/http2
  • @nodejs/net
All reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

@nodejs-github-bot nodejs-github-bot added c++ Issues and PRs that require attention from people who are familiar with C++. http2 Issues and PRs related to the http2 subsystem. needs-ci PRs that need a full CI run. labels Jun 27, 2026
@Eusgor Eusgor mentioned this pull request Jun 27, 2026
Use-after-free error in http2 server #64113
Closed
@mertcanaltin

mertcanaltin commented Jun 27, 2026 •
edited
Loading

Uh oh!

There was an error while loading. Please reload this page.

Copy link
Copy Markdown
Member

Can you use "-s" (for Signed-off-by) in first commit command, after run this command
example: git commit --amend --no-edit -s "http2: avoid uaf while receiving and sending rst_stream"

after:
CLANG_FORMAT_START=$(git merge-base HEAD main) make format-cpp for cpp lint errors

All reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

@Eusgor
http2: avoid uaf while receiving and sending rst_stream
dec48cc
Mark the session as receiving around nghttp2_session_mem_recv() and
defer RST_STREAM handling while receive is in progress. This prevents
closing a stream while nghttp2 still processes it and avoids
heap-use-after-free in nghttp2_session_mem_recv2().

Fixes: nodejs#64113
Signed-off-by: Evgeniy Gorbanev <[email protected]>
@Eusgor
Eusgor force-pushed the main branch from 0c1bffe to dec48cc Compare June 29, 2026 06:34
@Eusgor

Eusgor commented Jun 29, 2026

Copy link
Copy Markdown
Contributor Author

Is everything correct now?

All reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

RafaelGSS
RafaelGSS reviewed Jun 29, 2026
View reviewed changes

@RafaelGSS RafaelGSS left a comment

Copy link
Copy Markdown
Member

There was a problem hiding this comment.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can you add a test case or an script that we could reproduce it?

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions
@Eusgor

Eusgor commented Jun 29, 2026 •
edited
Loading

Uh oh!

There was an error while loading. Please reload this page.

Copy link
Copy Markdown
Contributor Author

Can you add a test case or an script that we could reproduce it?

The scripts are in the issue #64113
The error is reproduced when using the ASAN sanitizer.

All reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

mcollina
mcollina approved these changes Jun 29, 2026
View reviewed changes

@mcollina mcollina left a comment

Copy link
Copy Markdown
Member

There was a problem hiding this comment.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

lgtm

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions
pimterry
pimterry requested changes Jul 1, 2026
View reviewed changes
Comment thread src/node_http2.cc Resolved

Uh oh!

There was an error while loading. Please reload this page.

@Eusgor

Eusgor commented Jul 2, 2026

Copy link
Copy Markdown
Contributor Author

If you mean replace the code with this

  if (session_->is_receiving()) {
    if (is_stream_cancel(code) || available_outbound_length_ > 0) {
      session_->AddPendingRstStream(id_);
      return;
    }
    FlushRstStream();
    return;
  }

then it fixes uaf, but I get these failed tests:
test-http2-compat-errors
test-http2-destroy-after-write
test-http2-server-errors

Or if I misunderstood you, please write your version.

All reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

@pimterry

pimterry commented Jul 2, 2026

Copy link
Copy Markdown
Member

Ah, interesting, yes we'll have to investigate that @Eusgor.

I took a bit more of a look, I think this is part of a bigger more fundamental issue - the nghttp2 docs say:

Do not call nghttp2_session_send(), nghttp2_session_mem_send2(), nghttp2_session_recv() or nghttp2_session_mem_recv2() from the nghttp2 callback functions directly or indirectly. It will lead to the crash.

And in this method, we call SendPendingData while receiving.

The tests are reasonable (e.g. destroy after write - it should flush the written data before the stream is destroyed) but this method we're changing isn't - it should never call SendPendingData with is_receiving() === true.

I had Claude do a quick scan, there's at least three places we ignore this nghttp2 requirement:

  • Http2Stream::SubmitRstStream() - fixed by this PR, but only for the case where no writes are pending.
  • Http2Session::OnDataChunkReceived - can call SendPendingData if buffer is too large.
  • Http2Session::Close() - calls SendPendingData directly

All of those are issues (good find!) and the new is_receiving() flag you've added is the right way to fix all of them, but we should take a more general approach instead of fixing this small part of one case.

Can you take a look? Really I think we need to always defer anything anything that could call one of those methods while receiving - that means something like early-return in SendPendingData() if receiving, deferring resets if there is pending data, and deferred destroy/close to fix the test failures around this logic. Take a look, let me know if you need any pointers and I can come up with a more detailed outline if that'd help.

All reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

@Eusgor
Eusgor force-pushed the main branch from 0de9ea2 to 22aa3b6 Compare July 13, 2026 09:00
@codecov

codecov Bot commented Jul 13, 2026 •
edited
Loading

Uh oh!

There was an error while loading. Please reload this page.

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 57.89474% with 24 lines in your changes missing coverage. Please review.
✅ Project coverage is 90.24%. Comparing base (e6a8d06) to head (5579c49).
⚠️ Report is 367 commits behind head on main.

Files with missing lines Patch % Lines
src/node_http2.cc 56.36% 18 Missing and 6 partials ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##             main   #64166      +/-   ##
==========================================
- Coverage   92.01%   90.24%   -1.77%     
==========================================
  Files         379      739     +360     
  Lines      166972   241720   +74748     
  Branches    25554    45561   +20007     
==========================================
+ Hits       153639   218150   +64511     
- Misses      13041    15112    +2071     
- Partials      292     8458    +8166     
Files with missing lines Coverage Δ
src/node_http2.h 92.26% <100.00%> (ø)
src/node_http2.cc 81.85% <56.36%> (ø)

... and 554 files with indirect coverage changes

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.
All reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

@Eusgor
Eusgor force-pushed the main branch 2 times, most recently from 62ef872 to d1de20f Compare July 13, 2026 14:34
@Eusgor
Eusgor requested a review from pimterry July 13, 2026 16:47
mcollina
mcollina approved these changes Jul 13, 2026
View reviewed changes

@mcollina mcollina left a comment

Copy link
Copy Markdown
Member

There was a problem hiding this comment.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

lgtm

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions
@mcollina mcollina added the request-ci Add this label to start a Jenkins CI on a PR. Only starts once the PR has an approving review. label Jul 13, 2026
pimterry
pimterry approved these changes Jul 14, 2026
View reviewed changes

@pimterry pimterry left a comment

Copy link
Copy Markdown
Member

There was a problem hiding this comment.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

One bit of dead code it'd be nice to clean up, but otherwise this LGTM. Thanks for digging into this further @Eusgor, nice work!

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions
Comment thread src/node_http2.cc Resolved

Uh oh!

There was an error while loading. Please reload this page.

@github-actions github-actions Bot removed the request-ci Add this label to start a Jenkins CI on a PR. Only starts once the PR has an approving review. label Jul 14, 2026
@nodejs-github-bot

nodejs-github-bot commented Jul 14, 2026

Copy link
Copy Markdown
Collaborator

CI: https://ci.nodejs.org/job/node-test-pull-request/74826/

All reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

@Eusgor
http2: defer send/close/destroy while session is receiving
5579c49
nghttp2 forbids calling nghttp2_session_mem_send() from mem_recv
callbacks.

Signed-off-by: Evgeniy Gorbanev <[email protected]>
@Eusgor
Eusgor force-pushed the main branch from d1de20f to 5579c49 Compare July 15, 2026 04:04
pimterry
pimterry approved these changes Jul 15, 2026
View reviewed changes
@pimterry pimterry added request-ci Add this label to start a Jenkins CI on a PR. Only starts once the PR has an approving review. author ready PRs with CI started, the required approvals, and no outstanding review comments. labels Jul 15, 2026
aduh95 pushed a commit that referenced this pull request Aug 3, 2026
@Eusgor @aduh95
http2: avoid uaf while receiving and sending rst_stream
8af1dfb
Mark the session as receiving around nghttp2_session_mem_recv() and
defer RST_STREAM handling while receive is in progress. This prevents
closing a stream while nghttp2 still processes it and avoids
heap-use-after-free in nghttp2_session_mem_recv2().

Fixes: #64113
Signed-off-by: Evgeniy Gorbanev <[email protected]>
PR-URL: #64166
Reviewed-By: Matteo Collina <[email protected]>
Reviewed-By: Tim Perry <[email protected]>
Reviewed-By: Rafael Gonzaga <[email protected]>
@aduh95 aduh95 added the backport-requested-v26.x PRs awaiting manual backport to the v26.x-staging branch. label Aug 4, 2026
@aduh95

aduh95 commented Aug 4, 2026

Copy link
Copy Markdown
Contributor

test-http2-many-writes-and-destroy is timing out on v26.x-staging with this change, we would need a manual backport PR

All reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

This was referenced Aug 6, 2026
test(h2): isolate connection churn seeds nodejs/undici#5643
Closed
Intermittent SIGSEGV in Maglev concurrent compilation on Linux (PersistentHandles::GetHandle) — regression between v24.14.1 and v24.15.0 #64841
Closed
[v24.x] http2: avoid UAF while receiving and sending RST_STREAM #65093
Closed
@sankalpsthakur sankalpsthakur mentioned this pull request Aug 7, 2026
http2: fix onread assert when destroying session from stream handler #65116
Closed
@mcollina mcollina mentioned this pull request Aug 13, 2026
[v26.x backport] http2: avoid uaf while receiving and sending rst_stream #65264
Merged
aduh95 pushed a commit to mcollina/node that referenced this pull request Aug 13, 2026
@Eusgor @aduh95
http2: avoid uaf while receiving and sending rst_stream
ca26282
Mark the session as receiving around nghttp2_session_mem_recv() and
defer RST_STREAM handling while receive is in progress. This prevents
closing a stream while nghttp2 still processes it and avoids
heap-use-after-free in nghttp2_session_mem_recv2().

Fixes: nodejs#64113
Signed-off-by: Evgeniy Gorbanev <[email protected]>
PR-URL: nodejs#64166
Backport-PR-URL: nodejs#65264
Reviewed-By: Antoine du Hamel <[email protected]>
juanarbol pushed a commit that referenced this pull request Aug 20, 2026
@Eusgor @juanarbol
http2: avoid uaf while receiving and sending rst_stream
7369d77
Mark the session as receiving around nghttp2_session_mem_recv() and
defer RST_STREAM handling while receive is in progress. This prevents
closing a stream while nghttp2 still processes it and avoids
heap-use-after-free in nghttp2_session_mem_recv2().

Fixes: #64113
Signed-off-by: Evgeniy Gorbanev <[email protected]>
PR-URL: #64166
Reviewed-By: Matteo Collina <[email protected]>
Reviewed-By: Tim Perry <[email protected]>
Reviewed-By: Rafael Gonzaga <[email protected]>
Signed-off-by: Juan José Arboleda <[email protected]>
This was referenced Aug 20, 2026
2026-09-01, Version 22.23.3 'Jod' (LTS) #65443
Closed
2026-09-17, Version 22.23.3 'Jod' (LTS) #65448
Merged
juanarbol pushed a commit that referenced this pull request Aug 21, 2026
@Eusgor @juanarbol
http2: avoid uaf while receiving and sending rst_stream
7c2df5d
Mark the session as receiving around nghttp2_session_mem_recv() and
defer RST_STREAM handling while receive is in progress. This prevents
closing a stream while nghttp2 still processes it and avoids
heap-use-after-free in nghttp2_session_mem_recv2().

Fixes: #64113
Signed-off-by: Evgeniy Gorbanev <[email protected]>
PR-URL: #64166
Backport-PR-URL: #65264
Reviewed-By: Antoine du Hamel <[email protected]>
aduh95 pushed a commit that referenced this pull request Aug 25, 2026
@Eusgor @aduh95
http2: avoid uaf while receiving and sending rst_stream
563cab1
Mark the session as receiving around nghttp2_session_mem_recv() and
defer RST_STREAM handling while receive is in progress. This prevents
closing a stream while nghttp2 still processes it and avoids
heap-use-after-free in nghttp2_session_mem_recv2().

Fixes: #64113
Signed-off-by: Evgeniy Gorbanev <[email protected]>
PR-URL: #64166
Backport-PR-URL: #65264
Reviewed-By: Antoine du Hamel <[email protected]>
@github-actions github-actions Bot mentioned this pull request Aug 25, 2026
2026-08-26, Version 26.8.0 (Current) #65551
Merged
aduh95 pushed a commit that referenced this pull request Aug 27, 2026
@Eusgor @aduh95
http2: avoid uaf while receiving and sending rst_stream
f43bed0
Mark the session as receiving around nghttp2_session_mem_recv() and
defer RST_STREAM handling while receive is in progress. This prevents
closing a stream while nghttp2 still processes it and avoids
heap-use-after-free in nghttp2_session_mem_recv2().

Fixes: #64113
Signed-off-by: Evgeniy Gorbanev <[email protected]>
PR-URL: #64166
Backport-PR-URL: #65264
Reviewed-By: Antoine du Hamel <[email protected]>
sankalpsthakur added a commit to sankalpsthakur/node that referenced this pull request Sep 2, 2026
@sankalpsthakur
http2: fix onread assert when destroying session from stream handler
6405192
When session.destroy() runs from a 'stream' handler, MakeCallback drains
nextTick while nghttp2 is still inside mem_recv. Close is deferred for
that window (see nodejs#64166), so later HEADERS in the same buffer created
C++ streams without a JS wrapper or onread, and DATA delivery aborted
with Assertion failed: onread->IsFunction().

- Reject new streams while the session is closing
- Destroy the C++ handle if on_headers runs after JS destroy
- Drop DATA when onread is not installed (defensive)

Fixes: nodejs#64850
Signed-off-by: Sankalp Thakur <[email protected]>
@github-actions github-actions Bot mentioned this pull request Sep 7, 2026
2026-09-08, Version 24.21.0 'Krypton' (LTS) #65873
Merged
aduh95 pushed a commit to mcollina/node that referenced this pull request Sep 7, 2026
@Eusgor @aduh95
http2: adapt receive deferral for Node.js 24
176146b
Node.js 24 does not include the later stream lifecycle changes that the
original fix relies on. Preserve its reset ordering, avoid JavaScript
callbacks after a deferred session close, and let destroyed streams
finish without requesting trailers.

Signed-off-by: Matteo Collina <[email protected]>
Refs: nodejs#64166
aduh95 pushed a commit to mcollina/node that referenced this pull request Sep 7, 2026
@mcollina @aduh95
http2: adapt receive deferral for Node.js 24
b53cfdb
Node.js 24 does not include the later stream lifecycle changes that the
original fix relies on. Preserve its reset ordering, avoid JavaScript
callbacks after a deferred session close, and let destroyed streams
finish without requesting trailers.

Signed-off-by: Matteo Collina <[email protected]>
Refs: nodejs#64166
aduh95 pushed a commit that referenced this pull request Sep 7, 2026
@mcollina @aduh95
http2: adapt receive deferral for Node.js 24
b508a20
Node.js 24 does not include the later stream lifecycle changes that the
original fix relies on. Preserve its reset ordering, avoid JavaScript
callbacks after a deferred session close, and let destroyed streams
finish without requesting trailers.

Signed-off-by: Matteo Collina <[email protected]>
Refs: #64166
PR-URL: #65093
Reviewed-By: Antoine du Hamel <[email protected]>
aduh95 pushed a commit that referenced this pull request Sep 7, 2026
@mcollina @aduh95
http2: adapt receive deferral for Node.js 24
83a2755
Node.js 24 does not include the later stream lifecycle changes that the
original fix relies on. Preserve its reset ordering, avoid JavaScript
callbacks after a deferred session close, and let destroyed streams
finish without requesting trailers.

Signed-off-by: Matteo Collina <[email protected]>
Refs: #64166
PR-URL: #65093
Reviewed-By: Antoine du Hamel <[email protected]>
mcollina pushed a commit that referenced this pull request Sep 14, 2026
@sankalpsthakur @mcollina
http2: fix onread assert when destroying session from stream handler
0e32ee2
When session.destroy() runs from a 'stream' handler, MakeCallback drains
nextTick while nghttp2 is still inside mem_recv. Close is deferred for
that window (see #64166), so later HEADERS in the same buffer created
C++ streams without a JS wrapper or onread, and DATA delivery aborted
with Assertion failed: onread->IsFunction().

- Reject new streams while the session is closing
- Destroy the C++ handle if on_headers runs after JS destroy
- Drop DATA when onread is not installed (defensive)

Fixes: #64850
Signed-off-by: Sankalp Thakur <[email protected]>
PR-URL: #65116
Reviewed-By: Matteo Collina <[email protected]>
Reviewed-By: Tim Perry <[email protected]>
aduh95 pushed a commit that referenced this pull request Sep 16, 2026
@sankalpsthakur @aduh95
http2: fix onread assert when destroying session from stream handler
2054437
When session.destroy() runs from a 'stream' handler, MakeCallback drains
nextTick while nghttp2 is still inside mem_recv. Close is deferred for
that window (see #64166), so later HEADERS in the same buffer created
C++ streams without a JS wrapper or onread, and DATA delivery aborted
with Assertion failed: onread->IsFunction().

- Reject new streams while the session is closing
- Destroy the C++ handle if on_headers runs after JS destroy
- Drop DATA when onread is not installed (defensive)

Fixes: #64850
Signed-off-by: Sankalp Thakur <[email protected]>
PR-URL: #65116
Reviewed-By: Matteo Collina <[email protected]>
Reviewed-By: Tim Perry <[email protected]>
aduh95 pushed a commit that referenced this pull request Sep 22, 2026
@sankalpsthakur @aduh95
http2: fix onread assert when destroying session from stream handler
0a14c25
When session.destroy() runs from a 'stream' handler, MakeCallback drains
nextTick while nghttp2 is still inside mem_recv. Close is deferred for
that window (see #64166), so later HEADERS in the same buffer created
C++ streams without a JS wrapper or onread, and DATA delivery aborted
with Assertion failed: onread->IsFunction().

- Reject new streams while the session is closing
- Destroy the C++ handle if on_headers runs after JS destroy
- Drop DATA when onread is not installed (defensive)

Fixes: #64850
Signed-off-by: Sankalp Thakur <[email protected]>
PR-URL: #65116
Reviewed-By: Matteo Collina <[email protected]>
Reviewed-By: Tim Perry <[email protected]>
@aduh95 aduh95 added backported-to-v26.x PRs backported to the v26.x-staging branch. and removed lts-watch-v22.x PRs that may need to be released in v22.x backport-requested-v26.x PRs awaiting manual backport to the v26.x-staging branch. labels Sep 22, 2026
aduh95 pushed a commit that referenced this pull request Sep 25, 2026
@sankalpsthakur @aduh95
http2: fix onread assert when destroying session from stream handler
9a2f77a
When session.destroy() runs from a 'stream' handler, MakeCallback drains
nextTick while nghttp2 is still inside mem_recv. Close is deferred for
that window (see #64166), so later HEADERS in the same buffer created
C++ streams without a JS wrapper or onread, and DATA delivery aborted
with Assertion failed: onread->IsFunction().

- Reject new streams while the session is closing
- Destroy the C++ handle if on_headers runs after JS destroy
- Drop DATA when onread is not installed (defensive)

Fixes: #64850
Signed-off-by: Sankalp Thakur <[email protected]>
PR-URL: #65116
Reviewed-By: Matteo Collina <[email protected]>
Reviewed-By: Tim Perry <[email protected]>
mcollina pushed a commit to mcollina/node that referenced this pull request Oct 4, 2026
@sankalpsthakur @mcollina
http2: fix onread assert when destroying session from stream handler
1442173
When session.destroy() runs from a 'stream' handler, MakeCallback drains
nextTick while nghttp2 is still inside mem_recv. Close is deferred for
that window (see nodejs#64166), so later HEADERS in the same buffer created
C++ streams without a JS wrapper or onread, and DATA delivery aborted
with Assertion failed: onread->IsFunction().

- Reject new streams while the session is closing
- Destroy the C++ handle if on_headers runs after JS destroy
- Drop DATA when onread is not installed (defensive)

Fixes: nodejs#64850
Assisted-by: pi
Signed-off-by: Sankalp Thakur <[email protected]>
PR-URL: nodejs#65116
Backport-PR-URL: nodejs#66515
Reviewed-By: Matteo Collina <[email protected]>
Reviewed-By: Tim Perry <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Reviewers

@mcollina mcollina mcollina approved these changes
@pimterry pimterry pimterry approved these changes
@RafaelGSS RafaelGSS RafaelGSS approved these changes

Uh oh!

There was an error while loading. Please reload this page.

Assignees

No one assigned

Labels

author ready PRs with CI started, the required approvals, and no outstanding review comments. backported-to-v26.x PRs backported to the v26.x-staging branch. c++ Issues and PRs that require attention from people who are familiar with C++. commit-queue-squash PRs the Commit Queue should land as one squashed commit. http2 Issues and PRs related to the http2 subsystem. needs-ci PRs that need a full CI run.

Projects

None yet

Milestone

No milestone

Development

Successfully merging this pull request may close these issues.

Use-after-free error in http2 server

Uh oh!

There was an error while loading. Please reload this page.

7 participants

@Eusgor @nodejs-github-bot @mertcanaltin @pimterry @mcollina @aduh95 @RafaelGSS
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.
You are visitor 01402503 — GeezerVison does not store the pages you look up.
Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.