fix: Adjust recursive cycle detection to fix EXC_BAD_ACCESS - #181

Merged
NeedleInAJayStack merged 1 commit into
GraphQLSwift:mainfrom
CaptureContext:main
May 14, 2026
Merged

fix: Adjust recursive cycle detection to fix EXC_BAD_ACCESS#181
NeedleInAJayStack merged 1 commit into
GraphQLSwift:mainfrom
CaptureContext:main

Conversation

@maximkrouk

@maximkroukmaximkrouk commented Apr 14, 2026

Copy link
Copy Markdown
Contributor

Prev implementation triggered EXC_BAD_ACCESS exception on line 711

fieldPathIndexByTypeName[inputObj.name] = fieldPath.count could not access count since fieldPath was <uninitialized> even tho it clearly was

This commit wraps this logic into a class so createInputObjectCircularRefsValidator function no longer mutably captures a value type

Note

I also added .editorconfig file, this will help potential contributors to avoid switching their default formatting to "4-spaces" while working on graphql package

Prev implementation triggered EXC_BAD_ACCESS exception on line 711
> `fieldPathIndexByTypeName[inputObj.name] = fieldPath.count` could not access `count` since `fieldPath` was `<uninitialized>` even tho it clearly was
This commit wraps this logic into a class so `createInputObjectCircularRefsValidator` function no longer mutably captures a value type
}

visitedTypes.insert(inputObj)
fieldPathIndexByTypeName[inputObj.name] = fieldPath.count

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Exception was raised here on fieldPath.count access, for some reason it was only reproducible in release builds, debug ones worked fine 💁‍♂️

@maximkroukmaximkrouk changed the title fix: Adjust recursive cycle detectionfix: Adjust recursive cycle detection to fix EXC_BAD_ACCESSApr 14, 2026
@NeedleInAJayStack

NeedleInAJayStack commented Apr 21, 2026

Copy link
Copy Markdown
Member

Thanks for the PR! Out of curiosity, in which version of Swift were you experiencing the issue?

@NeedleInAJayStackNeedleInAJayStack self-assigned this Apr 21, 2026
@maximkrouk

Copy link
Copy Markdown
ContributorAuthor

Thanks for the PR! Out of curiosity, in which version of Swift were you experiencing the issue?

I believe it was the latest one (seems to be 4.1.0), probably the issue might also be environment-related maybe specific swift versions work fine with it, but I managed to reproduce it both in local macos release build and linux build in docker container

From my Dockerfile:

ARG SWIFT_IMAGE=swift:6.3
ARG SWIFT_RUNTIME_IMAGE=swift:6.3-slim

From my local env (Xcode 26.4 Beta (17E5159k)):

swift --version
swift-driver version: 1.148.6 Apple Swift version 6.3 (swiftlang-6.3.0.119.2 clang-2100.0.119.1)
Target: arm64-apple-macosx26.0

@NeedleInAJayStack

Copy link
Copy Markdown
Member

Hey, sorry about the delay. I'm also able to recreate this on Swift 6.3 in release mode, and I've validated that the fix works. It's kinda strange that it works - this seems like a bug with closure variable capture with the compiler, so I may raise it up to the Swift team as well.

I'm going to go ahead and merge this.

Thanks for contributing!

@NeedleInAJayStack
NeedleInAJayStack merged commit 17c68cf into GraphQLSwift:mainMay 14, 2026
9 checks passed
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@maximkrouk@NeedleInAJayStack
, '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

fix: Adjust recursive cycle detection to fix EXC_BAD_ACCESS - #181

Merged
NeedleInAJayStack merged 1 commit into
GraphQLSwift:mainfrom
CaptureContext:main
May 14, 2026
Merged

fix: Adjust recursive cycle detection to fix EXC_BAD_ACCESS#181
NeedleInAJayStack merged 1 commit into
GraphQLSwift:mainfrom
CaptureContext:main

Conversation

@maximkrouk

