[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