Skip to content

Long line with no tokens causes a bad program #14

Description

@hoglet67

The longest line that doesn't fail:

>NEW
>1ABCDEFGHIABCDEFGHIABCDEFGHIABCDEFGHIABCDEFGHIABCDEFGHIABCDEFGHIABCDEFGHIABCDEFGHIABCDEFGHIABCDEFGHIABCDEFGHIABCDEFGHIABCDEFGHIABCDEFGHIABCDEFGHIABCDEFGHIABCDEFGHIABCDEFGHIABCDEFGHIABCDEFGHIABCDEFGHIABCDEFGHIABCDEFGHIABCDEFGHI1ABCDEFGHIABCDEFGHIABCDEFG
10c00  ff 01 00 41 42 43 44 45 46 47 48 49 41 42 43 44  ...ABCDEFGHIABCD
10c10  45 46 47 48 49 41 42 43 44 45 46 47 48 49 41 42  EFGHIABCDEFGHIAB
10c20  43 44 45 46 47 48 49 41 42 43 44 45 46 47 48 49  CDEFGHIABCDEFGHI
10c30  41 42 43 44 45 46 47 48 49 41 42 43 44 45 46 47  ABCDEFGHIABCDEFG
10c40  48 49 41 42 43 44 45 46 47 48 49 41 42 43 44 45  HIABCDEFGHIABCDE
10c50  46 47 48 49 41 42 43 44 45 46 47 48 49 41 42 43  FGHIABCDEFGHIABC
10c60  44 45 46 47 48 49 41 42 43 44 45 46 47 48 49 41  DEFGHIABCDEFGHIA
10c70  42 43 44 45 46 47 48 49 41 42 43 44 45 46 47 48  BCDEFGHIABCDEFGH
10c80  49 41 42 43 44 45 46 47 48 49 41 42 43 44 45 46  IABCDEFGHIABCDEF
10c90  47 48 49 41 42 43 44 45 46 47 48 49 41 42 43 44  GHIABCDEFGHIABCD
10ca0  45 46 47 48 49 41 42 43 44 45 46 47 48 49 41 42  EFGHIABCDEFGHIAB
10cb0  43 44 45 46 47 48 49 41 42 43 44 45 46 47 48 49  CDEFGHIABCDEFGHI
10cc0  41 42 43 44 45 46 47 48 49 41 42 43 44 45 46 47  ABCDEFGHIABCDEFG
10cd0  48 49 41 42 43 44 45 46 47 48 49 41 42 43 44 45  HIABCDEFGHIABCDE
10ce0  46 47 48 49 31 41 42 43 44 45 46 47 48 49 41 42  FGHI1ABCDEFGHIAB
10cf0  43 44 45 46 47 48 49 41 42 43 44 45 46 47 0d 00  CDEFGHIABCDEFG..

One more character and you end up with an empty program:

>NEW
>1ABCDEFGHIABCDEFGHIABCDEFGHIABCDEFGHIABCDEFGHIABCDEFGHIABCDEFGHIABCDEFGHIABCDEFGHIABCDEFGHIABCDEFGHIABCDEFGHIABCDEFGHIABCDEFGHIABCDEFGHIABCDEFGHIABCDEFGHIABCDEFGHIABCDEFGHIABCDEFGHIABCDEFGHIABCDEFGHIABCDEFGHIABCDEFGHIABCDEFGHI1ABCDEFGHIABCDEFGHIABCDEFGH
10c00  00 ff ff 41 42 43 44 45 46 47 48 49 41 42 43 44  ...ABCDEFGHIABCD
10c10  45 46 47 48 49 41 42 43 44 45 46 47 48 49 41 42  EFGHIABCDEFGHIAB
10c20  43 44 45 46 47 48 49 41 42 43 44 45 46 47 48 49  CDEFGHIABCDEFGHI
10c30  41 42 43 44 45 46 47 48 49 41 42 43 44 45 46 47  ABCDEFGHIABCDEFG
10c40  48 49 41 42 43 44 45 46 47 48 49 41 42 43 44 45  HIABCDEFGHIABCDE
10c50  46 47 48 49 41 42 43 44 45 46 47 48 49 41 42 43  FGHIABCDEFGHIABC
10c60  44 45 46 47 48 49 41 42 43 44 45 46 47 48 49 41  DEFGHIABCDEFGHIA
10c70  42 43 44 45 46 47 48 49 41 42 43 44 45 46 47 48  BCDEFGHIABCDEFGH
10c80  49 41 42 43 44 45 46 47 48 49 41 42 43 44 45 46  IABCDEFGHIABCDEF
10c90  47 48 49 41 42 43 44 45 46 47 48 49 41 42 43 44  GHIABCDEFGHIABCD
10ca0  45 46 47 48 49 41 42 43 44 45 46 47 48 49 41 42  EFGHIABCDEFGHIAB
10cb0  43 44 45 46 47 48 49 41 42 43 44 45 46 47 48 49  CDEFGHIABCDEFGHI
10cc0  41 42 43 44 45 46 47 48 49 41 42 43 44 45 46 47  ABCDEFGHIABCDEFG
10cd0  48 49 41 42 43 44 45 46 47 48 49 41 42 43 44 45  HIABCDEFGHIABCDE
10ce0  46 47 48 49 31 41 42 43 44 45 46 47 48 49 41 42  FGHI1ABCDEFGHIAB
10cf0  43 44 45 46 47 48 49 41 42 43 44 45 46 47 48 0d  CDEFGHIABCDEFGH.

