diff options
-rw-r--r-- | gdb/event-top.c | 8 | ||||
-rw-r--r-- | gdb/testsuite/gdb.base/paste-newline.exp | 45 |
2 files changed, 53 insertions, 0 deletions
diff --git a/gdb/event-top.c b/gdb/event-top.c index 9a02ac6..f0c07ba 100644 --- a/gdb/event-top.c +++ b/gdb/event-top.c @@ -251,6 +251,14 @@ gdb_rl_callback_handler (char *rl) noexcept static struct gdb_exception gdb_rl_expt; struct ui *ui = current_ui; + /* In bracketed paste mode, pasting a complete line can result in a + literal newline appearing at the end of LINE. However, we never + want this in gdb. */ + size_t len = strlen (rl); + while (len > 0 && (rl[len - 1] == '\r' || rl[len - 1] == '\n')) + --len; + rl[len] = '\0'; + try { /* Ensure the exception is reset on each call. */ diff --git a/gdb/testsuite/gdb.base/paste-newline.exp b/gdb/testsuite/gdb.base/paste-newline.exp new file mode 100644 index 0000000..dabceac --- /dev/null +++ b/gdb/testsuite/gdb.base/paste-newline.exp @@ -0,0 +1,45 @@ +# Copyright (C) 2024 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# This test script checks that a trailing newline is stripped from a +# bracketed paste. + +save_vars { env(TERM) env(INPUTRC) } { + setenv TERM ansi + + # Create an inputrc file that enables bracketed paste mode. + set inputrc [standard_output_file inputrc] + set fd [open "$inputrc" w] + puts $fd "set enable-bracketed-paste on" + close $fd + + setenv INPUTRC "$inputrc" + + clean_restart + + send_gdb "\033\[200~echo hello\n\033\[201~\n" + + gdb_test_multiple "" "newline removed from paste" { + -re ".*echo hello.*hello\[^\n\]*$gdb_prompt $" { + # Some escape sequences are expected between echo's output + # and the prompt (e.g. the paste-bracketing toggle + # sequences) but _newlines_ are not. + pass $gdb_test_name + } + -re ".*echo hello.*hello.*\r\n.*$gdb_prompt $" { + fail $gdb_test_name + } + } +} |