From 2ae36375fc48fae0024ffbd3e7f6bdd0604ca4fc Mon Sep 17 00:00:00 2001
From: Malcolm Tredinnick <malcolm.tredinnick@gmail.com>
Date: Tue, 7 Oct 2008 10:39:16 +0000
Subject: [PATCH] Fixed #9224 -- Prevent a crash when certain query strings are
 sent using modpython.

git-svn-id: http://code.djangoproject.com/svn/django/trunk@9189 bcc190cf-cafb-0310-a4f2-bffc1f526a37
---
 django/core/handlers/modpython.py | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/django/core/handlers/modpython.py b/django/core/handlers/modpython.py
index d1fdf5259d..c89f202c77 100644
--- a/django/core/handlers/modpython.py
+++ b/django/core/handlers/modpython.py
@@ -6,7 +6,7 @@ from django.core import signals
 from django.core.handlers.base import BaseHandler
 from django.core.urlresolvers import set_script_prefix
 from django.utils import datastructures
-from django.utils.encoding import force_unicode, smart_str
+from django.utils.encoding import force_unicode, smart_str, iri_to_uri
 
 # NOTE: do *not* import settings (or any module which eventually imports
 # settings) until after ModPythonHandler has been called; otherwise os.environ
@@ -64,7 +64,9 @@ class ModPythonRequest(http.HttpRequest):
                           unicode(cookies), unicode(meta)))
 
     def get_full_path(self):
-        return '%s%s' % (self.path, self._req.args and ('?' + self._req.args) or '')
+        # RFC 3986 requires self._req.args to be in the ASCII range, but this
+        # doesn't always happen, so rather than crash, we defensively encode it.
+        return '%s%s' % (self.path, self._req.args and ('?' + iri_to_uri(self._req.args)) or '')
 
     def is_secure(self):
         try: