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