[Python-Dev] Fix for frame_setlineno() in frameobject.c function
Benjamin Peterson
musiccomposition at gmail.com
Fri Dec 5 13:51:33 CET 2008
Hi,
Please post this on the issue tracker. http://bugs.python.org
On Fri, Dec 5, 2008 at 4:42 AM, <Fabien.Bouleau at ses-engineering.com> wrote:
> Hello,
>
> This concerns a known bug in the frame_setlineno() function for Python
> 2.5.x and 2.6.x (maybe in earlier version too). It is not possible to use
> this function when the address or line offset are greater than 127. The
> problem comes from the lnotab variable which is typed char*, therefore
> implicitely signed char*. Any value above 127 becomes a negative number.
>
> The fix is very simple (applied on the Python 2.6.1 version of the source
> code):
>
> --- frameobject.c Thu Oct 02 19:39:50 2008
> +++ frameobject_fixed.c Fri Dec 05 11:27:42 2008
> @@ -119,8 +119,8 @@
> line = f->f_code->co_firstlineno;
> new_lasti = -1;
> for (offset = 0; offset < lnotab_len; offset += 2) {
> - addr += lnotab[offset];
> - line += lnotab[offset+1];
> + addr += ((unsigned char*)lnotab)[offset];
> + line += ((unsigned char*)lnotab)[offset+1];
> if (line >= new_lineno) {
> new_lasti = addr;
> new_lineno = line;
>
--
Cheers,
Benjamin Peterson
"There's nothing quite as beautiful as an oboe... except a chicken
stuck in a vacuum cleaner."
More information about the Python-Dev
mailing list