Fix IndexOf upper-bound guard in ImmutableArray/List - #124967

Merged
MihaZupan merged 9 commits into
dotnet:mainfrom
prozolic:indexof
Apr 19, 2026
Merged

Fix IndexOf upper-bound guard in ImmutableArray/List#124967
MihaZupan merged 9 commits into
dotnet:mainfrom
prozolic:indexof

Conversation

@prozolic

@prozolicprozolic commented Feb 27, 2026

Copy link
Copy Markdown
Contributor

Change the startIndex upper-bound validation in IndexOf from '< Count' to '<= Count' for ImmutableArray<T>,
ImmutableArray<T>.Builder, and add upper-bound validation in ImmutableList<T>.Node.
This aligns the behavior with Array.IndexOf, which permits index == Count provided count is 0.

Change:

  • Change the startIndex upper-bound validation in IndexOf from '< Count' to '<= Count' for ImmutableArray,
    ImmutableArray<T>.Builder.
  • Add upper-bound validation in ImmutableList<T>.Node to match the behavior of ImmutableArray<T>.
  • Add test case and fix test case to also validate the parameter name as the fix in Use Requires.Range in LastIndexOf #124560.

Fixes#124968

Change the startIndex upper-bound validation in IndexOf from
'< Count' to '<= Count' for ImmutableArray<T>,
ImmutableArray<T>.Builder, and add upper-bound validation
in ImmutableList<T>.Node.
This aligns the behavior with Array.IndexOf, which permits
index == Count provided count is 0.
CopilotAI review requested due to automatic review settings February 27, 2026 13:58
@dotnet-policy-servicedotnet-policy-serviceBot added the community-contribution Indicates that the PR has been added by a community member label Feb 27, 2026
@dotnet-policy-service

Copy link
Copy Markdown
Contributor

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

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

This PR fixes the IndexOf upper-bound validation in ImmutableArray<T>, ImmutableArray<T>.Builder, and ImmutableList<T>.Node to align with Array.IndexOf behavior, which allows startIndex == Count when count == 0. The PR is a follow-up to #124560 which fixed similar issues in LastIndexOf.

Changes:

  • Modified upper-bound validation for startIndex/index parameter from < Count to <= Count in IndexOf methods
  • Added upper-bound validation to ImmutableList<T>.Node.IndexOf which was previously missing
  • Enhanced tests to validate parameter names in thrown exceptions and added consistency tests with Array.IndexOf

Reviewed changes

Copilot reviewed 8 out of 8 changed files in this pull request and generated 1 comment.

Show a summary per file
FileDescription
ImmutableArray_1.csChanged startIndex upper-bound validation from < Length to <= Length in IndexOf
ImmutableArray_1.Builder.csChanged startIndex upper-bound validation from < Count to <= Count in IndexOf
ImmutableList_1.Node.csAdded upper-bound check to index validation (from single >= 0 check to >= 0 && <= Count), added redundant count upper-bound validation
IndexOfTests.csAdded indexParameterName parameter to test signature, enhanced tests to validate exception parameter names and added edge case tests
ImmutableArrayTest.csAdded IndexOfConsistentWithArray test and updated test calls to pass "startIndex" parameter
ImmutableArrayBuilderTest.csAdded IndexOfConsistentWithArray test and updated test calls to pass "startIndex" parameter
ImmutableListTest.csAdded IndexOfConsistentWithArray test and updated test calls to pass "index" parameter
ImmutableListBuilderTest.csUpdated test calls to pass "index" parameter

CopilotAI review requested due to automatic review settings March 26, 2026 13:55

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 8 out of 8 changed files in this pull request and generated no new comments.

CopilotAI review requested due to automatic review settings March 31, 2026 00:18

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 8 out of 8 changed files in this pull request and generated 1 comment.

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
CopilotAI review requested due to automatic review settings March 31, 2026 01:23

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 8 out of 8 changed files in this pull request and generated no new comments.

@prozolic

Copy link
Copy Markdown
ContributorAuthor

@MihaZupan I've addressed your feedback. Could you please take another look when you get a chance?

@prozolic
prozolic requested a review from MihaZupanApril 10, 2026 23:33
Co-authored-by: Miha Zupan <mihazupan.zupan1@gmail.com>
CopilotAI review requested due to automatic review settings April 19, 2026 14:39
@MihaZupan
MihaZupan enabled auto-merge (squash) April 19, 2026 14:41

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 8 out of 8 changed files in this pull request and generated 1 comment.

CopilotAI review requested due to automatic review settings April 19, 2026 14:47

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 8 out of 8 changed files in this pull request and generated no new comments.

@MihaZupan
MihaZupan merged commit 56b0396 into dotnet:mainApr 19, 2026
94 of 100 checks passed
svick added a commit to svick/runtime that referenced this pull request Apr 20, 2026
PR dotnet#124967 accidentally committed two lines with CRLF endings into
a file that uses LF, causing git to perpetually report the file as
modified on Windows (core.autocrlf=true).
Renormalize to consistent LF endings.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
tannergooding pushed a commit that referenced this pull request Apr 20, 2026
PR #124967 accidentally committed two lines with CRLF endings into a
file that uses LF, causing git to perpetually report the file as
modified on Windows (core.autocrlf=true).
Renormalize to consistent LF endings.
cc: @MihaZupan
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@prozolic
prozolic deleted the indexof branch May 14, 2026 11:23
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Jun 14, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-System.Collectionscommunity-contributionIndicates that the PR has been added by a community member

Projects

None yet

Development

Successfully merging this pull request may close these issues.

ImmutableArray<T>.IndexOf throws ArgumentOutOfRangeException when startIndex equals Length and count is 0

3 participants

