[
http://issues.apache.org/jira/browse/MODPYTHON-101?page=comments#action_12360713
]
Graham Dumpleton commented on MODPYTHON-101:
--------------------------------------------
Whoops, to be as precise as possible, instead of the suggested:
if not hlist.silent or object:
it should be:
if not hlist.silent or object is not None:
The only case this wouldn't then pick up is if PythonHandlerModule directive
was used and the target handler attribute was specified, but was None. This
can't be distinguished because resolve_object() returns None when silent is set
and target couldn't be found. We can probably live with that. :-)
> If target handler found but evaluates false, there should still be an error
> if not silent.
> ------------------------------------------------------------------------------------------
>
> Key: MODPYTHON-101
> URL: http://issues.apache.org/jira/browse/MODPYTHON-101
> Project: mod_python
> Type: Bug
> Components: core
> Versions: 3.2, 3.1.4
> Reporter: Graham Dumpleton
>
> If one specifies PythonHandler directive and the target is mistakenly set to
> be something like:
> handler = 0
> handler = None
> handler = False
> handler = []
> handler = {}
> no error is raised.
> As comparison, if one has:
> handler = 1
> you get an error:
> Traceback (most recent call last):
> File
> "/System/Library/Frameworks/Python.framework/Versions/2.3/lib/python2.3/site-packages/mod_python/apache.py",
> line 309, in HandlerDispatch
> result = object(req)
> TypeError: 'int' object is not callable
> This is because if the target in any way evaluates to false, no attempt is
> made to execute it, but at the same time if the silent flag is not set no
> error is raised either.
> In the case of HandlerDispatch in apache.py, the code currently is:
> # find the object
> object = resolve_object(module, object_str,
> arg=req, silent=hlist.silent)
>
> if object:
>
> # call the object
> ....
> elif hlist.silent:
> result = DECLINED
>
> It would make more sense that if hlist.silent is not set, that the object,
> whatever it may be should be called. This would ensure that any error
> response is always generated when it can be.
> Thus, instead of just:
> if object:
> it should really be:
> if not hlist.silent or object:
> In the case of ConnectionDispatch() and FilterDispatch(), because silent is
> fixed to "0" in those cases, there should not even be a check of whether
> object evaluates true, it should just be called regardless.
> Thus instead of:
> if object:
> # call the object
> if config.has_key("PythonEnablePdb"):
> result = pdb.runcall(object, conn)
> else:
> result = object(conn)
> it should just be:
> # call the object:
> if config.has_key("PythonEnablePdb"):
> result = pdb.runcall(object, conn)
> else:
> result = object(conn)
> Indent level of following assertion clause in case of ConnectionDispatch()
> and call to filter.flush() in FilterDispatcher() should also be shifted out
> as well as appropriate.
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
http://www.atlassian.com/software/jira