@maximkroukmaximkrouk commented Apr 14, 2026

Copy link
Copy Markdown
Contributor

Prev implementation triggered EXC_BAD_ACCESS exception on line 711

fieldPathIndexByTypeName[inputObj.name] = fieldPath.count could not access count since fieldPath was <uninitialized> even tho it clearly was

This commit wraps this logic into a class so createInputObjectCircularRefsValidator function no longer mutably captures a value type

Note

I also added .editorconfig file, this will help potential contributors to avoid switching their default formatting to "4-spaces" while working on graphql package

Prev implementation triggered EXC_BAD_ACCESS exception on line 711
> `fieldPathIndexByTypeName[inputObj.name] = fieldPath.count` could not access `count` since `fieldPath` was `<uninitialized>` even tho it clearly was
This commit wraps this logic into a class so `createInputObjectCircularRefsValidator` function no longer mutably captures a value type
}

visitedTypes.insert(inputObj)
fieldPathIndexByTypeName[inputObj.name] = fieldPath.count

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Exception was raised here on fieldPath.count access, for some reason it was only reproducible in release builds, debug ones worked fine 💁‍♂️

@maximkroukmaximkrouk changed the title fix: Adjust recursive cycle detectionfix: Adjust recursive cycle detection to fix EXC_BAD_ACCESSApr 14, 2026
@NeedleInAJayStack

NeedleInAJayStack commented Apr 21, 2026

Copy link
Copy Markdown
Member

Thanks for the PR! Out of curiosity, in which version of Swift were you experiencing the issue?

@NeedleInAJayStackNeedleInAJayStack self-assigned this Apr 21, 2026
@maximkrouk

Copy link
Copy Markdown
ContributorAuthor

Thanks for the PR! Out of curiosity, in which version of Swift were you experiencing the issue?

I believe it was the latest one (seems to be 4.1.0), probably the issue might also be environment-related maybe specific swift versions work fine with it, but I managed to reproduce it both in local macos release build and linux build in docker container

From my Dockerfile:

ARG SWIFT_IMAGE=swift:6.3
ARG SWIFT_RUNTIME_IMAGE=swift:6.3-slim

From my local env (Xcode 26.4 Beta (17E5159k)):

swift --version
swift-driver version: 1.148.6 Apple Swift version 6.3 (swiftlang-6.3.0.119.2 clang-2100.0.119.1)
Target: arm64-apple-macosx26.0

@NeedleInAJayStack

Copy link
Copy Markdown
Member

Hey, sorry about the delay. I'm also able to recreate this on Swift 6.3 in release mode, and I've validated that the fix works. It's kinda strange that it works - this seems like a bug with closure variable capture with the compiler, so I may raise it up to the Swift team as well.

I'm going to go ahead and merge this.

Thanks for contributing!

@NeedleInAJayStack
NeedleInAJayStack merged commit 17c68cf into GraphQLSwift:mainMay 14, 2026
9 checks passed
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@maximkrouk@NeedleInAJayStack
, '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

fix: Adjust recursive cycle detection to fix EXC_BAD_ACCESS - #181

Merged
NeedleInAJayStack merged 1 commit into
GraphQLSwift:mainfrom
CaptureContext:main
May 14, 2026
Merged

fix: Adjust recursive cycle detection to fix EXC_BAD_ACCESS#181
NeedleInAJayStack merged 1 commit into
GraphQLSwift:mainfrom
CaptureContext:main

Conversation

@maximkrouk

@maximkroukmaximkrouk commented Apr 14, 2026

Copy link
Copy Markdown
Contributor

Prev implementation triggered EXC_BAD_ACCESS exception on line 711

fieldPathIndexByTypeName[inputObj.name] = fieldPath.count could not access count since fieldPath was <uninitialized> even tho it clearly was

This commit wraps this logic into a class so createInputObjectCircularRefsValidator function no longer mutably captures a value type

Note

I also added .editorconfig file, this will help potential contributors to avoid switching their default formatting to "4-spaces" while working on graphql package