@prozolic@MihaZupan
, '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 IndexOf upper-bound guard in ImmutableArray/List - #124967

Merged
MihaZupan merged 9 commits into
dotnet:mainfrom
prozolic:indexof
Apr 19, 2026
Merged

Fix IndexOf upper-bound guard in ImmutableArray/List#124967
MihaZupan merged 9 commits into
dotnet:mainfrom
prozolic:indexof

Conversation

@prozolic

@prozolicprozolic commented Feb 27, 2026

Copy link
Copy Markdown
Contributor

Change the startIndex upper-bound validation in IndexOf from '< Count' to '<= Count' for ImmutableArray<T>,
ImmutableArray<T>.Builder, and add upper-bound validation in ImmutableList<T>.Node.
This aligns the behavior with Array.IndexOf, which permits index == Count provided count is 0.

Change:

  • Change the startIndex upper-bound validation in IndexOf from '< Count' to '<= Count' for ImmutableArray,
    ImmutableArray<T>.Builder.
  • Add upper-bound validation in ImmutableList<T>.Node to match the behavior of ImmutableArray<T>.
  • Add test case and fix test case to also validate the parameter name as the fix in Use Requires.Range in LastIndexOf #124560.

Fixes#124968

Change the startIndex upper-bound validation in IndexOf from
'< Count' to '<= Count' for ImmutableArray<T>,
ImmutableArray<T>.Builder, and add upper-bound validation
in ImmutableList<T>.Node.
This aligns the behavior with Array.IndexOf, which permits
index == Count provided count is 0.
CopilotAI review requested due to automatic review settings February 27, 2026 13:58
@dotnet-policy-servicedotnet-policy-serviceBot added the community-contribution Indicates that the PR has been added by a community member label Feb 27, 2026
@dotnet-policy-service

Copy link
Copy Markdown
Contributor

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

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

This PR fixes the IndexOf upper-bound validation in ImmutableArray<T>, ImmutableArray<T>.Builder, and ImmutableList<T>.Node to align with Array.IndexOf behavior, which allows startIndex == Count when count == 0. The PR is a follow-up to #124560 which fixed similar issues in LastIndexOf.

Changes:

  • Modified upper-bound validation for startIndex/index parameter from < Count to <= Count in IndexOf methods
  • Added upper-bound validation to ImmutableList<T>.Node.IndexOf which was previously missing
  • Enhanced tests to validate parameter names in thrown exceptions and added consistency tests with Array.IndexOf

Reviewed changes

Copilot reviewed 8 out of 8 changed files in this pull request and generated 1 comment.

Show a summary per file
FileDescription
ImmutableArray_1.csChanged startIndex upper-bound validation from < Length to <= Length in IndexOf
ImmutableArray_1.Builder.csChanged startIndex upper-bound validation from < Count to <= Count in IndexOf
ImmutableList_1.Node.csAdded upper-bound check to index validation (from single >= 0 check to >= 0 && <= Count), added redundant count upper-bound validation
IndexOfTests.csAdded indexParameterName parameter to test signature, enhanced tests to validate exception parameter names and added edge case tests
ImmutableArrayTest.csAdded IndexOfConsistentWithArray test and updated test calls to pass "startIndex" parameter
ImmutableArrayBuilderTest.csAdded IndexOfConsistentWithArray test and updated test calls to pass "startIndex" parameter
ImmutableListTest.csAdded IndexOfConsistentWithArray test and updated test calls to pass "index" parameter
ImmutableListBuilderTest.csUpdated test calls to pass "index" parameter

CopilotAI review requested due to automatic review settings March 26, 2026 13:55

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 8 out of 8 changed files in this pull request and generated no new comments.

CopilotAI review requested due to automatic review settings March 31, 2026 00:18

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 8 out of 8 changed files in this pull request and generated 1 comment.

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
CopilotAI review requested due to automatic review settings March 31, 2026 01:23

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 8 out of 8 changed files in this pull request and generated no new comments.

@prozolic

Copy link
Copy Markdown
ContributorAuthor

@MihaZupan I've addressed your feedback. Could you please take another look when you get a chance?

@prozolic
prozolic requested a review from MihaZupanApril 10, 2026 23:33
Co-authored-by: Miha Zupan <mihazupan.zupan1@gmail.com>
CopilotAI review requested due to automatic review settings April 19, 2026 14:39
@MihaZupan
MihaZupan enabled auto-merge (squash) April 19, 2026 14:41

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 8 out of 8 changed files in this pull request and generated 1 comment.

CopilotAI review requested due to automatic review settings April 19, 2026 14:47

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 8 out of 8 changed files in this pull request and generated no new comments.

@MihaZupan
MihaZupan merged commit 56b0396 into dotnet:mainApr 19, 2026
94 of 100 checks passed
svick added a commit to svick/runtime that referenced this pull request Apr 20, 2026
PR dotnet#124967 accidentally committed two lines with CRLF endings into
a file that uses LF, causing git to perpetually report the file as
modified on Windows (core.autocrlf=true).
Renormalize to consistent LF endings.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
tannergooding pushed a commit that referenced this pull request Apr 20, 2026
PR #124967 accidentally committed two lines with CRLF endings into a
file that uses LF, causing git to perpetually report the file as
modified on Windows (core.autocrlf=true).
Renormalize to consistent LF endings.
cc: @MihaZupan
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@prozolic
prozolic deleted the indexof branch May 14, 2026 11:23
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Jun 14, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-System.Collectionscommunity-contributionIndicates that the PR has been added by a community member

Projects

None yet

Development

Successfully merging this pull request may close these issues.

ImmutableArray<T>.IndexOf throws ArgumentOutOfRangeException when startIndex equals Length and count is 0

3 participants