One more character and you end up with bad program:

>NEW
>1ABCDEFGHIABCDEFGHIABCDEFGHIABCDEFGHIABCDEFGHIABCDEFGHIABCDEFGHIABCDEFGHIABCDEFGHIABCDEFGHIABCDEFGHIABCDEFGHIABCDEFGHIABCDEFGHIABCDEFGHIABCDEFGHIABCDEFGHIABCDEFGHIABCDEFGHIABCDEFGHIABCDEFGHIABCDEFGHIABCDEFGHIABCDEFGHIABCDEFGHI1ABCDEFGHIABCDEFGHIABCDEFGHI

Bad program
>
10c00  01 01 00 41 42 43 44 45 46 47 48 49 41 42 43 44  ...ABCDEFGHIABCD
10c10  45 46 47 48 49 41 42 43 44 45 46 47 48 49 41 42  EFGHIABCDEFGHIAB
10c20  43 44 45 46 47 48 49 41 42 43 44 45 46 47 48 49  CDEFGHIABCDEFGHI
10c30  41 42 43 44 45 46 47 48 49 41 42 43 44 45 46 47  ABCDEFGHIABCDEFG
10c40  48 49 41 42 43 44 45 46 47 48 49 41 42 43 44 45  HIABCDEFGHIABCDE
10c50  46 47 48 49 41 42 43 44 45 46 47 48 49 41 42 43  FGHIABCDEFGHIABC
10c60  44 45 46 47 48 49 41 42 43 44 45 46 47 48 49 41  DEFGHIABCDEFGHIA
10c70  42 43 44 45 46 47 48 49 41 42 43 44 45 46 47 48  BCDEFGHIABCDEFGH
10c80  49 41 42 43 44 45 46 47 48 49 41 42 43 44 45 46  IABCDEFGHIABCDEF
10c90  47 48 49 41 42 43 44 45 46 47 48 49 41 42 43 44  GHIABCDEFGHIABCD
10ca0  45 46 47 48 49 41 42 43 44 45 46 47 48 49 41 42  EFGHIABCDEFGHIAB
10cb0  43 44 45 46 47 48 49 41 42 43 44 45 46 47 48 49  CDEFGHIABCDEFGHI
10cc0  41 42 43 44 45 46 47 48 49 41 42 43 44 45 46 47  ABCDEFGHIABCDEFG
10cd0  48 49 41 42 43 44 45 46 47 48 49 41 42 43 44 45  HIABCDEFGHIABCDE
10ce0  46 47 48 49 31 41 42 43 44 45 46 47 48 49 41 42  FGHI1ABCDEFGHIAB
10cf0  43 44 45 46 47 48 49 41 42 43 44 45 46 47 48 49  CDEFGHIABCDEFGHI

It seems this is an unusal case of no tokens, so with the addition of the line number (3 bytes), the line actually expands when it is stored in tokenized form.

Shrinking the input buffer by two bytes would resolve this, but it may also prevent you entering a valid long line with tokens.

I can reproduce this on Richard's BBCSDL Linux Console Build:

>NEW
>10 REM
>LIST
   10 REM
>1ABCDEFGHIABCDEFGHIABCDEFGHIABCDEFGHIABCDEFGHIABCDEFGHIABCDEFGHIABCDEFGHIABCDEFGHIABCDEFGHIABCDEFGHIABCDEFGHIABCDEFGHIABCDEFGHIABCDEFGHIABCDEF
GHIABCDEFGHIABCDEFGHIABCDEFGHIABCDEFGHIABCDEFGHIABCDEFGHIABCDEFGHIABCDEFGHIABCDEFGHI1ABCDEFGHIABCDEFGHIABCDEFGHI

Bad program
>

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions