Updated: (MODPYTHON-101) If target handler found but evaluates false, there should sti
Web Server forum
Back To The Forum Home!Search!Private Messaging System

Web Server Talk Web Server Talk > Web Servers reviews > Apache Server configuration support > Apache Mod-Python > Updated: (MODPYTHON-101) If target handler found but evaluates false, there should sti




  Last Thread   Next Thread Next
  Show Printable Version Email this Page Subscribe to this Thread      Post New Thread    Post A Reply      

    Updated: (MODPYTHON-101) If target handler found but evaluates false, there should sti  
Graham Dumpleton (JIRA)


View Ip Address Report This Message To A Moderator Edit/Delete Message


 
12-18-05 12:46 PM

[ http://issues.apache.org/jira/brows...ON-101?page=all ]

Graham Dumpleton updated MODPYTHON-101:
---------------------------------------

Description:
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 m
ade to execute it, but at the same time if the silent flag is not set no err
or 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, w
hatever it may be should be called. This would ensure that any error respons
e 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 obj
ect 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() a
nd call to filter.flush() in FilterDispatcher() should also be shifted out a
s well as appropriate.




was:
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 m
ade to execute it, but at the same time if the silent flag is not set no err
or 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, w
hatever it may be should be called. This would ensure that any error respons
e 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 obj
ect 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 should also be shifted out as wel
l.





> If target handler found but evaluates false, there should still be an erro
r 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/pyt
hon2.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 e
rror 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 respo
nse 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 i
s fixed to "0" in those cases, there should not even be a check of whether o
bject 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 cal
l to filter.flush() in FilterDispatcher() should also be shifted out as well as appr
opriate.






[ Post a follow-up to this message ]



    Sponsored Links  




 





   All times are GMT. The time now is 03:10 PM.      Post New Thread    Post A Reply      
  Last Thread   Next Thread Next


Most Popular forums 

Forum Jump:
Rate This Thread:

Forum Rules:
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts
HTML code is OFF
vB code is ON
Smilies are ON
[IMG] code is OFF
 
Medical and Health forum | Computer Games Reviews | Graphics design forum

Back To The Top
Home | Usercp | Faq | Register