Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 3 additions & 2 deletions app/path_params.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,11 @@

def issue_number_search_value(query: str) -> int | None:
"""Return a bounded GitHub issue number from a plain numeric search query."""
if not query.isdigit():
clean = query.removeprefix("#")
if not clean.isdigit():
return None
try:
issue_number = int(query)
issue_number = int(clean)
except ValueError:
return None
return issue_number if issue_number <= SQLITE_INTEGER_MAX else None
Expand Down
10 changes: 10 additions & 0 deletions tests/test_bounty_pages.py
Original file line number Diff line number Diff line change
Expand Up @@ -172,6 +172,16 @@ def test_bounties_page_and_api_search_by_text_and_issue_number(sqlite_url: str)
assert issue_search.status_code == 200
assert [row["issue_number"] for row in issue_search.json()] == [65]

hash_issue_search = client.get("/api/v1/bounties?q=%2365")
assert hash_issue_search.status_code == 200
assert [row["issue_number"] for row in hash_issue_search.json()] == [65]

hash_issue_page = client.get("/bounties?q=%2365")
assert hash_issue_page.status_code == 200
assert "Showing matches for “#65”." in hash_issue_page.text
assert "Internal admin cleanup" in hash_issue_page.text
assert "Improve public bounty discovery" not in hash_issue_page.text

oversized_issue_search = client.get("/api/v1/bounties", params={"q": "9" * 40})
assert oversized_issue_search.status_code == 200
assert oversized_issue_search.json() == []
Expand Down
3 changes: 3 additions & 0 deletions tests/test_path_params.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,12 +20,15 @@ def assert_bad_request(func, *args):

def test_issue_number_search_value_accepts_bounded_numeric_query():
assert issue_number_search_value("340") == 340
assert issue_number_search_value("#340") == 340
assert issue_number_search_value(str(SQLITE_INTEGER_MAX)) == SQLITE_INTEGER_MAX


def test_issue_number_search_value_rejects_non_numeric_or_overflow_query():
assert issue_number_search_value("") is None
assert issue_number_search_value("#") is None
assert issue_number_search_value(" 340") is None
assert issue_number_search_value(" #340") is None
assert issue_number_search_value("340a") is None
assert issue_number_search_value(str(SQLITE_INTEGER_MAX + 1)) is None

Expand Down
Loading