DJango invalid hex encoding on search

Hi guys,

Im currently working on a DJango search with multiple query_params, since im using Sentry i found out that sometimes there’s an issue triggered when you search for example something with percentages:

“100% natural” “100% unique” “50% blah blah blah”

Sentry: Unhandled Invalid hex encoding in query string.

This is marked in the oauth lib

if INVALID_HEX_PATTERN.search(query):
        raise ValueError('Invalid hex encoding in query string.')

The current search code allows to pass any query_param like this:

re_path(r"^search/?$", search_system, name="search")

And inside the view i do have this:

query = request.query_params.get("query")
query = query.replace("%20", " ") if query else None

i tried to replace the %20 for an space, but sometimes it happens and sometimes it doesn’t so it happens randomly, i don’t know if im doing something wrong, or actually the question would be:

is there anything i could do to avoid triggering this alert without doing anything in sentry? for example like cleaning up the data like a form

Thanks in advance.

To avoid this issue i tried to set the query replace("%20", " "), my best guess is that the error is triggered when you have the “percentage + space” next to each other so the url looks like

search/100%25%20natural which in python should be like “100% natural” but as i said sometimes it triggers and sometimes it doesn’t.

I already tried the approach with this:

from urllib.parse import unquote
query = request.query_params.get("query")
query = unquote(query) if query else None

But it still fails, i get the sentry with invalid hex encoding, is there something i can do with this query parameter? Thanks in advance.