Prev implementation triggered EXC_BAD_ACCESS exception on line 711
> `fieldPathIndexByTypeName[inputObj.name] = fieldPath.count` could not access `count` since `fieldPath` was `<uninitialized>` even tho it clearly was
This commit wraps this logic into a class so `createInputObjectCircularRefsValidator` function no longer mutably captures a value type
}

visitedTypes.insert(inputObj)
fieldPathIndexByTypeName[inputObj.name] = fieldPath.count

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Exception was raised here on fieldPath.count access, for some reason it was only reproducible in release builds, debug ones worked fine 💁‍♂️

@maximkroukmaximkrouk changed the title fix: Adjust recursive cycle detectionfix: Adjust recursive cycle detection to fix EXC_BAD_ACCESSApr 14, 2026
@NeedleInAJayStack

NeedleInAJayStack commented Apr 21, 2026

Copy link
Copy Markdown
Member

Thanks for the PR! Out of curiosity, in which version of Swift were you experiencing the issue?

@NeedleInAJayStackNeedleInAJayStack self-assigned this Apr 21, 2026
@maximkrouk

Copy link
Copy Markdown
ContributorAuthor

Thanks for the PR! Out of curiosity, in which version of Swift were you experiencing the issue?

I believe it was the latest one (seems to be 4.1.0), probably the issue might also be environment-related maybe specific swift versions work fine with it, but I managed to reproduce it both in local macos release build and linux build in docker container

From my Dockerfile:

ARG SWIFT_IMAGE=swift:6.3
ARG SWIFT_RUNTIME_IMAGE=swift:6.3-slim

From my local env (Xcode 26.4 Beta (17E5159k)):

swift --version
swift-driver version: 1.148.6 Apple Swift version 6.3 (swiftlang-6.3.0.119.2 clang-2100.0.119.1)
Target: arm64-apple-macosx26.0

@NeedleInAJayStack

Copy link
Copy Markdown
Member

Hey, sorry about the delay. I'm also able to recreate this on Swift 6.3 in release mode, and I've validated that the fix works. It's kinda strange that it works - this seems like a bug with closure variable capture with the compiler, so I may raise it up to the Swift team as well.

I'm going to go ahead and merge this.

Thanks for contributing!

@NeedleInAJayStack
NeedleInAJayStack merged commit 17c68cf into GraphQLSwift:mainMay 14, 2026
9 checks passed
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@maximkrouk@NeedleInAJayStack
, '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

fix: Adjust recursive cycle detection to fix EXC_BAD_ACCESS - #181

Merged
NeedleInAJayStack merged 1 commit into
GraphQLSwift:mainfrom
CaptureContext:main
May 14, 2026
Merged

fix: Adjust recursive cycle detection to fix EXC_BAD_ACCESS#181
NeedleInAJayStack merged 1 commit into
GraphQLSwift:mainfrom
CaptureContext:main

Conversation

@maximkrouk

@maximkroukmaximkrouk commented Apr 14, 2026

Copy link
Copy Markdown
Contributor

Prev implementation triggered EXC_BAD_ACCESS exception on line 711

fieldPathIndexByTypeName[inputObj.name] = fieldPath.count could not access count since fieldPath was <uninitialized> even tho it clearly was

This commit wraps this logic into a class so createInputObjectCircularRefsValidator function no longer mutably captures a value type

Note

I also added .editorconfig file, this will help potential contributors to avoid switching their default formatting to "4-spaces" while working on graphql package

Prev implementation triggered EXC_BAD_ACCESS exception on line 711
> `fieldPathIndexByTypeName[inputObj.name] = fieldPath.count` could not access `count` since `fieldPath` was `<uninitialized>` even tho it clearly was
This commit wraps this logic into a class so `createInputObjectCircularRefsValidator` function no longer mutably captures a value type
}