@prozolic@MihaZupan
, '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 IndexOf upper-bound guard in ImmutableArray/List - #124967

Merged
MihaZupan merged 9 commits into
dotnet:mainfrom
prozolic:indexof
Apr 19, 2026
Merged

Fix IndexOf upper-bound guard in ImmutableArray/List#124967
MihaZupan merged 9 commits into
dotnet:mainfrom
prozolic:indexof

Conversation

@prozolic

@prozolicprozolic commented Feb 27, 2026

Copy link
Copy Markdown
Contributor

Change the startIndex upper-bound validation in IndexOf from '< Count' to '<= Count' for ImmutableArray<T>,
ImmutableArray<T>.Builder, and add upper-bound validation in ImmutableList<T>.Node.
This aligns the behavior with Array.IndexOf, which permits index == Count provided count is 0.

Change:

  • Change the startIndex upper-bound validation in IndexOf from '< Count' to '<= Count' for ImmutableArray,
    ImmutableArray<T>.Builder.
  • Add upper-bound validation in ImmutableList<T>.Node to match the behavior of ImmutableArray<T>.
  • Add test case and fix test case to also validate the parameter name as the fix in Use Requires.Range in LastIndexOf #124560.

Fixes#124968

Change the startIndex upper-bound validation in IndexOf from
'< Count' to '<= Count' for ImmutableArray<T>,
ImmutableArray<T>.Builder, and add upper-bound validation
in ImmutableList<T>.Node.
This aligns the behavior with Array.IndexOf, which permits
index == Count provided count is 0.
CopilotAI review requested due to automatic review settings February 27, 2026 13:58
@dotnet-policy-servicedotnet-policy-serviceBot added the community-contribution Indicates that the PR has been added by a community member label Feb 27, 2026
@dotnet-policy-service

Copy link
Copy Markdown
Contributor

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

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

This PR fixes the IndexOf upper-bound validation in ImmutableArray<T>, ImmutableArray<T>.Builder, and ImmutableList<T>.Node to align with Array.IndexOf behavior, which allows startIndex == Count when count == 0. The PR is a follow-up to #124560 which fixed similar issues in LastIndexOf.

Changes:

  • Modified upper-bound validation for startIndex/index parameter from < Count to <= Count in IndexOf methods
  • Added upper-bound validation to ImmutableList<T>.Node.IndexOf which was previously missing
  • Enhanced tests to validate parameter names in thrown exceptions and added consistency tests with Array.IndexOf

Reviewed changes

Copilot reviewed 8 out of 8 changed files in this pull request and generated 1 comment.

Show a summary per file
FileDescription
ImmutableArray_1.csChanged startIndex upper-bound validation from < Length to <= Length in IndexOf
ImmutableArray_1.Builder.csChanged startIndex upper-bound validation from < Count to <= Count in IndexOf
ImmutableList_1.Node.csAdded upper-bound check to index validation (from single >= 0 check to >= 0 && <= Count), added redundant count upper-bound validation
IndexOfTests.csAdded indexParameterName parameter to test signature, enhanced tests to validate exception parameter names and added edge case tests
ImmutableArrayTest.csAdded IndexOfConsistentWithArray test and updated test calls to pass "startIndex" parameter
ImmutableArrayBuilderTest.csAdded IndexOfConsistentWithArray test and updated test calls to pass "startIndex" parameter
ImmutableListTest.csAdded IndexOfConsistentWithArray test and updated test calls to pass "index" parameter
ImmutableListBuilderTest.csUpdated test calls to pass "index" parameter

CopilotAI review requested due to automatic review settings March 26, 2026 13:55

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 8 out of 8 changed files in this pull request and generated no new comments.

CopilotAI review requested due to automatic review settings March 31, 2026 00:18

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 8 out of 8 changed files in this pull request and generated 1 comment.

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
CopilotAI review requested due to automatic review settings March 31, 2026 01:23

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 8 out of 8 changed files in this pull request and generated no new comments.

@prozolic

Copy link
Copy Markdown
ContributorAuthor

@MihaZupan I've addressed your feedback. Could you please take another look when you get a chance?

@prozolic
prozolic requested a review from MihaZupanApril 10, 2026 23:33
Co-authored-by: Miha Zupan <mihazupan.zupan1@gmail.com>
CopilotAI review requested due to automatic review settings April 19, 2026 14:39
@MihaZupan
MihaZupan enabled auto-merge (squash) April 19, 2026 14:41

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 8 out of 8 changed files in this pull request and generated 1 comment.

CopilotAI review requested due to automatic review settings April 19, 2026 14:47

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 8 out of 8 changed files in this pull request and generated no new comments.

@MihaZupan
MihaZupan merged commit 56b0396 into dotnet:mainApr 19, 2026
94 of 100 checks passed
svick added a commit to svick/runtime that referenced this pull request Apr 20, 2026
PR dotnet#124967 accidentally committed two lines with CRLF endings into
a file that uses LF, causing git to perpetually report the file as
modified on Windows (core.autocrlf=true).
Renormalize to consistent LF endings.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
tannergooding pushed a commit that referenced this pull request Apr 20, 2026
PR #124967 accidentally committed two lines with CRLF endings into a
file that uses LF, causing git to perpetually report the file as
modified on Windows (core.autocrlf=true).
Renormalize to consistent LF endings.
cc: @MihaZupan
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@prozolic
prozolic deleted the indexof branch May 14, 2026 11:23
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Jun 14, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-System.Collectionscommunity-contributionIndicates that the PR has been added by a community member

Projects

None yet

Development

Successfully merging this pull request may close these issues.

ImmutableArray<T>.IndexOf throws ArgumentOutOfRangeException when startIndex equals Length and count is 0

3 participants

@prozolic@MihaZupan
, '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 IndexOf upper-bound guard in ImmutableArray/List - #124967

Merged
MihaZupan merged 9 commits into
dotnet:mainfrom
prozolic:indexof
Apr 19, 2026
Merged

Fix IndexOf upper-bound guard in ImmutableArray/List#124967
MihaZupan merged 9 commits into
dotnet:mainfrom
prozolic:indexof

Conversation

@prozolic

@prozolicprozolic commented Feb 27, 2026

Copy link
Copy Markdown
Contributor

Change the startIndex upper-bound validation in IndexOf from '< Count' to '<= Count' for ImmutableArray<T>,
ImmutableArray<T>.Builder, and add upper-bound validation in ImmutableList<T>.Node.
This aligns the behavior with Array.IndexOf, which permits index == Count provided count is 0.

Change:

  • Change the startIndex upper-bound validation in IndexOf from '< Count' to '<= Count' for ImmutableArray,
    ImmutableArray<T>.Builder.
  • Add upper-bound validation in ImmutableList<T>.Node to match the behavior of ImmutableArray<T>.
  • Add test case and fix test case to also validate the parameter name as the fix in Use Requires.Range in LastIndexOf #124560.

Fixes#124968

Change the startIndex upper-bound validation in IndexOf from
'< Count' to '<= Count' for ImmutableArray<T>,
ImmutableArray<T>.Builder, and add upper-bound validation
in ImmutableList<T>.Node.
This aligns the behavior with Array.IndexOf, which permits
index == Count provided count is 0.
CopilotAI review requested due to automatic review settings February 27, 2026 13:58
@dotnet-policy-servicedotnet-policy-serviceBot added the community-contribution Indicates that the PR has been added by a community member label Feb 27, 2026
@dotnet-policy-service

Copy link
Copy Markdown
Contributor

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

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

This PR fixes the IndexOf upper-bound validation in ImmutableArray<T>, ImmutableArray<T>.Builder, and ImmutableList<T>.Node to align with Array.IndexOf behavior, which allows startIndex == Count when count == 0. The PR is a follow-up to #124560 which fixed similar issues in LastIndexOf.

Changes:

  • Modified upper-bound validation for startIndex/index parameter from < Count to <= Count in IndexOf methods
  • Added upper-bound validation to ImmutableList<T>.Node.IndexOf which was previously missing
  • Enhanced tests to validate parameter names in thrown exceptions and added consistency tests with Array.IndexOf

Reviewed changes

Copilot reviewed 8 out of 8 changed files in this pull request and generated 1 comment.

Show a summary per file
FileDescription
ImmutableArray_1.csChanged startIndex upper-bound validation from < Length to <= Length in IndexOf
ImmutableArray_1.Builder.csChanged startIndex upper-bound validation from < Count to <= Count in IndexOf
ImmutableList_1.Node.csAdded upper-bound check to index validation (from single >= 0 check to >= 0 && <= Count), added redundant count upper-bound validation
IndexOfTests.csAdded indexParameterName parameter to test signature, enhanced tests to validate exception parameter names and added edge case tests
ImmutableArrayTest.csAdded IndexOfConsistentWithArray test and updated test calls to pass "startIndex" parameter
ImmutableArrayBuilderTest.csAdded IndexOfConsistentWithArray test and updated test calls to pass "startIndex" parameter
ImmutableListTest.csAdded IndexOfConsistentWithArray test and updated test calls to pass "index" parameter
ImmutableListBuilderTest.csUpdated test calls to pass "index" parameter

CopilotAI review requested due to automatic review settings March 26, 2026 13:55

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 8 out of 8 changed files in this pull request and generated no new comments.

CopilotAI review requested due to automatic review settings March 31, 2026 00:18

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 8 out of 8 changed files in this pull request and generated 1 comment.

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
CopilotAI review requested due to automatic review settings March 31, 2026 01:23

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 8 out of 8 changed files in this pull request and generated no new comments.

@prozolic

Copy link
Copy Markdown
ContributorAuthor

@MihaZupan I've addressed your feedback. Could you please take another look when you get a chance?

@prozolic
prozolic requested a review from MihaZupanApril 10, 2026 23:33
Co-authored-by: Miha Zupan <mihazupan.zupan1@gmail.com>
CopilotAI review requested due to automatic review settings April 19, 2026 14:39
@MihaZupan
MihaZupan enabled auto-merge (squash) April 19, 2026 14:41

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 8 out of 8 changed files in this pull request and generated 1 comment.

CopilotAI review requested due to automatic review settings April 19, 2026 14:47

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 8 out of 8 changed files in this pull request and generated no new comments.

@MihaZupan
MihaZupan merged commit 56b0396 into dotnet:mainApr 19, 2026
94 of 100 checks passed
svick added a commit to svick/runtime that referenced this pull request Apr 20, 2026
PR dotnet#124967 accidentally committed two lines with CRLF endings into
a file that uses LF, causing git to perpetually report the file as
modified on Windows (core.autocrlf=true).
Renormalize to consistent LF endings.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
tannergooding pushed a commit that referenced this pull request Apr 20, 2026
PR #124967 accidentally committed two lines with CRLF endings into a
file that uses LF, causing git to perpetually report the file as
modified on Windows (core.autocrlf=true).
Renormalize to consistent LF endings.
cc: @MihaZupan
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@prozolic
prozolic deleted the indexof branch May 14, 2026 11:23
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Jun 14, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-System.Collectionscommunity-contributionIndicates that the PR has been added by a community member

Projects

None yet

Development

Successfully merging this pull request may close these issues.

ImmutableArray<T>.IndexOf throws ArgumentOutOfRangeException when startIndex equals Length and count is 0

3 participants

