diff --git a/CHANGES.rst b/CHANGES.rst index 3264a25e..9071af1d 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -7,6 +7,7 @@ Unreleased - Require Werkzeug >= 2.3.6. - Use ``flit_core`` instead of ``setuptools`` as build backend. - Refactor how an app's root and instance paths are determined. :issue:`5160` +- Fix passing non-string values to ``url_for``. :issue:`5206` Version 2.3.2 diff --git a/src/flask/app.py b/src/flask/app.py index 3b6b38d8..1298f892 100644 --- a/src/flask/app.py +++ b/src/flask/app.py @@ -1697,6 +1697,8 @@ class Flask(Scaffold): return self.handle_url_build_error(error, endpoint, values) if _anchor is not None: + if not isinstance(_anchor, (str, bytes, bytearray)): + _anchor = str(_anchor) _anchor = _url_quote(_anchor, safe="%!#$&'()*+,/:;=?@") rv = f"{rv}#{_anchor}" diff --git a/tests/test_helpers.py b/tests/test_helpers.py index 077cb432..5b1303fe 100644 --- a/tests/test_helpers.py +++ b/tests/test_helpers.py @@ -106,6 +106,7 @@ class TestUrlFor: return "42" assert flask.url_for("index", _anchor="x y") == "/#x%20y" + assert flask.url_for("index", _anchor=5) == "/#5" def test_url_for_with_scheme(self, app, req_ctx): @app.route("/")