visitedTypes.insert(inputObj)
fieldPathIndexByTypeName[inputObj.name] = fieldPath.count

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Exception was raised here on fieldPath.count access, for some reason it was only reproducible in release builds, debug ones worked fine 💁‍♂️

@maximkroukmaximkrouk changed the title fix: Adjust recursive cycle detectionfix: Adjust recursive cycle detection to fix EXC_BAD_ACCESSApr 14, 2026
@NeedleInAJayStack

NeedleInAJayStack commented Apr 21, 2026

Copy link
Copy Markdown
Member

Thanks for the PR! Out of curiosity, in which version of Swift were you experiencing the issue?

@NeedleInAJayStackNeedleInAJayStack self-assigned this Apr 21, 2026
@maximkrouk

Copy link
Copy Markdown
ContributorAuthor

Thanks for the PR! Out of curiosity, in which version of Swift were you experiencing the issue?

I believe it was the latest one (seems to be 4.1.0), probably the issue might also be environment-related maybe specific swift versions work fine with it, but I managed to reproduce it both in local macos release build and linux build in docker container

From my Dockerfile:

ARG SWIFT_IMAGE=swift:6.3
ARG SWIFT_RUNTIME_IMAGE=swift:6.3-slim

From my local env (Xcode 26.4 Beta (17E5159k)):

swift --version
swift-driver version: 1.148.6 Apple Swift version 6.3 (swiftlang-6.3.0.119.2 clang-2100.0.119.1)
Target: arm64-apple-macosx26.0

@NeedleInAJayStack

Copy link
Copy Markdown
Member

Hey, sorry about the delay. I'm also able to recreate this on Swift 6.3 in release mode, and I've validated that the fix works. It's kinda strange that it works - this seems like a bug with closure variable capture with the compiler, so I may raise it up to the Swift team as well.

I'm going to go ahead and merge this.

Thanks for contributing!

@NeedleInAJayStack
NeedleInAJayStack merged commit 17c68cf into GraphQLSwift:mainMay 14, 2026
9 checks passed
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@maximkrouk@NeedleInAJayStack
, '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

fix: Adjust recursive cycle detection to fix EXC_BAD_ACCESS - #181

Merged
NeedleInAJayStack merged 1 commit into
GraphQLSwift:mainfrom
CaptureContext:main
May 14, 2026
Merged

fix: Adjust recursive cycle detection to fix EXC_BAD_ACCESS#181
NeedleInAJayStack merged 1 commit into
GraphQLSwift:mainfrom
CaptureContext:main

Conversation

@maximkrouk

@maximkroukmaximkrouk commented Apr 14, 2026

Copy link
Copy Markdown
Contributor

Prev implementation triggered EXC_BAD_ACCESS exception on line 711

fieldPathIndexByTypeName[inputObj.name] = fieldPath.count could not access count since fieldPath was <uninitialized> even tho it clearly was

This commit wraps this logic into a class so createInputObjectCircularRefsValidator function no longer mutably captures a value type

Note

I also added .editorconfig file, this will help potential contributors to avoid switching their default formatting to "4-spaces" while working on graphql package

Prev implementation triggered EXC_BAD_ACCESS exception on line 711
> `fieldPathIndexByTypeName[inputObj.name] = fieldPath.count` could not access `count` since `fieldPath` was `<uninitialized>` even tho it clearly was
This commit wraps this logic into a class so `createInputObjectCircularRefsValidator` function no longer mutably captures a value type
}

visitedTypes.insert(inputObj)
fieldPathIndexByTypeName[inputObj.name] = fieldPath.count

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Exception was raised here on fieldPath.count access, for some reason it was only reproducible in release builds, debug ones worked fine 💁‍♂️

@maximkroukmaximkrouk changed the title fix: Adjust recursive cycle detectionfix: Adjust recursive cycle detection to fix EXC_BAD_ACCESSApr 14, 2026
@NeedleInAJayStack

NeedleInAJayStack commented Apr 21, 2026

Copy link
Copy Markdown
Member

Thanks for the PR! Out of curiosity, in which version of Swift were you experiencing the issue?

