[QUIC] Fix native crashes and heap corruption via "generated-like" interop - #74669

Merged
CarnaViire merged 6 commits into
dotnet:mainfrom
CarnaViire:quic-crash-fix-v2
Sep 6, 2022
Merged

[QUIC] Fix native crashes and heap corruption via "generated-like" interop#74669
CarnaViire merged 6 commits into
dotnet:mainfrom
CarnaViire:quic-crash-fix-v2

Conversation

@CarnaViire

Copy link
Copy Markdown
Member

Alternative to #74611

We should explore how to generate stuff like that in the future. Relevant PR: #65204

Fixes#72696

@CarnaViire
CarnaViire requested a review from a teamAugust 26, 2022 18:02
@ghostghost assigned CarnaViireAug 26, 2022
@ghost

Copy link
Copy Markdown

Tagging subscribers to this area: @dotnet/ncl
See info in area-owners.md if you want to be subscribed.

Issue Details

Alternative to #74611

We should explore how to generate stuff like that in the future. Relevant PR: #65204

Fixes #72696

Author:CarnaViire
Assignees:-
Labels:

area-System.Net.Http

Milestone:-

@ghost

Copy link
Copy Markdown

Tagging subscribers to this area: @dotnet/ncl
See info in area-owners.md if you want to be subscribed.

Issue Details

Alternative to #74611

We should explore how to generate stuff like that in the future. Relevant PR: #65204

Fixes #72696

Author:CarnaViire
Assignees:CarnaViire
Labels:

area-System.Net.Quic

Milestone:-

Comment threadsrc/libraries/System.Net.Quic/src/System/Net/Quic/Internal/MsQuicApi.cs Outdated
@rzikm

Copy link
Copy Markdown
Member

Can we also make the MsQuicApi.Api.ApiTable object private so it forces us to use the wrappers?

Also, since we are touching this, what about getting rid of the .Api. in the middle by making the methods static on MsQuicApi?

MsQuicApi.Api.Registration,
&NativeCallback,
(void*)GCHandle.ToIntPtr(context),
&handle),

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

For the *Open methods we could make the wrapper use out MsQuicContextSafeHandle handle parameter and construct the safe handle inside. What do you think?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

I'll try it out and see if makes sense. If yes, I'll work it in. I like the idea.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

This would be hard to make work automagically (tm) with source generators. But we could introduce manual helpers. Once again, postponing this for a follow up.

@ManickaP

Copy link
Copy Markdown
Member

Can we also make the MsQuicApi.Api.ApiTable object private so it forces us to use the wrappers?

We're using it directly for Close... methods. It's doable though, but I'm hesitant to do this change in this PR (increased churn, we want to backport).

Also, since we are touching this, what about getting rid of the .Api. in the middle by making the methods static on MsQuicApi?

I'd love that, but as I'll the same reasoning as above, minimize churn and we can address this as a follow up.

@ManickaP

Copy link
Copy Markdown
Member

For follow up, filed: #75009

{
_sendBuffers.Reset();
_sendTcs.TrySetException(exception, final: true);
if (_sendBuffers.Count > 0 && _sendBuffers.Buffers[0].Buffer != null)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

I believe this will become a non-issue when #73691 is implemented. I made it a high prio issue for 8.0 since it seems more important now.

@rzikmrzikm left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

LGTM, modulo existing comments

_connectedTcs.TrySetResult();
return QUIC_STATUS_SUCCESS;
}

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Are these whitespace changes intentional?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Yes, they are. Either we do have whitespace between Handle... or not, but we should be consistent in all classes (Listener, Connection, Stream). I don't mind going either way, but I mind having them in Connection and nowhere else.

@CarnaViire
CarnaViire deleted the quic-crash-fix-v2 branch September 6, 2022 18:09
@karelzkarelz added this to the 8.0.0 milestone Sep 7, 2022
CarnaViire added a commit to CarnaViire/runtime that referenced this pull request Sep 7, 2022
…terop (dotnet#74669)
* Send buffers and handles crash fixes
* Add generated-like interop
* Apply PR feedback from dotnet#74611
* Change asserts
* Feedback + moved native methods to their own file
* PR feedback
Co-authored-by: ManickaP <mapichov@microsoft.com>
carlossanlop pushed a commit that referenced this pull request Sep 8, 2022
…terop (#74669) (#75192)
* Send buffers and handles crash fixes
* Add generated-like interop
* Apply PR feedback from #74611
* Change asserts
* Feedback + moved native methods to their own file
* PR feedback
Co-authored-by: ManickaP <mapichov@microsoft.com>
Co-authored-by: ManickaP <mapichov@microsoft.com>
@ghostghost locked as resolved and limited conversation to collaborators Oct 7, 2022
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[HTTP/3] SIGABRT in stress tests

6 participants

@CarnaViire@rzikm@ManickaP@jkotas@teo-tsirpanis@karelz
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

[QUIC] Fix native crashes and heap corruption via "generated-like" interop - #74669

Merged
CarnaViire merged 6 commits into
dotnet:mainfrom
CarnaViire:quic-crash-fix-v2
Sep 6, 2022
Merged

[QUIC] Fix native crashes and heap corruption via "generated-like" interop#74669
CarnaViire merged 6 commits into
dotnet:mainfrom
CarnaViire:quic-crash-fix-v2

Conversation

@CarnaViire

Copy link
Copy Markdown
Member

Alternative to #74611

We should explore how to generate stuff like that in the future. Relevant PR: #65204

Fixes#72696

@CarnaViire
CarnaViire requested a review from a teamAugust 26, 2022 18:02
@ghostghost assigned CarnaViireAug 26, 2022
@ghost

Copy link
Copy Markdown

Tagging subscribers to this area: @dotnet/ncl
See info in area-owners.md if you want to be subscribed.

Issue Details

Alternative to #74611

We should explore how to generate stuff like that in the future. Relevant PR: #65204

Fixes #72696

Author:CarnaViire
Assignees:-
Labels:

area-System.Net.Http

Milestone:-

@ghost

Copy link
Copy Markdown

Tagging subscribers to this area: @dotnet/ncl
See info in area-owners.md if you want to be subscribed.

Issue Details

Alternative to #74611

We should explore how to generate stuff like that in the future. Relevant PR: #65204

Fixes #72696

Author:CarnaViire
Assignees:CarnaViire
Labels:

area-System.Net.Quic

Milestone:-

Comment threadsrc/libraries/System.Net.Quic/src/System/Net/Quic/Internal/MsQuicApi.cs Outdated
@rzikm

Copy link
Copy Markdown
Member

Can we also make the MsQuicApi.Api.ApiTable object private so it forces us to use the wrappers?

Also, since we are touching this, what about getting rid of the .Api. in the middle by making the methods static on MsQuicApi?

MsQuicApi.Api.Registration,
&NativeCallback,
(void*)GCHandle.ToIntPtr(context),
&handle),

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

For the *Open methods we could make the wrapper use out MsQuicContextSafeHandle handle parameter and construct the safe handle inside. What do you think?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

I'll try it out and see if makes sense. If yes, I'll work it in. I like the idea.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

This would be hard to make work automagically (tm) with source generators. But we could introduce manual helpers. Once again, postponing this for a follow up.

@ManickaP

Copy link
Copy Markdown
Member

Can we also make the MsQuicApi.Api.ApiTable object private so it forces us to use the wrappers?

We're using it directly for Close... methods. It's doable though, but I'm hesitant to do this change in this PR (increased churn, we want to backport).

Also, since we are touching this, what about getting rid of the .Api. in the middle by making the methods static on MsQuicApi?

I'd love that, but as I'll the same reasoning as above, minimize churn and we can address this as a follow up.

@ManickaP

Copy link
Copy Markdown
Member

For follow up, filed: #75009

{
_sendBuffers.Reset();
_sendTcs.TrySetException(exception, final: true);
if (_sendBuffers.Count > 0 && _sendBuffers.Buffers[0].Buffer != null)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

I believe this will become a non-issue when #73691 is implemented. I made it a high prio issue for 8.0 since it seems more important now.

@rzikmrzikm left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

LGTM, modulo existing comments

_connectedTcs.TrySetResult();
return QUIC_STATUS_SUCCESS;
}

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Are these whitespace changes intentional?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Yes, they are. Either we do have whitespace between Handle... or not, but we should be consistent in all classes (Listener, Connection, Stream). I don't mind going either way, but I mind having them in Connection and nowhere else.

@CarnaViire
CarnaViire deleted the quic-crash-fix-v2 branch September 6, 2022 18:09
@karelzkarelz added this to the 8.0.0 milestone Sep 7, 2022
CarnaViire added a commit to CarnaViire/runtime that referenced this pull request Sep 7, 2022
…terop (dotnet#74669)
* Send buffers and handles crash fixes
* Add generated-like interop
* Apply PR feedback from dotnet#74611
* Change asserts
* Feedback + moved native methods to their own file
* PR feedback
Co-authored-by: ManickaP <mapichov@microsoft.com>
carlossanlop pushed a commit that referenced this pull request Sep 8, 2022
…terop (#74669) (#75192)
* Send buffers and handles crash fixes
* Add generated-like interop
* Apply PR feedback from #74611
* Change asserts
* Feedback + moved native methods to their own file
* PR feedback
Co-authored-by: ManickaP <mapichov@microsoft.com>
Co-authored-by: ManickaP <mapichov@microsoft.com>
@ghostghost locked as resolved and limited conversation to collaborators Oct 7, 2022
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[HTTP/3] SIGABRT in stress tests

6 participants

@CarnaViire@rzikm@ManickaP@jkotas@teo-tsirpanis@karelz
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

[QUIC] Fix native crashes and heap corruption via "generated-like" interop - #74669

Merged
CarnaViire merged 6 commits into
dotnet:mainfrom
CarnaViire:quic-crash-fix-v2
Sep 6, 2022
Merged

[QUIC] Fix native crashes and heap corruption via "generated-like" interop#74669
CarnaViire merged 6 commits into
dotnet:mainfrom
CarnaViire:quic-crash-fix-v2

Conversation

@CarnaViire

Copy link
Copy Markdown
Member

Alternative to #74611

We should explore how to generate stuff like that in the future. Relevant PR: #65204

Fixes#72696

@CarnaViire
CarnaViire requested a review from a teamAugust 26, 2022 18:02
@ghostghost assigned CarnaViireAug 26, 2022
@ghost

Copy link
Copy Markdown

Tagging subscribers to this area: @dotnet/ncl
See info in area-owners.md if you want to be subscribed.

Issue Details

Alternative to #74611

We should explore how to generate stuff like that in the future. Relevant PR: #65204

Fixes #72696

Author:CarnaViire
Assignees:-
Labels:

area-System.Net.Http

Milestone:-

@ghost

Copy link
Copy Markdown

Tagging subscribers to this area: @dotnet/ncl
See info in area-owners.md if you want to be subscribed.

Issue Details

Alternative to #74611

We should explore how to generate stuff like that in the future. Relevant PR: #65204

Fixes #72696

Author:CarnaViire
Assignees:CarnaViire
Labels:

area-System.Net.Quic

Milestone:-

Comment threadsrc/libraries/System.Net.Quic/src/System/Net/Quic/Internal/MsQuicApi.cs Outdated
@rzikm

Copy link
Copy Markdown
Member

Can we also make the MsQuicApi.Api.ApiTable object private so it forces us to use the wrappers?

Also, since we are touching this, what about getting rid of the .Api. in the middle by making the methods static on MsQuicApi?

MsQuicApi.Api.Registration,
&NativeCallback,
(void*)GCHandle.ToIntPtr(context),
&handle),

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

For the *Open methods we could make the wrapper use out MsQuicContextSafeHandle handle parameter and construct the safe handle inside. What do you think?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

I'll try it out and see if makes sense. If yes, I'll work it in. I like the idea.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

This would be hard to make work automagically (tm) with source generators. But we could introduce manual helpers. Once again, postponing this for a follow up.

@ManickaP

Copy link
Copy Markdown
Member

Can we also make the MsQuicApi.Api.ApiTable object private so it forces us to use the wrappers?

We're using it directly for Close... methods. It's doable though, but I'm hesitant to do this change in this PR (increased churn, we want to backport).

Also, since we are touching this, what about getting rid of the .Api. in the middle by making the methods static on MsQuicApi?

I'd love that, but as I'll the same reasoning as above, minimize churn and we can address this as a follow up.

@ManickaP

Copy link
Copy Markdown
Member

For follow up, filed: #75009

{
_sendBuffers.Reset();
_sendTcs.TrySetException(exception, final: true);
if (_sendBuffers.Count > 0 && _sendBuffers.Buffers[0].Buffer != null)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

I believe this will become a non-issue when #73691 is implemented. I made it a high prio issue for 8.0 since it seems more important now.

@rzikmrzikm left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

LGTM, modulo existing comments

_connectedTcs.TrySetResult();
return QUIC_STATUS_SUCCESS;
}

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Are these whitespace changes intentional?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Yes, they are. Either we do have whitespace between Handle... or not, but we should be consistent in all classes (Listener, Connection, Stream). I don't mind going either way, but I mind having them in Connection and nowhere else.

@CarnaViire
CarnaViire deleted the quic-crash-fix-v2 branch September 6, 2022 18:09
@karelzkarelz added this to the 8.0.0 milestone Sep 7, 2022
CarnaViire added a commit to CarnaViire/runtime that referenced this pull request Sep 7, 2022
…terop (dotnet#74669)
* Send buffers and handles crash fixes
* Add generated-like interop
* Apply PR feedback from dotnet#74611
* Change asserts
* Feedback + moved native methods to their own file
* PR feedback
Co-authored-by: ManickaP <mapichov@microsoft.com>
carlossanlop pushed a commit that referenced this pull request Sep 8, 2022
…terop (#74669) (#75192)
* Send buffers and handles crash fixes
* Add generated-like interop
* Apply PR feedback from #74611
* Change asserts
* Feedback + moved native methods to their own file
* PR feedback
Co-authored-by: ManickaP <mapichov@microsoft.com>
Co-authored-by: ManickaP <mapichov@microsoft.com>
@ghostghost locked as resolved and limited conversation to collaborators Oct 7, 2022
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[HTTP/3] SIGABRT in stress tests

6 participants

@CarnaViire@rzikm@ManickaP@jkotas@teo-tsirpanis@karelz
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

[QUIC] Fix native crashes and heap corruption via "generated-like" interop - #74669

Merged
CarnaViire merged 6 commits into
dotnet:mainfrom
CarnaViire:quic-crash-fix-v2
Sep 6, 2022
Merged

[QUIC] Fix native crashes and heap corruption via "generated-like" interop#74669
CarnaViire merged 6 commits into
dotnet:mainfrom
CarnaViire:quic-crash-fix-v2

Conversation

@CarnaViire

Copy link
Copy Markdown
Member

Alternative to #74611

We should explore how to generate stuff like that in the future. Relevant PR: #65204

Fixes#72696

@CarnaViire
CarnaViire requested a review from a teamAugust 26, 2022 18:02
@ghostghost assigned CarnaViireAug 26, 2022
@ghost

Copy link
Copy Markdown

Tagging subscribers to this area: @dotnet/ncl
See info in area-owners.md if you want to be subscribed.

Issue Details

Alternative to #74611

We should explore how to generate stuff like that in the future. Relevant PR: #65204

Fixes #72696

Author:CarnaViire
Assignees:-
Labels:

area-System.Net.Http

Milestone:-

@ghost

Copy link
Copy Markdown

Tagging subscribers to this area: @dotnet/ncl
See info in area-owners.md if you want to be subscribed.

Issue Details

Alternative to #74611

We should explore how to generate stuff like that in the future. Relevant PR: #65204

Fixes #72696

Author:CarnaViire
Assignees:CarnaViire
Labels:

area-System.Net.Quic

Milestone:-

Comment threadsrc/libraries/System.Net.Quic/src/System/Net/Quic/Internal/MsQuicApi.cs Outdated
@rzikm

Copy link
Copy Markdown
Member

Can we also make the MsQuicApi.Api.ApiTable object private so it forces us to use the wrappers?

Also, since we are touching this, what about getting rid of the .Api. in the middle by making the methods static on MsQuicApi?

MsQuicApi.Api.Registration,
&NativeCallback,
(void*)GCHandle.ToIntPtr(context),
&handle),

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

For the *Open methods we could make the wrapper use out MsQuicContextSafeHandle handle parameter and construct the safe handle inside. What do you think?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

I'll try it out and see if makes sense. If yes, I'll work it in. I like the idea.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

This would be hard to make work automagically (tm) with source generators. But we could introduce manual helpers. Once again, postponing this for a follow up.

@ManickaP

Copy link
Copy Markdown
Member

Can we also make the MsQuicApi.Api.ApiTable object private so it forces us to use the wrappers?

We're using it directly for Close... methods. It's doable though, but I'm hesitant to do this change in this PR (increased churn, we want to backport).

Also, since we are touching this, what about getting rid of the .Api. in the middle by making the methods static on MsQuicApi?

I'd love that, but as I'll the same reasoning as above, minimize churn and we can address this as a follow up.

@ManickaP

Copy link
Copy Markdown
Member

For follow up, filed: #75009

{
_sendBuffers.Reset();
_sendTcs.TrySetException(exception, final: true);
if (_sendBuffers.Count > 0 && _sendBuffers.Buffers[0].Buffer != null)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

I believe this will become a non-issue when #73691 is implemented. I made it a high prio issue for 8.0 since it seems more important now.

@rzikmrzikm left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

LGTM, modulo existing comments

_connectedTcs.TrySetResult();
return QUIC_STATUS_SUCCESS;
}

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Are these whitespace changes intentional?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Yes, they are. Either we do have whitespace between Handle... or not, but we should be consistent in all classes (Listener, Connection, Stream). I don't mind going either way, but I mind having them in Connection and nowhere else.

@CarnaViire
CarnaViire deleted the quic-crash-fix-v2 branch September 6, 2022 18:09
@karelzkarelz added this to the 8.0.0 milestone Sep 7, 2022
CarnaViire added a commit to CarnaViire/runtime that referenced this pull request Sep 7, 2022
…terop (dotnet#74669)
* Send buffers and handles crash fixes
* Add generated-like interop
* Apply PR feedback from dotnet#74611
* Change asserts
* Feedback + moved native methods to their own file
* PR feedback
Co-authored-by: ManickaP <mapichov@microsoft.com>
carlossanlop pushed a commit that referenced this pull request Sep 8, 2022
…terop (#74669) (#75192)
* Send buffers and handles crash fixes
* Add generated-like interop
* Apply PR feedback from #74611
* Change asserts
* Feedback + moved native methods to their own file
* PR feedback
Co-authored-by: ManickaP <mapichov@microsoft.com>
Co-authored-by: ManickaP <mapichov@microsoft.com>
@ghostghost locked as resolved and limited conversation to collaborators Oct 7, 2022
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[HTTP/3] SIGABRT in stress tests

6 participants

@CarnaViire@rzikm@ManickaP@jkotas@teo-tsirpanis@karelz
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

[QUIC] Fix native crashes and heap corruption via "generated-like" interop - #74669

Merged
CarnaViire merged 6 commits into
dotnet:mainfrom
CarnaViire:quic-crash-fix-v2
Sep 6, 2022
Merged

[QUIC] Fix native crashes and heap corruption via "generated-like" interop#74669
CarnaViire merged 6 commits into
dotnet:mainfrom
CarnaViire:quic-crash-fix-v2

Conversation

@CarnaViire

Copy link
Copy Markdown
Member

Alternative to #74611

We should explore how to generate stuff like that in the future. Relevant PR: #65204

Fixes#72696

@CarnaViire
CarnaViire requested a review from a teamAugust 26, 2022 18:02
@ghostghost assigned CarnaViireAug 26, 2022
@ghost

Copy link
Copy Markdown

Tagging subscribers to this area: @dotnet/ncl
See info in area-owners.md if you want to be subscribed.

Issue Details

Alternative to #74611

We should explore how to generate stuff like that in the future. Relevant PR: #65204

Fixes #72696

Author:CarnaViire
Assignees:-
Labels:

area-System.Net.Http

Milestone:-

@ghost

Copy link
Copy Markdown

Tagging subscribers to this area: @dotnet/ncl
See info in area-owners.md if you want to be subscribed.

Issue Details

Alternative to #74611

We should explore how to generate stuff like that in the future. Relevant PR: #65204

Fixes #72696

Author:CarnaViire
Assignees:CarnaViire
Labels:

area-System.Net.Quic

Milestone:-

Comment threadsrc/libraries/System.Net.Quic/src/System/Net/Quic/Internal/MsQuicApi.cs Outdated
@rzikm

Copy link
Copy Markdown
Member

Can we also make the MsQuicApi.Api.ApiTable object private so it forces us to use the wrappers?

Also, since we are touching this, what about getting rid of the .Api. in the middle by making the methods static on MsQuicApi?

MsQuicApi.Api.Registration,
&NativeCallback,
(void*)GCHandle.ToIntPtr(context),
&handle),

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

For the *Open methods we could make the wrapper use out MsQuicContextSafeHandle handle parameter and construct the safe handle inside. What do you think?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

I'll try it out and see if makes sense. If yes, I'll work it in. I like the idea.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

This would be hard to make work automagically (tm) with source generators. But we could introduce manual helpers. Once again, postponing this for a follow up.

@ManickaP

Copy link
Copy Markdown
Member

Can we also make the MsQuicApi.Api.ApiTable object private so it forces us to use the wrappers?

We're using it directly for Close... methods. It's doable though, but I'm hesitant to do this change in this PR (increased churn, we want to backport).

Also, since we are touching this, what about getting rid of the .Api. in the middle by making the methods static on MsQuicApi?

I'd love that, but as I'll the same reasoning as above, minimize churn and we can address this as a follow up.

@ManickaP

Copy link
Copy Markdown
Member

For follow up, filed: #75009

{
_sendBuffers.Reset();
_sendTcs.TrySetException(exception, final: true);
if (_sendBuffers.Count > 0 && _sendBuffers.Buffers[0].Buffer != null)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

I believe this will become a non-issue when #73691 is implemented. I made it a high prio issue for 8.0 since it seems more important now.

@rzikmrzikm left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

LGTM, modulo existing comments

_connectedTcs.TrySetResult();
return QUIC_STATUS_SUCCESS;
}

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Are these whitespace changes intentional?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Yes, they are. Either we do have whitespace between Handle... or not, but we should be consistent in all classes (Listener, Connection, Stream). I don't mind going either way, but I mind having them in Connection and nowhere else.

@CarnaViire
CarnaViire deleted the quic-crash-fix-v2 branch September 6, 2022 18:09
@karelzkarelz added this to the 8.0.0 milestone Sep 7, 2022
CarnaViire added a commit to CarnaViire/runtime that referenced this pull request Sep 7, 2022
…terop (dotnet#74669)
* Send buffers and handles crash fixes
* Add generated-like interop
* Apply PR feedback from dotnet#74611
* Change asserts
* Feedback + moved native methods to their own file
* PR feedback
Co-authored-by: ManickaP <mapichov@microsoft.com>
carlossanlop pushed a commit that referenced this pull request Sep 8, 2022
…terop (#74669) (#75192)
* Send buffers and handles crash fixes
* Add generated-like interop
* Apply PR feedback from #74611
* Change asserts
* Feedback + moved native methods to their own file
* PR feedback
Co-authored-by: ManickaP <mapichov@microsoft.com>
Co-authored-by: ManickaP <mapichov@microsoft.com>
@ghostghost locked as resolved and limited conversation to collaborators Oct 7, 2022
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[HTTP/3] SIGABRT in stress tests

6 participants

@CarnaViire@rzikm@ManickaP@jkotas@teo-tsirpanis@karelz
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

[QUIC] Fix native crashes and heap corruption via "generated-like" interop - #74669

Merged
CarnaViire merged 6 commits into
dotnet:mainfrom
CarnaViire:quic-crash-fix-v2
Sep 6, 2022
Merged

[QUIC] Fix native crashes and heap corruption via "generated-like" interop#74669
CarnaViire merged 6 commits into
dotnet:mainfrom
CarnaViire:quic-crash-fix-v2

Conversation

@CarnaViire

Copy link
Copy Markdown
Member

Alternative to #74611

We should explore how to generate stuff like that in the future. Relevant PR: #65204

Fixes#72696

@CarnaViire
CarnaViire requested a review from a teamAugust 26, 2022 18:02
@ghostghost assigned CarnaViireAug 26, 2022
@ghost

Copy link
Copy Markdown

Tagging subscribers to this area: @dotnet/ncl
See info in area-owners.md if you want to be subscribed.

Issue Details

Alternative to #74611

We should explore how to generate stuff like that in the future. Relevant PR: #65204

Fixes #72696

Author:CarnaViire
Assignees:-
Labels:

area-System.Net.Http

Milestone:-

@ghost

Copy link
Copy Markdown

Tagging subscribers to this area: @dotnet/ncl
See info in area-owners.md if you want to be subscribed.

Issue Details

Alternative to #74611

We should explore how to generate stuff like that in the future. Relevant PR: #65204

Fixes #72696

Author:CarnaViire
Assignees:CarnaViire
Labels:

area-System.Net.Quic

Milestone:-

Comment threadsrc/libraries/System.Net.Quic/src/System/Net/Quic/Internal/MsQuicApi.cs Outdated
@rzikm

Copy link
Copy Markdown
Member

Can we also make the MsQuicApi.Api.ApiTable object private so it forces us to use the wrappers?

Also, since we are touching this, what about getting rid of the .Api. in the middle by making the methods static on MsQuicApi?

MsQuicApi.Api.Registration,
&NativeCallback,
(void*)GCHandle.ToIntPtr(context),
&handle),

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

For the *Open methods we could make the wrapper use out MsQuicContextSafeHandle handle parameter and construct the safe handle inside. What do you think?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

I'll try it out and see if makes sense. If yes, I'll work it in. I like the idea.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

This would be hard to make work automagically (tm) with source generators. But we could introduce manual helpers. Once again, postponing this for a follow up.

@ManickaP

Copy link
Copy Markdown
Member

Can we also make the MsQuicApi.Api.ApiTable object private so it forces us to use the wrappers?

We're using it directly for Close... methods. It's doable though, but I'm hesitant to do this change in this PR (increased churn, we want to backport).

Also, since we are touching this, what about getting rid of the .Api. in the middle by making the methods static on MsQuicApi?

I'd love that, but as I'll the same reasoning as above, minimize churn and we can address this as a follow up.

@ManickaP

Copy link
Copy Markdown
Member

For follow up, filed: #75009

{
_sendBuffers.Reset();
_sendTcs.TrySetException(exception, final: true);
if (_sendBuffers.Count > 0 && _sendBuffers.Buffers[0].Buffer != null)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

I believe this will become a non-issue when #73691 is implemented. I made it a high prio issue for 8.0 since it seems more important now.

@rzikmrzikm left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

LGTM, modulo existing comments

_connectedTcs.TrySetResult();
return QUIC_STATUS_SUCCESS;
}

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Are these whitespace changes intentional?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Yes, they are. Either we do have whitespace between Handle... or not, but we should be consistent in all classes (Listener, Connection, Stream). I don't mind going either way, but I mind having them in Connection and nowhere else.

@CarnaViire
CarnaViire deleted the quic-crash-fix-v2 branch September 6, 2022 18:09
@karelzkarelz added this to the 8.0.0 milestone Sep 7, 2022
CarnaViire added a commit to CarnaViire/runtime that referenced this pull request Sep 7, 2022
…terop (dotnet#74669)
* Send buffers and handles crash fixes
* Add generated-like interop
* Apply PR feedback from dotnet#74611
* Change asserts
* Feedback + moved native methods to their own file
* PR feedback
Co-authored-by: ManickaP <mapichov@microsoft.com>
carlossanlop pushed a commit that referenced this pull request Sep 8, 2022
…terop (#74669) (#75192)
* Send buffers and handles crash fixes
* Add generated-like interop
* Apply PR feedback from #74611
* Change asserts
* Feedback + moved native methods to their own file
* PR feedback
Co-authored-by: ManickaP <mapichov@microsoft.com>
Co-authored-by: ManickaP <mapichov@microsoft.com>
@ghostghost locked as resolved and limited conversation to collaborators Oct 7, 2022
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[HTTP/3] SIGABRT in stress tests

6 participants

@CarnaViire@rzikm@ManickaP@jkotas@teo-tsirpanis@karelz
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

[QUIC] Fix native crashes and heap corruption via "generated-like" interop - #74669

Merged
CarnaViire merged 6 commits into
dotnet:mainfrom
CarnaViire:quic-crash-fix-v2
Sep 6, 2022
Merged

[QUIC] Fix native crashes and heap corruption via "generated-like" interop#74669
CarnaViire merged 6 commits into
dotnet:mainfrom
CarnaViire:quic-crash-fix-v2

Conversation

@CarnaViire

Copy link
Copy Markdown
Member

Alternative to #74611

We should explore how to generate stuff like that in the future. Relevant PR: #65204

Fixes#72696

@CarnaViire
CarnaViire requested a review from a teamAugust 26, 2022 18:02
@ghostghost assigned CarnaViireAug 26, 2022
@ghost

Copy link
Copy Markdown

Tagging subscribers to this area: @dotnet/ncl
See info in area-owners.md if you want to be subscribed.

Issue Details

Alternative to #74611

We should explore how to generate stuff like that in the future. Relevant PR: #65204

Fixes #72696

Author:CarnaViire
Assignees:-
Labels:

area-System.Net.Http

Milestone:-

@ghost

Copy link
Copy Markdown

Tagging subscribers to this area: @dotnet/ncl
See info in area-owners.md if you want to be subscribed.

Issue Details

Alternative to #74611

We should explore how to generate stuff like that in the future. Relevant PR: #65204

Fixes #72696

Author:CarnaViire
Assignees:CarnaViire
Labels:

area-System.Net.Quic

Milestone:-

Comment threadsrc/libraries/System.Net.Quic/src/System/Net/Quic/Internal/MsQuicApi.cs Outdated
@rzikm

Copy link
Copy Markdown
Member

Can we also make the MsQuicApi.Api.ApiTable object private so it forces us to use the wrappers?

Also, since we are touching this, what about getting rid of the .Api. in the middle by making the methods static on MsQuicApi?

MsQuicApi.Api.Registration,
&NativeCallback,
(void*)GCHandle.ToIntPtr(context),
&handle),

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

For the *Open methods we could make the wrapper use out MsQuicContextSafeHandle handle parameter and construct the safe handle inside. What do you think?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

I'll try it out and see if makes sense. If yes, I'll work it in. I like the idea.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

This would be hard to make work automagically (tm) with source generators. But we could introduce manual helpers. Once again, postponing this for a follow up.

@ManickaP

Copy link
Copy Markdown
Member

Can we also make the MsQuicApi.Api.ApiTable object private so it forces us to use the wrappers?

We're using it directly for Close... methods. It's doable though, but I'm hesitant to do this change in this PR (increased churn, we want to backport).

Also, since we are touching this, what about getting rid of the .Api. in the middle by making the methods static on MsQuicApi?

I'd love that, but as I'll the same reasoning as above, minimize churn and we can address this as a follow up.

@ManickaP

Copy link
Copy Markdown
Member

For follow up, filed: #75009

{
_sendBuffers.Reset();
_sendTcs.TrySetException(exception, final: true);
if (_sendBuffers.Count > 0 && _sendBuffers.Buffers[0].Buffer != null)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

I believe this will become a non-issue when #73691 is implemented. I made it a high prio issue for 8.0 since it seems more important now.

@rzikmrzikm left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

LGTM, modulo existing comments

_connectedTcs.TrySetResult();
return QUIC_STATUS_SUCCESS;
}

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Are these whitespace changes intentional?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Yes, they are. Either we do have whitespace between Handle... or not, but we should be consistent in all classes (Listener, Connection, Stream). I don't mind going either way, but I mind having them in Connection and nowhere else.

@CarnaViire
CarnaViire deleted the quic-crash-fix-v2 branch September 6, 2022 18:09
@karelzkarelz added this to the 8.0.0 milestone Sep 7, 2022
CarnaViire added a commit to CarnaViire/runtime that referenced this pull request Sep 7, 2022
…terop (dotnet#74669)
* Send buffers and handles crash fixes
* Add generated-like interop
* Apply PR feedback from dotnet#74611
* Change asserts
* Feedback + moved native methods to their own file
* PR feedback
Co-authored-by: ManickaP <mapichov@microsoft.com>
carlossanlop pushed a commit that referenced this pull request Sep 8, 2022
…terop (#74669) (#75192)
* Send buffers and handles crash fixes
* Add generated-like interop
* Apply PR feedback from #74611
* Change asserts
* Feedback + moved native methods to their own file
* PR feedback
Co-authored-by: ManickaP <mapichov@microsoft.com>
Co-authored-by: ManickaP <mapichov@microsoft.com>
@ghostghost locked as resolved and limited conversation to collaborators Oct 7, 2022
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[HTTP/3] SIGABRT in stress tests

6 participants

@CarnaViire@rzikm@ManickaP@jkotas@teo-tsirpanis@karelz
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

[QUIC] Fix native crashes and heap corruption via "generated-like" interop - #74669

Merged
CarnaViire merged 6 commits into
dotnet:mainfrom
CarnaViire:quic-crash-fix-v2
Sep 6, 2022
Merged

[QUIC] Fix native crashes and heap corruption via "generated-like" interop#74669
CarnaViire merged 6 commits into
dotnet:mainfrom
CarnaViire:quic-crash-fix-v2

Conversation

@CarnaViire

Copy link
Copy Markdown
Member

Alternative to #74611

We should explore how to generate stuff like that in the future. Relevant PR: #65204

Fixes#72696

@CarnaViire
CarnaViire requested a review from a teamAugust 26, 2022 18:02
@ghostghost assigned CarnaViireAug 26, 2022
@ghost

Copy link
Copy Markdown

Tagging subscribers to this area: @dotnet/ncl
See info in area-owners.md if you want to be subscribed.

Issue Details

Alternative to #74611

We should explore how to generate stuff like that in the future. Relevant PR: #65204

Fixes #72696

Author:CarnaViire
Assignees:-
Labels:

area-System.Net.Http

Milestone:-

@ghost

Copy link
Copy Markdown

Tagging subscribers to this area: @dotnet/ncl
See info in area-owners.md if you want to be subscribed.

Issue Details

Alternative to #74611

We should explore how to generate stuff like that in the future. Relevant PR: #65204

Fixes #72696

Author:CarnaViire
Assignees:CarnaViire
Labels:

area-System.Net.Quic

Milestone:-

Comment threadsrc/libraries/System.Net.Quic/src/System/Net/Quic/Internal/MsQuicApi.cs Outdated
@rzikm

Copy link
Copy Markdown
Member

Can we also make the MsQuicApi.Api.ApiTable object private so it forces us to use the wrappers?

Also, since we are touching this, what about getting rid of the .Api. in the middle by making the methods static on MsQuicApi?

MsQuicApi.Api.Registration,
&NativeCallback,
(void*)GCHandle.ToIntPtr(context),
&handle),

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

For the *Open methods we could make the wrapper use out MsQuicContextSafeHandle handle parameter and construct the safe handle inside. What do you think?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

I'll try it out and see if makes sense. If yes, I'll work it in. I like the idea.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

This would be hard to make work automagically (tm) with source generators. But we could introduce manual helpers. Once again, postponing this for a follow up.

@ManickaP

Copy link
Copy Markdown
Member

Can we also make the MsQuicApi.Api.ApiTable object private so it forces us to use the wrappers?

We're using it directly for Close... methods. It's doable though, but I'm hesitant to do this change in this PR (increased churn, we want to backport).

Also, since we are touching this, what about getting rid of the .Api. in the middle by making the methods static on MsQuicApi?

I'd love that, but as I'll the same reasoning as above, minimize churn and we can address this as a follow up.

@ManickaP

Copy link
Copy Markdown
Member

For follow up, filed: #75009

{
_sendBuffers.Reset();
_sendTcs.TrySetException(exception, final: true);
if (_sendBuffers.Count > 0 && _sendBuffers.Buffers[0].Buffer != null)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

I believe this will become a non-issue when #73691 is implemented. I made it a high prio issue for 8.0 since it seems more important now.

@rzikmrzikm left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

LGTM, modulo existing comments

_connectedTcs.TrySetResult();
return QUIC_STATUS_SUCCESS;
}

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Are these whitespace changes intentional?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Yes, they are. Either we do have whitespace between Handle... or not, but we should be consistent in all classes (Listener, Connection, Stream). I don't mind going either way, but I mind having them in Connection and nowhere else.

@CarnaViire
CarnaViire deleted the quic-crash-fix-v2 branch September 6, 2022 18:09
@karelzkarelz added this to the 8.0.0 milestone Sep 7, 2022
CarnaViire added a commit to CarnaViire/runtime that referenced this pull request Sep 7, 2022
…terop (dotnet#74669)
* Send buffers and handles crash fixes
* Add generated-like interop
* Apply PR feedback from dotnet#74611
* Change asserts
* Feedback + moved native methods to their own file
* PR feedback
Co-authored-by: ManickaP <mapichov@microsoft.com>
carlossanlop pushed a commit that referenced this pull request Sep 8, 2022
…terop (#74669) (#75192)
* Send buffers and handles crash fixes
* Add generated-like interop
* Apply PR feedback from #74611
* Change asserts
* Feedback + moved native methods to their own file
* PR feedback
Co-authored-by: ManickaP <mapichov@microsoft.com>
Co-authored-by: ManickaP <mapichov@microsoft.com>
@ghostghost locked as resolved and limited conversation to collaborators Oct 7, 2022
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[HTTP/3] SIGABRT in stress tests

6 participants

@CarnaViire@rzikm@ManickaP@jkotas@teo-tsirpanis@karelz