@prozolic@MihaZupan
, '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 IndexOf upper-bound guard in ImmutableArray/List - #124967

Merged
MihaZupan merged 9 commits into
dotnet:mainfrom
prozolic:indexof
Apr 19, 2026
Merged

Fix IndexOf upper-bound guard in ImmutableArray/List#124967
MihaZupan merged 9 commits into
dotnet:mainfrom
prozolic:indexof

Conversation

@prozolic

@prozolicprozolic commented Feb 27, 2026

Copy link
Copy Markdown
Contributor

Change the startIndex upper-bound validation in IndexOf from '< Count' to '<= Count' for ImmutableArray<T>,
ImmutableArray<T>.Builder, and add upper-bound validation in ImmutableList<T>.Node.
This aligns the behavior with Array.IndexOf, which permits index == Count provided count is 0.

Change:

  • Change the startIndex upper-bound validation in IndexOf from '< Count' to '<= Count' for ImmutableArray,
    ImmutableArray<T>.Builder.
  • Add upper-bound validation in ImmutableList<T>.Node to match the behavior of ImmutableArray<T>.
  • Add test case and fix test case to also validate the parameter name as the fix in Use Requires.Range in LastIndexOf #124560.

Fixes#124968

Change the startIndex upper-bound validation in IndexOf from
'< Count' to '<= Count' for ImmutableArray<T>,
ImmutableArray<T>.Builder, and add upper-bound validation
in ImmutableList<T>.Node.
This aligns the behavior with Array.IndexOf, which permits
index == Count provided count is 0.
CopilotAI review requested due to automatic review settings February 27, 2026 13:58
@dotnet-policy-servicedotnet-policy-serviceBot added the community-contribution Indicates that the PR has been added by a community member label Feb 27, 2026
@dotnet-policy-service

Copy link
Copy Markdown
Contributor

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

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

This PR fixes the IndexOf upper-bound validation in ImmutableArray<T>, ImmutableArray<T>.Builder, and ImmutableList<T>.Node to align with Array.IndexOf behavior, which allows startIndex == Count when count == 0. The PR is a follow-up to #124560 which fixed similar issues in LastIndexOf.

Changes:

  • Modified upper-bound validation for startIndex/index parameter from < Count to <= Count in IndexOf methods
  • Added upper-bound validation to ImmutableList<T>.Node.IndexOf which was previously missing
  • Enhanced tests to validate parameter names in thrown exceptions and added consistency tests with Array.IndexOf

Reviewed changes

Copilot reviewed 8 out of 8 changed files in this pull request and generated 1 comment.

Show a summary per file
FileDescription
ImmutableArray_1.csChanged startIndex upper-bound validation from < Length to <= Length in IndexOf
ImmutableArray_1.Builder.csChanged startIndex upper-bound validation from < Count to <= Count in IndexOf
ImmutableList_1.Node.csAdded upper-bound check to index validation (from single >= 0 check to >= 0 && <= Count), added redundant count upper-bound validation
IndexOfTests.csAdded indexParameterName parameter to test signature, enhanced tests to validate exception parameter names and added edge case tests
ImmutableArrayTest.csAdded IndexOfConsistentWithArray test and updated test calls to pass "startIndex" parameter
ImmutableArrayBuilderTest.csAdded IndexOfConsistentWithArray test and updated test calls to pass "startIndex" parameter
ImmutableListTest.csAdded IndexOfConsistentWithArray test and updated test calls to pass "index" parameter
ImmutableListBuilderTest.csUpdated test calls to pass "index" parameter

CopilotAI review requested due to automatic review settings March 26, 2026 13:55

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 8 out of 8 changed files in this pull request and generated no new comments.

CopilotAI review requested due to automatic review settings March 31, 2026 00:18

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 8 out of 8 changed files in this pull request and generated 1 comment.

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
CopilotAI review requested due to automatic review settings March 31, 2026 01:23

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 8 out of 8 changed files in this pull request and generated no new comments.

@prozolic

Copy link
Copy Markdown
ContributorAuthor

@MihaZupan I've addressed your feedback. Could you please take another look when you get a chance?

@prozolic
prozolic requested a review from MihaZupanApril 10, 2026 23:33
Co-authored-by: Miha Zupan <mihazupan.zupan1@gmail.com>
CopilotAI review requested due to automatic review settings April 19, 2026 14:39
@MihaZupan
MihaZupan enabled auto-merge (squash) April 19, 2026 14:41

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 8 out of 8 changed files in this pull request and generated 1 comment.

CopilotAI review requested due to automatic review settings April 19, 2026 14:47

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 8 out of 8 changed files in this pull request and generated no new comments.

@MihaZupan
MihaZupan merged commit 56b0396 into dotnet:mainApr 19, 2026
94 of 100 checks passed
svick added a commit to svick/runtime that referenced this pull request Apr 20, 2026
PR dotnet#124967 accidentally committed two lines with CRLF endings into
a file that uses LF, causing git to perpetually report the file as
modified on Windows (core.autocrlf=true).
Renormalize to consistent LF endings.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
tannergooding pushed a commit that referenced this pull request Apr 20, 2026
PR #124967 accidentally committed two lines with CRLF endings into a
file that uses LF, causing git to perpetually report the file as
modified on Windows (core.autocrlf=true).
Renormalize to consistent LF endings.
cc: @MihaZupan
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@prozolic
prozolic deleted the indexof branch May 14, 2026 11:23
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Jun 14, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-System.Collectionscommunity-contributionIndicates that the PR has been added by a community member

Projects

None yet

Development

Successfully merging this pull request may close these issues.

ImmutableArray<T>.IndexOf throws ArgumentOutOfRangeException when startIndex equals Length and count is 0

3 participants

