[ 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