This is the mail archive of the gdb-prs@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug breakpoints/22569] Internal error when using "break -source test.c main"


https://sourceware.org/bugzilla/show_bug.cgi?id=22569

--- Comment #4 from cvs-commit at gcc dot gnu.org <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Keith Seitz <kseitz@sourceware.org>:

https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=fa6eb693cf43b427474b1d96ce093f6ea9e5da6a

commit fa6eb693cf43b427474b1d96ce093f6ea9e5da6a
Author: Keith Seitz <keiths@redhat.com>
Date:   Thu Dec 7 12:59:07 2017 -0800

    Validate explicit locations with early termination

    breakpoints/22569 involves an internal error generated by the rather
    innocent looking command:

    (gdb) break -source test.cpp main
    .../linespec.c:3302: internal-error: void decode_line_full(...):
    Assertion `result.size () == 1 || canonical->pre_expanded' failed.
    A problem internal to GDB has been detected,
    further debugging may prove unreliable.
    Quit this debugging session? (y or n)

    The input string is tokenized into "-source", "test.cpp", and "main"
    (input parsing breaks on whitespace). create_breakpoint is then called with
    the explicit location (containing only the source file name) and "main" as
    the extra_string argument.

    No SaLs are created for this underspecified explicit location, and the
    "result.size () == 1" evaluates false (as does the pre_expanded condition).
    This triggers the assertion.

    Normally string_to_explicit_location validates the input string.  However,
    the presence of the string "main" causes the parser to exit early:

       802        else
       803          {
       804            /* End of the explicit location specification.
       805               Stop parsing and return whatever explicit location was
       806               parsed.  */
       807            *argp = start;
       808            return location;
       809          }

    This bypasses the validation that is done a few lines down in this function
    which would have emitted the expected error.  This patch fixes that.

    Additionally, this patch also fixes an inconsistency with error reporting
    in this use case:

    (gdb) b -source foo
    Source filename requires function, label, or line offset.
    (gdb) b -source foo main
    No source file named foo.

    These two commands should have elicited the same error message.

    gdb/ChangeLog:

        PR breakpoints/22569
        * location.c (string_to_explicit_location): When terminating
        parsing early, break out of enclosing loop instead of returning.

    gdb/testsuite/ChangeLog:

        PR breakpoints/22569
        * gdb.linespec/ls-errs.exp: Change expected result of "break
        -source this file has spaces.c -line 3".
        Check that an explicit source file followed by whitespace is
        identified as an invalid explicit location.

-- 
You are receiving this mail because:
You are on the CC list for the bug.

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]