@prozolic@MihaZupan
, '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 IndexOf upper-bound guard in ImmutableArray/List - #124967

Merged
MihaZupan merged 9 commits into
dotnet:mainfrom
prozolic:indexof
Apr 19, 2026
Merged

Fix IndexOf upper-bound guard in ImmutableArray/List#124967
MihaZupan merged 9 commits into
dotnet:mainfrom
prozolic:indexof

Conversation

@prozolic

@prozolicprozolic commented Feb 27, 2026

Copy link
Copy Markdown
Contributor

Change the startIndex upper-bound validation in IndexOf from '< Count' to '<= Count' for ImmutableArray<T>,
ImmutableArray<T>.Builder, and add upper-bound validation in ImmutableList<T>.Node.
This aligns the behavior with Array.IndexOf, which permits index == Count provided count is 0.

Change:

  • Change the startIndex upper-bound validation in IndexOf from '< Count' to '<= Count' for ImmutableArray,
    ImmutableArray<T>.Builder.
  • Add upper-bound validation in ImmutableList<T>.Node to match the behavior of ImmutableArray<T>.
  • Add test case and fix test case to also validate the parameter name as the fix in Use Requires.Range in LastIndexOf #124560.

Fixes#124968

Change the startIndex upper-bound validation in IndexOf from
'< Count' to '<= Count' for ImmutableArray<T>,
ImmutableArray<T>.Builder, and add upper-bound validation
in ImmutableList<T>.Node.
This aligns the behavior with Array.IndexOf, which permits
index == Count provided count is 0.
CopilotAI review requested due to automatic review settings February 27, 2026 13:58
@dotnet-policy-servicedotnet-policy-serviceBot added the community-contribution Indicates that the PR has been added by a community member label Feb 27, 2026
@dotnet-policy-service

Copy link
Copy Markdown
Contributor

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

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

This PR fixes the IndexOf upper-bound validation in ImmutableArray<T>, ImmutableArray<T>.Builder, and ImmutableList<T>.Node to align with Array.IndexOf behavior, which allows startIndex == Count when count == 0. The PR is a follow-up to #124560 which fixed similar issues in LastIndexOf.

Changes:

  • Modified upper-bound validation for startIndex/index parameter from < Count to <= Count in IndexOf methods
  • Added upper-bound validation to ImmutableList<T>.Node.IndexOf which was previously missing
  • Enhanced tests to validate parameter names in thrown exceptions and added consistency tests with Array.IndexOf

Reviewed changes

Copilot reviewed 8 out of 8 changed files in this pull request and generated 1 comment.

Show a summary per file
FileDescription
ImmutableArray_1.csChanged startIndex upper-bound validation from < Length to <= Length in IndexOf
ImmutableArray_1.Builder.csChanged startIndex upper-bound validation from < Count to <= Count in IndexOf
ImmutableList_1.Node.csAdded upper-bound check to index validation (from single >= 0 check to >= 0 && <= Count), added redundant count upper-bound validation
IndexOfTests.csAdded indexParameterName parameter to test signature, enhanced tests to validate exception parameter names and added edge case tests
ImmutableArrayTest.csAdded IndexOfConsistentWithArray test and updated test calls to pass "startIndex" parameter
ImmutableArrayBuilderTest.csAdded IndexOfConsistentWithArray test and updated test calls to pass "startIndex" parameter
ImmutableListTest.csAdded IndexOfConsistentWithArray test and updated test calls to pass "index" parameter
ImmutableListBuilderTest.csUpdated test calls to pass "index" parameter

CopilotAI review requested due to automatic review settings March 26, 2026 13:55

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 8 out of 8 changed files in this pull request and generated no new comments.

CopilotAI review requested due to automatic review settings March 31, 2026 00:18

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 8 out of 8 changed files in this pull request and generated 1 comment.

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
CopilotAI review requested due to automatic review settings March 31, 2026 01:23

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 8 out of 8 changed files in this pull request and generated no new comments.

@prozolic

Copy link
Copy Markdown
ContributorAuthor

@MihaZupan I've addressed your feedback. Could you please take another look when you get a chance?

@prozolic
prozolic requested a review from MihaZupanApril 10, 2026 23:33
Co-authored-by: Miha Zupan <mihazupan.zupan1@gmail.com>
CopilotAI review requested due to automatic review settings April 19, 2026 14:39
@MihaZupan
MihaZupan enabled auto-merge (squash) April 19, 2026 14:41

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 8 out of 8 changed files in this pull request and generated 1 comment.

CopilotAI review requested due to automatic review settings April 19, 2026 14:47

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 8 out of 8 changed files in this pull request and generated no new comments.

@MihaZupan
MihaZupan merged commit 56b0396 into dotnet:mainApr 19, 2026
94 of 100 checks passed
svick added a commit to svick/runtime that referenced this pull request Apr 20, 2026
PR dotnet#124967 accidentally committed two lines with CRLF endings into
a file that uses LF, causing git to perpetually report the file as
modified on Windows (core.autocrlf=true).
Renormalize to consistent LF endings.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
tannergooding pushed a commit that referenced this pull request Apr 20, 2026
PR #124967 accidentally committed two lines with CRLF endings into a
file that uses LF, causing git to perpetually report the file as
modified on Windows (core.autocrlf=true).
Renormalize to consistent LF endings.
cc: @MihaZupan
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@prozolic
prozolic deleted the indexof branch May 14, 2026 11:23
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Jun 14, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-System.Collectionscommunity-contributionIndicates that the PR has been added by a community member

Projects

None yet

Development

Successfully merging this pull request may close these issues.

ImmutableArray<T>.IndexOf throws ArgumentOutOfRangeException when startIndex equals Length and count is 0

3 participants