@NeedleInAJayStackNeedleInAJayStack self-assigned this Apr 21, 2026
@maximkrouk

Copy link
Copy Markdown
ContributorAuthor

Thanks for the PR! Out of curiosity, in which version of Swift were you experiencing the issue?

I believe it was the latest one (seems to be 4.1.0), probably the issue might also be environment-related maybe specific swift versions work fine with it, but I managed to reproduce it both in local macos release build and linux build in docker container

From my Dockerfile:

ARG SWIFT_IMAGE=swift:6.3
ARG SWIFT_RUNTIME_IMAGE=swift:6.3-slim

From my local env (Xcode 26.4 Beta (17E5159k)):

swift --version
swift-driver version: 1.148.6 Apple Swift version 6.3 (swiftlang-6.3.0.119.2 clang-2100.0.119.1)
Target: arm64-apple-macosx26.0

@NeedleInAJayStack

Copy link
Copy Markdown
Member

Hey, sorry about the delay. I'm also able to recreate this on Swift 6.3 in release mode, and I've validated that the fix works. It's kinda strange that it works - this seems like a bug with closure variable capture with the compiler, so I may raise it up to the Swift team as well.

I'm going to go ahead and merge this.

Thanks for contributing!

@NeedleInAJayStack
NeedleInAJayStack merged commit 17c68cf into GraphQLSwift:mainMay 14, 2026
9 checks passed
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@maximkrouk@NeedleInAJayStack
, '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

fix: Adjust recursive cycle detection to fix EXC_BAD_ACCESS - #181

Merged
NeedleInAJayStack merged 1 commit into
GraphQLSwift:mainfrom
CaptureContext:main
May 14, 2026
Merged

fix: Adjust recursive cycle detection to fix EXC_BAD_ACCESS#181
NeedleInAJayStack merged 1 commit into
GraphQLSwift:mainfrom
CaptureContext:main

Conversation

@maximkrouk

@maximkroukmaximkrouk commented Apr 14, 2026

Copy link
Copy Markdown
Contributor

Prev implementation triggered EXC_BAD_ACCESS exception on line 711

fieldPathIndexByTypeName[inputObj.name] = fieldPath.count could not access count since fieldPath was <uninitialized> even tho it clearly was

This commit wraps this logic into a class so createInputObjectCircularRefsValidator function no longer mutably captures a value type

Note

I also added .editorconfig file, this will help potential contributors to avoid switching their default formatting to "4-spaces" while working on graphql package

Prev implementation triggered EXC_BAD_ACCESS exception on line 711
> `fieldPathIndexByTypeName[inputObj.name] = fieldPath.count` could not access `count` since `fieldPath` was `<uninitialized>` even tho it clearly was
This commit wraps this logic into a class so `createInputObjectCircularRefsValidator` function no longer mutably captures a value type
}

visitedTypes.insert(inputObj)
fieldPathIndexByTypeName[inputObj.name] = fieldPath.count

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Exception was raised here on fieldPath.count access, for some reason it was only reproducible in release builds, debug ones worked fine 💁‍♂️

@maximkroukmaximkrouk changed the title fix: Adjust recursive cycle detectionfix: Adjust recursive cycle detection to fix EXC_BAD_ACCESSApr 14, 2026
@NeedleInAJayStack

NeedleInAJayStack commented Apr 21, 2026

Copy link
Copy Markdown
Member

Thanks for the PR! Out of curiosity, in which version of Swift were you experiencing the issue?

@NeedleInAJayStackNeedleInAJayStack self-assigned this Apr 21, 2026
@maximkrouk

Copy link
Copy Markdown
ContributorAuthor

Thanks for the PR! Out of curiosity, in which version of Swift were you experiencing the issue?

I believe it was the latest one (seems to be 4.1.0), probably the issue might also be environment-related maybe specific swift versions work fine with it, but I managed to reproduce it both in local macos release build and linux build in docker container

