Author: rjollos
Date: Thu Jun 20 23:12:33 2013
New Revision: 1495232

URL: http://svn.apache.org/r1495232
Log:
Fixes #513: Fix HTTP protocol violation on factory misconfiguration. Patch by 
Olemis.

Modified:
    bloodhound/trunk/trac/trac/hooks.py
    bloodhound/trunk/trac/trac/web/main.py

Modified: bloodhound/trunk/trac/trac/hooks.py
URL: 
http://svn.apache.org/viewvc/bloodhound/trunk/trac/trac/hooks.py?rev=1495232&r1=1495231&r2=1495232&view=diff
==============================================================================
--- bloodhound/trunk/trac/trac/hooks.py (original)
+++ bloodhound/trunk/trac/trac/hooks.py Thu Jun 20 23:12:33 2013
@@ -215,7 +215,7 @@ class DefaultBootstrapHandler(BootstrapH
         factory = None
         try:
             factory = request_factory(self.global_env)
-        except AttributeError:
+        except Exception:
             pass
         return factory().create_request(env, environ, start_response) if 
factory \
                 else RequestWithSession(environ, start_response)

Modified: bloodhound/trunk/trac/trac/web/main.py
URL: 
http://svn.apache.org/viewvc/bloodhound/trunk/trac/trac/web/main.py?rev=1495232&r1=1495231&r2=1495232&view=diff
==============================================================================
--- bloodhound/trunk/trac/trac/web/main.py (original)
+++ bloodhound/trunk/trac/trac/web/main.py Thu Jun 20 23:12:33 2013
@@ -392,7 +392,7 @@ def dispatch_request(environ, start_resp
             except Exception, e:
                 log = environ.get('wsgi.errors')
                 if log:
-                    log.write("[FAIL] [Trac] entry point '%s'. Reason %s" %
+                    log.write("[FAIL] [Trac] Entry point '%s'. Reason %s" %
                               (bootstrap_ep, repr(exception_to_unicode(e))))
     if bootstrap is None:
         from trac.hooks import default_bootstrap_handler
@@ -405,8 +405,11 @@ def dispatch_request(environ, start_resp
         env = bootstrap.open_environment(environ, start_response)
     except RequestDone:
         return []
-    except EnvironmentError:
-        raise
+    except EnvironmentError, e:
+        if e.__class__ is EnvironmentError:
+            raise
+        else:
+            env_error = e
     except Exception, e:
         env_error = e
     else:
@@ -436,8 +439,19 @@ def dispatch_request(environ, start_resp
 
     run_once = environ['wsgi.run_once']
 
-    req = bootstrap.create_request(env, environ, start_response) \
-            if env is not None else Request(environ, start_response)
+    req = None
+    if env_error is None:
+        try:
+            req = bootstrap.create_request(env, environ, start_response) \
+                if env is not None else Request(environ, start_response)
+        except Exception:
+            log = environ.get('wsgi.errors')
+            if log:
+                log.write("[FAIL] [Trac] Entry point '%s' "
+                          "Method 'create_request' Reason %s" %
+                          (bootstrap_ep, repr(exception_to_unicode(e))))
+    if req is None:
+        req = RequestWithSession(environ, start_response)
     translation.make_activable(lambda: req.locale, env.path if env else None)
     try:
         return _dispatch_request(req, env, env_error)


Reply via email to