@prozolic@MihaZupan
, '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 IndexOf upper-bound guard in ImmutableArray/List - #124967

Merged
MihaZupan merged 9 commits into
dotnet:mainfrom
prozolic:indexof
Apr 19, 2026
Merged

Fix IndexOf upper-bound guard in ImmutableArray/List#124967
MihaZupan merged 9 commits into
dotnet:mainfrom
prozolic:indexof

Conversation

@prozolic

@prozolicprozolic commented Feb 27, 2026

Copy link
Copy Markdown
Contributor

Change the startIndex upper-bound validation in IndexOf from '< Count' to '<= Count' for ImmutableArray<T>,
ImmutableArray<T>.Builder, and add upper-bound validation in ImmutableList<T>.Node.
This aligns the behavior with Array.IndexOf, which permits index == Count provided count is 0.

Change:

  • Change the startIndex upper-bound validation in IndexOf from '< Count' to '<= Count' for ImmutableArray,
    ImmutableArray<T>.Builder.
  • Add upper-bound validation in ImmutableList<T>.Node to match the behavior of ImmutableArray<T>.
  • Add test case and fix test case to also validate the parameter name as the fix in Use Requires.Range in LastIndexOf #124560.

Fixes#124968

Change the startIndex upper-bound validation in IndexOf from
'< Count' to '<= Count' for ImmutableArray<T>,
ImmutableArray<T>.Builder, and add upper-bound validation
in ImmutableList<T>.Node.
This aligns the behavior with Array.IndexOf, which permits
index == Count provided count is 0.
CopilotAI review requested due to automatic review settings February 27, 2026 13:58
@dotnet-policy-servicedotnet-policy-serviceBot added the community-contribution Indicates that the PR has been added by a community member label Feb 27, 2026
@dotnet-policy-service

Copy link
Copy Markdown
Contributor

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

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

This PR fixes the IndexOf upper-bound validation in ImmutableArray<T>, ImmutableArray<T>.Builder, and ImmutableList<T>.Node to align with Array.IndexOf behavior, which allows startIndex == Count when count == 0. The PR is a follow-up to #124560 which fixed similar issues in LastIndexOf.

Changes:

  • Modified upper-bound validation for startIndex/index parameter from < Count to <= Count in IndexOf methods
  • Added upper-bound validation to ImmutableList<T>.Node.IndexOf which was previously missing
  • Enhanced tests to validate parameter names in thrown exceptions and added consistency tests with Array.IndexOf

Reviewed changes

Copilot reviewed 8 out of 8 changed files in this pull request and generated 1 comment.

Show a summary per file
FileDescription
ImmutableArray_1.csChanged startIndex upper-bound validation from < Length to <= Length in IndexOf
ImmutableArray_1.Builder.csChanged startIndex upper-bound validation from < Count to <= Count in IndexOf
ImmutableList_1.Node.csAdded upper-bound check to index validation (from single >= 0 check to >= 0 && <= Count), added redundant count upper-bound validation
IndexOfTests.csAdded indexParameterName parameter to test signature, enhanced tests to validate exception parameter names and added edge case tests
ImmutableArrayTest.csAdded IndexOfConsistentWithArray test and updated test calls to pass "startIndex" parameter
ImmutableArrayBuilderTest.csAdded IndexOfConsistentWithArray test and updated test calls to pass "startIndex" parameter
ImmutableListTest.csAdded IndexOfConsistentWithArray test and updated test calls to pass "index" parameter
ImmutableListBuilderTest.csUpdated test calls to pass "index" parameter

CopilotAI review requested due to automatic review settings March 26, 2026 13:55

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 8 out of 8 changed files in this pull request and generated no new comments.

CopilotAI review requested due to automatic review settings March 31, 2026 00:18

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 8 out of 8 changed files in this pull request and generated 1 comment.

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
CopilotAI review requested due to automatic review settings March 31, 2026 01:23

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 8 out of 8 changed files in this pull request and generated no new comments.

@prozolic

Copy link
Copy Markdown
ContributorAuthor

@MihaZupan I've addressed your feedback. Could you please take another look when you get a chance?

@prozolic
prozolic requested a review from MihaZupanApril 10, 2026 23:33
Co-authored-by: Miha Zupan <mihazupan.zupan1@gmail.com>
CopilotAI review requested due to automatic review settings April 19, 2026 14:39
@MihaZupan
MihaZupan enabled auto-merge (squash) April 19, 2026 14:41

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 8 out of 8 changed files in this pull request and generated 1 comment.

CopilotAI review requested due to automatic review settings April 19, 2026 14:47

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 8 out of 8 changed files in this pull request and generated no new comments.

@MihaZupan
MihaZupan merged commit 56b0396 into dotnet:mainApr 19, 2026
94 of 100 checks passed
svick added a commit to svick/runtime that referenced this pull request Apr 20, 2026
PR dotnet#124967 accidentally committed two lines with CRLF endings into
a file that uses LF, causing git to perpetually report the file as
modified on Windows (core.autocrlf=true).
Renormalize to consistent LF endings.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
tannergooding pushed a commit that referenced this pull request Apr 20, 2026
PR #124967 accidentally committed two lines with CRLF endings into a
file that uses LF, causing git to perpetually report the file as
modified on Windows (core.autocrlf=true).
Renormalize to consistent LF endings.
cc: @MihaZupan
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@prozolic
prozolic deleted the indexof branch May 14, 2026 11:23
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Jun 14, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-System.Collectionscommunity-contributionIndicates that the PR has been added by a community member

Projects

None yet

Development

Successfully merging this pull request may close these issues.

ImmutableArray<T>.IndexOf throws ArgumentOutOfRangeException when startIndex equals Length and count is 0

3 participants