From my Dockerfile:

ARG SWIFT_IMAGE=swift:6.3
ARG SWIFT_RUNTIME_IMAGE=swift:6.3-slim

From my local env (Xcode 26.4 Beta (17E5159k)):

swift --version
swift-driver version: 1.148.6 Apple Swift version 6.3 (swiftlang-6.3.0.119.2 clang-2100.0.119.1)
Target: arm64-apple-macosx26.0

@NeedleInAJayStack

Copy link
Copy Markdown
Member

Hey, sorry about the delay. I'm also able to recreate this on Swift 6.3 in release mode, and I've validated that the fix works. It's kinda strange that it works - this seems like a bug with closure variable capture with the compiler, so I may raise it up to the Swift team as well.

I'm going to go ahead and merge this.

Thanks for contributing!

@NeedleInAJayStack
NeedleInAJayStack merged commit 17c68cf into GraphQLSwift:mainMay 14, 2026
9 checks passed
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@maximkrouk@NeedleInAJayStack
, '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

fix: Adjust recursive cycle detection to fix EXC_BAD_ACCESS - #181

Merged
NeedleInAJayStack merged 1 commit into
GraphQLSwift:mainfrom
CaptureContext:main
May 14, 2026
Merged

fix: Adjust recursive cycle detection to fix EXC_BAD_ACCESS#181
NeedleInAJayStack merged 1 commit into
GraphQLSwift:mainfrom
CaptureContext:main

Conversation

@maximkrouk

@maximkroukmaximkrouk commented Apr 14, 2026

Copy link
Copy Markdown
Contributor

Prev implementation triggered EXC_BAD_ACCESS exception on line 711

fieldPathIndexByTypeName[inputObj.name] = fieldPath.count could not access count since fieldPath was <uninitialized> even tho it clearly was

This commit wraps this logic into a class so createInputObjectCircularRefsValidator function no longer mutably captures a value type

Note

I also added .editorconfig file, this will help potential contributors to avoid switching their default formatting to "4-spaces" while working on graphql package

Prev implementation triggered EXC_BAD_ACCESS exception on line 711
> `fieldPathIndexByTypeName[inputObj.name] = fieldPath.count` could not access `count` since `fieldPath` was `<uninitialized>` even tho it clearly was
This commit wraps this logic into a class so `createInputObjectCircularRefsValidator` function no longer mutably captures a value type
}

visitedTypes.insert(inputObj)
fieldPathIndexByTypeName[inputObj.name] = fieldPath.count

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Exception was raised here on fieldPath.count access, for some reason it was only reproducible in release builds, debug ones worked fine 💁‍♂️

@maximkroukmaximkrouk changed the title fix: Adjust recursive cycle detectionfix: Adjust recursive cycle detection to fix EXC_BAD_ACCESSApr 14, 2026
@NeedleInAJayStack

NeedleInAJayStack commented Apr 21, 2026

Copy link
Copy Markdown
Member

Thanks for the PR! Out of curiosity, in which version of Swift were you experiencing the issue?

@NeedleInAJayStackNeedleInAJayStack self-assigned this Apr 21, 2026
@maximkrouk

Copy link
Copy Markdown
ContributorAuthor

Thanks for the PR! Out of curiosity, in which version of Swift were you experiencing the issue?

I believe it was the latest one (seems to be 4.1.0), probably the issue might also be environment-related maybe specific swift versions work fine with it, but I managed to reproduce it both in local macos release build and linux build in docker container

From my Dockerfile:

ARG SWIFT_IMAGE=swift:6.3
ARG SWIFT_RUNTIME_IMAGE=swift:6.3-slim

From my local env (Xcode 26.4 Beta (17E5159k)):

swift --version
swift-driver version: 1.148.6 Apple Swift version 6.3 (swiftlang-6.3.0.119.2 clang-2100.0.119.1)
Target: arm64-apple-macosx26.0

@NeedleInAJayStack

Copy link
Copy Markdown
Member

