You are viewing a plain text version of this content. The canonical link for it is here.
Posted to mod_python-dev@quetz.apache.org by "Graham Dumpleton (JIRA)" <ji...@apache.org> on 2006/03/05 05:54:40 UTC

[jira] Closed: (MODPYTHON-48) psp.PSP doesn't work for a text string

     [ http://issues.apache.org/jira/browse/MODPYTHON-48?page=all ]
     
Graham Dumpleton closed MODPYTHON-48:
-------------------------------------


> psp.PSP doesn't work for a text string
> --------------------------------------
>
>          Key: MODPYTHON-48
>          URL: http://issues.apache.org/jira/browse/MODPYTHON-48
>      Project: mod_python
>         Type: Bug
>     Versions: 3.1.4
>     Reporter: Graham Dumpleton
>      Fix For: 3.2.7
>  Attachments: psp.diff, psp2.diff
>
> The following code doesn't work.
>   from mod_python import apache
>   from mod_python import psp
>   def handler(req):
>        content_file = psp.PSP(req, string='hello world')
>        content_file.run()
>        return apache.OK
> The problems range from typos in the Python code, the Python code
> not actually compiling the parsed string and core dumps in PSP parser
> due to double deletes.
> Issues have been discussed on mailing list. Some of the main posts are:
>   http://www.modpython.org/pipermail/mod_python/2005-April/017932.html
>   http://www.modpython.org/pipermail/mod_python/2005-April/017938.html
>   http://www.modpython.org/pipermail/mod_python/2005-April/017946.html
> Patches are required to lib/python/mod_python/psp.py and src/_pspmodule.c.
> These are include below. An independent check of whether removing explicit
> destruction of the buffer in _pspmodule.c is the correct thing to do should be
> done. Whether "__psp__" is an appropriate second argument to compile() in
> change should be considered.
> *** ../mod_python-3.1.3/lib/python/mod_python/psp.py    Tue Feb 17 06:47:27 2004
> --- lib/python/mod_python/psp.py        Wed Apr 27 11:00:19 2005
> ***************
> *** 111,122 ****
>               self.load_from_file()
>           else:
>   
> !             cached = strcache.get(string)
>               if cached:
>                   self.code = cached
>               else:
> !                 self.code = _psp.parsestring(string)
> !                 strcache.store(string)
>   
>       def cache_get(self, filename, mtime):
>   
> --- 111,124 ----
>               self.load_from_file()
>           else:
>   
> !             cached = mem_scache.get(string)
>               if cached:
>                   self.code = cached
>               else:
> !                 source = _psp.parsestring(string)
> !               code = compile(source, "__psp__", "exec")
> !                 mem_scache.store(string,code)
> !               self.code = code
>   
>       def cache_get(self, filename, mtime):
>   
> ***************
> *** 358,365 ****
>   
>       def get(self, key):
>           if self.cache.has_key(key):
> !             hist, val = self.cache[key]
> !             self.cache[key] = (hits+1, code)
>               return val
>           else:
>               return None
> --- 360,367 ----
>   
>       def get(self, key):
>           if self.cache.has_key(key):
> !             hits, val = self.cache[key]
> !             self.cache[key] = (hits+1, val)
>               return val
>           else:
>               return None
> *** ../mod_python-3.1.3/src/_pspmodule.c        Tue Feb 17 06:47:27 2004
> --- src/_pspmodule.c    Wed Apr 27 10:43:51 2005
> ***************
> *** 146,152 ****
>       bs = yy_scan_string(PyString_AsString(str), scanner);
>       yylex(scanner);
>   
> !     yy_delete_buffer(bs, scanner);
>       yylex_destroy(scanner);
>       
>       psp_string_0(&parser->pycode);
> --- 146,152 ----
>       bs = yy_scan_string(PyString_AsString(str), scanner);
>       yylex(scanner);
>   
> !     /* yy_delete_buffer(bs, scanner); */
>       yylex_destroy(scanner);
>       
>       psp_string_0(&parser->pycode); 

-- 
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