@prozolic@MihaZupan
, '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 IndexOf upper-bound guard in ImmutableArray/List - #124967

Merged
MihaZupan merged 9 commits into
dotnet:mainfrom
prozolic:indexof
Apr 19, 2026
Merged

Fix IndexOf upper-bound guard in ImmutableArray/List#124967
MihaZupan merged 9 commits into
dotnet:mainfrom
prozolic:indexof

Conversation

@prozolic

@prozolicprozolic commented Feb 27, 2026

Copy link
Copy Markdown
Contributor

Change the startIndex upper-bound validation in IndexOf from '< Count' to '<= Count' for ImmutableArray<T>,
ImmutableArray<T>.Builder, and add upper-bound validation in ImmutableList<T>.Node.
This aligns the behavior with Array.IndexOf, which permits index == Count provided count is 0.

Change:

  • Change the startIndex upper-bound validation in IndexOf from '< Count' to '<= Count' for ImmutableArray,
    ImmutableArray<T>.Builder.
  • Add upper-bound validation in ImmutableList<T>.Node to match the behavior of ImmutableArray<T>.
  • Add test case and fix test case to also validate the parameter name as the fix in Use Requires.Range in LastIndexOf #124560.

Fixes#124968

Change the startIndex upper-bound validation in IndexOf from
'< Count' to '<= Count' for ImmutableArray<T>,
ImmutableArray<T>.Builder, and add upper-bound validation
in ImmutableList<T>.Node.
This aligns the behavior with Array.IndexOf, which permits
index == Count provided count is 0.
CopilotAI review requested due to automatic review settings February 27, 2026 13:58
@dotnet-policy-servicedotnet-policy-serviceBot added the community-contribution Indicates that the PR has been added by a community member label Feb 27, 2026
@dotnet-policy-service

Copy link
Copy Markdown
Contributor

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

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

This PR fixes the IndexOf upper-bound validation in ImmutableArray<T>, ImmutableArray<T>.Builder, and ImmutableList<T>.Node to align with Array.IndexOf behavior, which allows startIndex == Count when count == 0. The PR is a follow-up to #124560 which fixed similar issues in LastIndexOf.

Changes:

  • Modified upper-bound validation for startIndex/index parameter from < Count to <= Count in IndexOf methods
  • Added upper-bound validation to ImmutableList<T>.Node.IndexOf which was previously missing
  • Enhanced tests to validate parameter names in thrown exceptions and added consistency tests with Array.IndexOf

Reviewed changes

Copilot reviewed 8 out of 8 changed files in this pull request and generated 1 comment.

Show a summary per file
FileDescription
ImmutableArray_1.csChanged startIndex upper-bound validation from < Length to <= Length in IndexOf
ImmutableArray_1.Builder.csChanged startIndex upper-bound validation from < Count to <= Count in IndexOf
ImmutableList_1.Node.csAdded upper-bound check to index validation (from single >= 0 check to >= 0 && <= Count), added redundant count upper-bound validation
IndexOfTests.csAdded indexParameterName parameter to test signature, enhanced tests to validate exception parameter names and added edge case tests
ImmutableArrayTest.csAdded IndexOfConsistentWithArray test and updated test calls to pass "startIndex" parameter
ImmutableArrayBuilderTest.csAdded IndexOfConsistentWithArray test and updated test calls to pass "startIndex" parameter
ImmutableListTest.csAdded IndexOfConsistentWithArray test and updated test calls to pass "index" parameter
ImmutableListBuilderTest.csUpdated test calls to pass "index" parameter

CopilotAI review requested due to automatic review settings March 26, 2026 13:55

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 8 out of 8 changed files in this pull request and generated no new comments.

CopilotAI review requested due to automatic review settings March 31, 2026 00:18

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 8 out of 8 changed files in this pull request and generated 1 comment.

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
CopilotAI review requested due to automatic review settings March 31, 2026 01:23

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 8 out of 8 changed files in this pull request and generated no new comments.

@prozolic

Copy link
Copy Markdown
ContributorAuthor

@MihaZupan I've addressed your feedback. Could you please take another look when you get a chance?

@prozolic
prozolic requested a review from MihaZupanApril 10, 2026 23:33
Co-authored-by: Miha Zupan <mihazupan.zupan1@gmail.com>
CopilotAI review requested due to automatic review settings April 19, 2026 14:39
@MihaZupan
MihaZupan enabled auto-merge (squash) April 19, 2026 14:41

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 8 out of 8 changed files in this pull request and generated 1 comment.

CopilotAI review requested due to automatic review settings April 19, 2026 14:47

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 8 out of 8 changed files in this pull request and generated no new comments.

@MihaZupan
MihaZupan merged commit 56b0396 into dotnet:mainApr 19, 2026
94 of 100 checks passed
svick added a commit to svick/runtime that referenced this pull request Apr 20, 2026
PR dotnet#124967 accidentally committed two lines with CRLF endings into
a file that uses LF, causing git to perpetually report the file as
modified on Windows (core.autocrlf=true).
Renormalize to consistent LF endings.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
tannergooding pushed a commit that referenced this pull request Apr 20, 2026
PR #124967 accidentally committed two lines with CRLF endings into a
file that uses LF, causing git to perpetually report the file as
modified on Windows (core.autocrlf=true).
Renormalize to consistent LF endings.
cc: @MihaZupan
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@prozolic
prozolic deleted the indexof branch May 14, 2026 11:23
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Jun 14, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-System.Collectionscommunity-contributionIndicates that the PR has been added by a community member

Projects

None yet

Development

Successfully merging this pull request may close these issues.

ImmutableArray<T>.IndexOf throws ArgumentOutOfRangeException when startIndex equals Length and count is 0

3 participants

@prozolic@MihaZupan