Hey, sorry about the delay. I'm also able to recreate this on Swift 6.3 in release mode, and I've validated that the fix works. It's kinda strange that it works - this seems like a bug with closure variable capture with the compiler, so I may raise it up to the Swift team as well.

I'm going to go ahead and merge this.

Thanks for contributing!

@NeedleInAJayStack
NeedleInAJayStack merged commit 17c68cf into GraphQLSwift:mainMay 14, 2026
9 checks passed
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@maximkrouk@NeedleInAJayStack
, '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

fix: Adjust recursive cycle detection to fix EXC_BAD_ACCESS - #181

Merged
NeedleInAJayStack merged 1 commit into
GraphQLSwift:mainfrom
CaptureContext:main
May 14, 2026
Merged

fix: Adjust recursive cycle detection to fix EXC_BAD_ACCESS#181
NeedleInAJayStack merged 1 commit into
GraphQLSwift:mainfrom
CaptureContext:main

Conversation

@maximkrouk

@maximkroukmaximkrouk commented Apr 14, 2026

Copy link
Copy Markdown
Contributor

Prev implementation triggered EXC_BAD_ACCESS exception on line 711

fieldPathIndexByTypeName[inputObj.name] = fieldPath.count could not access count since fieldPath was <uninitialized> even tho it clearly was

This commit wraps this logic into a class so createInputObjectCircularRefsValidator function no longer mutably captures a value type

Note

I also added .editorconfig file, this will help potential contributors to avoid switching their default formatting to "4-spaces" while working on graphql package

Prev implementation triggered EXC_BAD_ACCESS exception on line 711
> `fieldPathIndexByTypeName[inputObj.name] = fieldPath.count` could not access `count` since `fieldPath` was `<uninitialized>` even tho it clearly was
This commit wraps this logic into a class so `createInputObjectCircularRefsValidator` function no longer mutably captures a value type
}

visitedTypes.insert(inputObj)
fieldPathIndexByTypeName[inputObj.name] = fieldPath.count

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Exception was raised here on fieldPath.count access, for some reason it was only reproducible in release builds, debug ones worked fine 💁‍♂️

@maximkroukmaximkrouk changed the title fix: Adjust recursive cycle detectionfix: Adjust recursive cycle detection to fix EXC_BAD_ACCESSApr 14, 2026
@NeedleInAJayStack

NeedleInAJayStack commented Apr 21, 2026

Copy link
Copy Markdown
Member

Thanks for the PR! Out of curiosity, in which version of Swift were you experiencing the issue?

@NeedleInAJayStackNeedleInAJayStack self-assigned this Apr 21, 2026
@maximkrouk

Copy link
Copy Markdown
ContributorAuthor

Thanks for the PR! Out of curiosity, in which version of Swift were you experiencing the issue?

I believe it was the latest one (seems to be 4.1.0), probably the issue might also be environment-related maybe specific swift versions work fine with it, but I managed to reproduce it both in local macos release build and linux build in docker container

From my Dockerfile:

ARG SWIFT_IMAGE=swift:6.3
ARG SWIFT_RUNTIME_IMAGE=swift:6.3-slim

From my local env (Xcode 26.4 Beta (17E5159k)):

swift --version
swift-driver version: 1.148.6 Apple Swift version 6.3 (swiftlang-6.3.0.119.2 clang-2100.0.119.1)
Target: arm64-apple-macosx26.0

@NeedleInAJayStack

Copy link
Copy Markdown
Member

Hey, sorry about the delay. I'm also able to recreate this on Swift 6.3 in release mode, and I've validated that the fix works. It's kinda strange that it works - this seems like a bug with closure variable capture with the compiler, so I may raise it up to the Swift team as well.

I'm going to go ahead and merge this.

Thanks for contributing!

@NeedleInAJayStack
NeedleInAJayStack merged commit 17c68cf into GraphQLSwift:mainMay 14, 2026
9 checks passed
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@maximkrouk@NeedleInAJayStack