This is the mail archive of the gdb-cvs@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]

gdb and binutils branch master updated. 6ef284bd18c31645eb3ec4e7691a0f07100d6b4e


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "gdb and binutils".

The branch, master has been updated
       via  6ef284bd18c31645eb3ec4e7691a0f07100d6b4e (commit)
      from  270c9937446ca5273caf7fb102bcdba9ed7cff41 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

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

commit 6ef284bd18c31645eb3ec4e7691a0f07100d6b4e
Author: Simon Marchi <simon.marchi@ericsson.com>
Date:   Mon Jun 2 17:10:36 2014 -0400

    PR mi/15806: Fix quoting of async events
    
    Original patch:
    https://sourceware.org/ml/gdb-patches/2014-04/msg00552.html
    
    New in v2:
    * In remote.c:escape_buffer, pass '\\' to fputstrn_unfiltered/printchar to
    make sure backslashes are escaped in remote debug output.
    * Updated function documentation for printchar.
    
    See updated ChangeLog below.
    
    --------------------
    
    The quoting in whatever goes in the event_channel of MI is little bit broken.
    
    Link for the lazy:
      https://sourceware.org/bugzilla/show_bug.cgi?id=15806
    
    Here is an example of a =library-loaded event with an ill-named directory,
    /tmp/how"are\you (the problem is present with every directory on Windows since
    it uses backslashes as a path separator). The result will be the following:
    
    =library-loaded,id="/tmp/how"are\\you/libexpat.so.1",...
    
    The " between 'how' and 'are' should be escaped.
    
    Another bad behavior is double escaping in =breakpoint-created, for example:
    
    =breakpoint-created,bkpt={...,fullname="/tmp/how\\"are\\\\you/test.c",...}
    
    The two backslashes before 'how' should be one and the four before 'you' should
    be two.
    
    The reason for this is that when sending something to an MI console, escaping
    can take place at two different moments (the actual escaping work is always
    done in the printchar function):
    
    1. When generating the content, if ui_out_field_* functions are used. Here,
    fields are automatically quoted with " and properly escaped. At least
    mi_field_string does it, not sure about mi_field_fmt, I need to investigate
    further.
    
    2. When gdb_flush is called, to send the data in the buffer of the console to
    the actual output (stdout). At this point, mi_console_raw_packet takes the
    whole string in the buffer, quotes it, and escapes all occurences of the
    quoting character and backslashes. The event_channel does not specify a quoting
    character, so quotes are not escaped here, only backslashes.
    
    The problem with =library-loaded is that it does use fprintf_unfiltered, which
    doesn't do escaping (so, no #1). When gdb_flush is called, backslashes are
    escaped (#2).
    
    The problem with =breakpoint-created is that it first uses ui_out_field_*
    functions to generate its output, so backslashes and quotes are escaped there
    (#1). backslashes are escaped again in #2, leading to an overdose of
    backslashes.
    
    In retrospect, there is no way escaping can be done reliably in
    mi_console_raw_packet for data that is already formatted, such as
    event_channel. At this point, there is no way to differentiate quotes that
    delimit field values from those that should be escaped. In the case of other MI
    consoles, it is ok since mi_console_raw_packet receives one big string that
    should be quoted and escaped as a whole.
    
    So, first part of the fix: for the MI channels that specify no quoting
    character, no escaping at all should be done in mi_console_raw_packet (that's
    the change in printchar, thanks to Yuanhui Zhang for this). For those channels,
    whoever generates the content is responsible for proper quoting and escaping.
    This will fix the =breakpoint-created kind of problem.
    
    Second part of the fix is to make =library-loaded generate content that is
    properly escaped. For this, we use ui_out_field_* functions, instead of one big
    fprintf_unfiltered. =library-unloaded suffered from the same problem so it is
    modified as well. There might be other events that need fixing too, but that's
    all I found with a quick scan. Those that use fprintf_unfiltered but whose sole
    variable data is a %d are not critical, since it won't generate a " or a \.
    
    Finally, a test has been fixed, as it was expecting an erroneous output.
    Otherwise, all other tests that were previously passing still pass (x86-64
    linux).
    
    gdb/ChangeLog:
    
    2014-06-02  Simon Marchi  <simon.marchi@ericsson.com>
    
    	PR mi/15806
    	* utils.c (printchar): Don't escape at all if quoter is NUL.
    	Update function documentation to clarify effect of parameter
    	QUOTER.
    	* remote.c (escape_buffer): Pass '\\' as the quoter to
    	fputstrn_unfiltered.
    	* mi/mi-interp.c (mi_solib_loaded): Use ui_out_field_* functions to
    	generate the output.
    	(mi_solib_unloaded): Same.
    
    gdb/testsuite/ChangeLog:
    
    2014-06-02  Simon Marchi  <simon.marchi@ericsson.com>
    
    	* gdb.mi/mi-breakpoint-changed.exp (test_insert_delete_modify): Fix
    	erroneous dprintf expected input.

-----------------------------------------------------------------------

Summary of changes:
 gdb/ChangeLog                                  |   12 +++++
 gdb/mi/mi-interp.c                             |   57 +++++++++++++-----------
 gdb/remote.c                                   |    2 +-
 gdb/testsuite/ChangeLog                        |    5 ++
 gdb/testsuite/gdb.mi/mi-breakpoint-changed.exp |    2 +-
 gdb/utils.c                                    |   10 +++-
 6 files changed, 58 insertions(+), 30 deletions(-)


hooks/post-receive
-- 
gdb and binutils


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