Skip to content

Match CocoaPods names exactly when reading version lists - #206

Open
codewithfourtix wants to merge 2 commits into
aboutcode-org:masterfrom
codewithfourtix:fix-cocoapods-exact-name-match
Open

Match CocoaPods names exactly when reading version lists#206
codewithfourtix wants to merge 2 commits into
aboutcode-org:masterfrom
codewithfourtix:fix-cocoapods-exact-name-match

Conversation

@codewithfourtix

Copy link
Copy Markdown

Looking up Foo can return the versions of FooBar because the lookup only checks the name prefix. Include the field separator in the match so only the requested pod is selected.

Adds tests with an overlapping name and with no exact match.

Signed-off-by: Ali Zulfiqar <codewithfourtix@gmail.com>
Copilot AI lite review requested due to automatic review settings September 5, 2026 17:21

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🟡 Changes recommended

The updated “no exact match” behavior can propagate None to callers that iterate tags (e.g., CocoaPods route code), causing a runtime TypeError instead of safely yielding no results.

Once you've addressed the issues Copilot identified, you can request another Copilot review.

Pull request overview

This PR fixes CocoaPods version-list parsing to avoid selecting the wrong pod when one pod name is a prefix of another (e.g., Foo vs FooBar) by requiring an exact field match when scanning the versions index.

Changes:

  • Update CocoaPods version-line matching to require "{name}/" instead of a plain prefix match.
  • Add tests covering overlapping-name scenarios and the “no exact match” case.
File summaries
File Description
tests/test_cocoapods_tag_lookup.py Adds focused tests for overlapping CocoaPods names and missing exact matches.
src/fetchcode/package_util.py Tightens get_cocoapod_tags() matching to avoid prefix collisions.
Review details

Suppressed comments (1)

src/fetchcode/package_util.py:304

  • get_cocoapod_tags() can return None (no exact match or exception). The primary caller get_cocoapods_data_from_purl() iterates for tag in data_list without checking for None, so a missing pod entry will now raise TypeError: 'NoneType' object is not iterable instead of cleanly yielding no results. Consider making this helper always return a list (empty when not found / on error) and avoid the bare except: (it also catches KeyboardInterrupt/SystemExit).
            if line.startswith(name + "/"):
                data_list = line.split("/")
                if data_list[0] == name:
                    data_list.pop(0)
                return data_list
  • Files reviewed: 2/2 changed files
  • Comments generated: 1
  • Review effort level: Lite

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment on lines +11 to +13
def test_cocoapod_tags_return_none_when_only_prefix_matches(monkeypatch):
monkeypatch.setattr("fetchcode.utils.get_text_response", lambda url: "FooBar/9.0\n")
assert get_cocoapod_tags("https://example.com/versions", "Foo") is None
Signed-off-by: Ali Zulfiqar <codewithfourtix@gmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants