From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 4066 invoked by alias); 18 Jul 2011 19:01:47 -0000 Received: (qmail 4057 invoked by uid 22791); 18 Jul 2011 19:01:46 -0000 X-SWARE-Spam-Status: No, hits=-2.4 required=5.0 tests=AWL,BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,RCVD_IN_DNSWL_LOW,T_TO_NO_BRKTS_FREEMAIL X-Spam-Check-By: sourceware.org Received: from mail-ey0-f174.google.com (HELO mail-ey0-f174.google.com) (209.85.215.174) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Mon, 18 Jul 2011 19:01:31 +0000 Received: by eyx24 with SMTP id 24so2318444eyx.5 for ; Mon, 18 Jul 2011 12:01:30 -0700 (PDT) MIME-Version: 1.0 Received: by 10.213.13.136 with SMTP id c8mr2402673eba.17.1311015690259; Mon, 18 Jul 2011 12:01:30 -0700 (PDT) Received: by 10.213.22.195 with HTTP; Mon, 18 Jul 2011 12:01:30 -0700 (PDT) In-Reply-To: References: <834o2my2uj.fsf@gnu.org> Date: Mon, 18 Jul 2011 20:15:00 -0000 Message-ID: Subject: Re: [PATCH] gdb output pipelining to shell From: Abhijit Halder To: gdb-patches@sourceware.org Content-Type: multipart/mixed; boundary=0015174c14da834cfe04a85ca0ec X-IsSubscribed: yes Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2011-07/txt/msg00431.txt.bz2 --0015174c14da834cfe04a85ca0ec Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Content-length: 4085 Since I was overwriting the braces by space character, this could essentially change a valid gdb command having braces after pipe. Here is the example: (gdb) p argc | {int} &argc I have modified the patch to defer the any overwrite (and essentially the modification) of actual input string for very last moment when the a sub-string of a given input in gdb prompt is qualified to be in a valid format of shell command. I am re-submitting the patch for review and comments with the necessary corrections in place. Please do comment on the changes. top.c | 77 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++= ++++- ui-file.c | 15 ++++++++++++ ui-file.h | 3 ++ 3 files changed, 94 insertions(+), 1 deletion(-) Regards, Abhijit Halder On Mon, Jul 18, 2011 at 11:31 PM, Abhijit Halder wrote: > Please don't consider this patch. This has a conflict with following > syntax of of > (gdb) p var | {type} address > > On Sat, Jul 16, 2011 at 11:35 PM, Abhijit Halder > wrote: >> A small correction. Re-submitting the patch. The earlier patch was not >> able to handle below situation: >> (gdb) p '|' | { less } >> >> On Sat, Jul 16, 2011 at 3:38 PM, Abhijit Halder >> wrote: >>> On Sat, Jul 16, 2011 at 3:17 PM, Eli Zaretskii wrote: >>>>> Date: Sat, 16 Jul 2011 14:12:35 +0530 >>>>> From: Abhijit Halder >>>>> >>>>> I have implemented a feature which will allow one to pass the output >>>>> of any gdb command to the shell for further processing. >>>> >>>> Thanks. >>>> >>>> If this is accepted, we will need a corresponding addition to the >>>> manual. >>>> >>>>> + =A0 =A0 =A0for (cpos =3D spos; (cpos =3D memchr (cpos, '"', (sh_cmd= -cpos))) !=3D NULL; cpos++) >>>>> + =A0 =A0 =A0 =A0quote_cnt++; >>>>> + =A0 =A0 =A0spos =3D (sh_cmd + 1); >>>>> + =A0 =A0 =A0if ((quote_cnt % 2) =3D=3D 0 || (sh_cmd =3D strchr (spos= , '|')) =3D=3D NULL) >>>>> + =A0 =A0 =A0 =A0break; >>>> >>>> I'm not sure I understand this (comments would be helpful). =A0Are you >>>> assuming that quote characters `"' in shell commands cannot be >>>> escaped, e.g. with a backslash? =A0And what about quoting with a single >>>> quote character ("'")? >>>> >>> Any pipe ('|' character), not within double quote will be considered >>> as either a bitwise-OR operator or a pipe between gdb and shell. >>> String after pipe (not within double quote) will be considered as >>> shell command if (and only if) it is encapsulated within opening and >>> closing braces ('{' and '}') . The shell command can surely contain >>> double quote, even braces. There is no validation done for shell >>> command. >>> >>>>> + =A0 =A0if (*cpos !=3D '{') >>>>> + =A0 =A0 =A0return NULL; >>>>> + >>>>> + =A0 =A0*cpos =3D ' '; >>>>> + >>>>> + =A0 =A0cpos =3D epos; >>>>> + =A0 =A0while (isspace(*cpos)) >>>>> + =A0 =A0 =A0cpos--; >>>>> + >>>>> + =A0 =A0if (*cpos !=3D '}') >>>>> + =A0 =A0 =A0return NULL; >>>> >>>> What is this magic about {...} that you are removing? =A0Again, commen= ts >>>> could help. >>>> >>> Here I am removing the braces from the shell command. An example will >>> help in understanding this: >>> (gdb) thread apply all bt | { grep "foo" } >>> This will be a valid command. { grep "foo" } will be considered as >>> shell command and we need to erase the braces part of it to make it a >>> valid shell command. >>>>> + >>>>> + =A0 =A0*cpos =3D ' '; >>>>> + =A0 =A0} >>>>> + >>>>> + =A0if (sh_cmd) >>>>> + =A0 =A0*sh_cmd++ =3D '\0'; >>>>> + >>>>> + =A0return sh_cmd; >>>> >>>> This butchers the string passed to execute_command. =A0Are you sure all >>>> the callers of execute_command can safely deal with that? =A0What if t= he >>>> string is a constant string, for example? >>>> >>> The new code path will be executed only when one will enter a command >>> containing pipeline between gdb and shell. In that case the string >>> passed to execute_command must not be a constant string (since it is >>> user input from gdb prompt). Hence we are safe. >>> >> > --0015174c14da834cfe04a85ca0ec Content-Type: text/x-patch; charset=US-ASCII; name="gdb-shell-integration-correction.patch" Content-Disposition: attachment; filename="gdb-shell-integration-correction.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_gq9sq7hv0 Content-length: 4803 ZGlmZiAtcnVwIHNyYy8vZ2RiL3RvcC5jIGRzdC8vZ2RiL3RvcC5jCi0tLSBz cmMvL2dkYi90b3AuYwkyMDExLTA2LTI4IDAwOjUxOjUwLjAwMDAwMDAwMCAr MDUzMAorKysgZHN0Ly9nZGIvdG9wLmMJMjAxMS0wNy0xOSAwMDoxMDo1MS42 MjMxNDQ3MDIgKzA1MzAKQEAgLTQ4LDYgKzQ4LDcgQEAKICNpbmNsdWRlICJl dmVudC1sb29wLmgiCiAjaW5jbHVkZSAiZ2RidGhyZWFkLmgiCiAjaW5jbHVk ZSAicHl0aG9uL3B5dGhvbi5oIgorI2luY2x1ZGUgInVpLWZpbGUuaCIKIAog LyogcmVhZGxpbmUgaW5jbHVkZSBmaWxlcy4gICovCiAjaW5jbHVkZSAicmVh ZGxpbmUvcmVhZGxpbmUuaCIKQEAgLTM1OCw2ICszNTksNzEgQEAgcHJlcGFy ZV9leGVjdXRlX2NvbW1hbmQgKHZvaWQpCiAgIHJldHVybiBjbGVhbnVwOwog fQogCitjaGFyICoKK3BhcnNlX2Zvcl9zaGVsbF9jb21tYW5kIChjaGFyICpw KQoreworICBjaGFyICpzaF9jbWQsICpjcG9zLCAqc3BvcywgKmVwb3M7Cisg IGludCBxdW90ZV9jbnQgPSAwOworCisgIGlmICgoc2hfY21kID0gc3RyY2hy IChwLCAnfCcpKSAhPSBOVUxMKQorICAgIHsKKyAgICAgIHNwb3MgPSBwOwor ICAgICAgZXBvcyA9IHAgKyBzdHJsZW4gKHApIC0gMTsKKworICAgICAgZm9y ICg7OykKKyAgICB7CisgICAgICBmb3IgKGNwb3MgPSBzcG9zOyAoY3BvcyA9 IG1lbWNociAoY3BvcywgJyInLCAoc2hfY21kLWNwb3MpKSkgIT0gTlVMTDsg Y3BvcysrKQorICAgICAgICBxdW90ZV9jbnQrKzsKKyAgICAgIHNwb3MgPSAo c2hfY21kICsgMSk7CisgICAgICBpZiAoKHF1b3RlX2NudCAlIDIpID09IDAg fHwgKHNoX2NtZCA9IHN0cmNociAoc3BvcywgJ3wnKSkgPT0gTlVMTCkKKyAg ICAgICAgYnJlYWs7CisgICAgfQorCisgICAgaWYgKHNoX2NtZCA9PSBOVUxM KQorICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBjcG9zID0gc3BvczsKKyAg ICB3aGlsZSAoaXNzcGFjZSgqY3BvcykpCisgICAgICBjcG9zKys7CisKKyAg ICBpZiAoKmNwb3MgIT0gJ3snKQorICAgICAgcmV0dXJuIHBhcnNlX2Zvcl9z aGVsbF9jb21tYW5kIChjcG9zKTsKKworICAgIHNwb3MgPSBjcG9zOworCisg ICAgY3BvcyA9IGVwb3M7CisgICAgd2hpbGUgKGlzc3BhY2UoKmNwb3MpKQor ICAgICAgY3Bvcy0tOworCisgICAgaWYgKCpjcG9zICE9ICd9JykKKyAgICAg IHJldHVybiBwYXJzZV9mb3Jfc2hlbGxfY29tbWFuZCAoY3Bvcyk7CisKKyAg ICBlcG9zID0gY3BvczsKKyAgICB9CisKKyAgaWYgKHNoX2NtZCkKKyAgICB7 CisgICAgICAqc3BvcyA9ICplcG9zID0gJyAnOworICAgICAgKnNoX2NtZCsr ID0gJ1wwJzsKKyAgICB9CisKKyAgcmV0dXJuIHNoX2NtZDsKK30KKworLyog UnVuIGV4ZWN1dGVfY29tbWFuZCBmb3IgUCBhbmQgRlJPTV9UVFkuIFdyaXRl IG91dHB1dCBpbiBwaXBlLCAKKyAgIGRvIG5vdCBkaXNwbGF5IGl0IHRvIHRo ZSBzY3JlZW4uICAqLworCit2b2lkCitleGVjdXRlX2NvbW1hbmRfdG9fcGlw ZSAoY2hhciAqcCwgaW50IGZyb21fdHR5LCBGSUxFICpwaXBlKQoreworICBG SUxFICpmaWxlOworCisgIGZpbGUgPSBnZGJfbW9kaWZ5X2lvIChnZGJfc3Rk b3V0LCBwaXBlKTsKKyAgZXhlY3V0ZV9jb21tYW5kIChwLCBmcm9tX3R0eSk7 CisgIHBpcGUgPSBnZGJfbW9kaWZ5X2lvIChnZGJfc3Rkb3V0LCBmaWxlKTsK KyAgcGNsb3NlIChwaXBlKTsKK30KKwogLyogRXhlY3V0ZSB0aGUgbGluZSBQ IGFzIGEgY29tbWFuZCwgaW4gdGhlIGN1cnJlbnQgdXNlciBjb250ZXh0Lgog ICAgUGFzcyBGUk9NX1RUWSBhcyBzZWNvbmQgYXJndW1lbnQgdG8gdGhlIGRl ZmluaW5nIGZ1bmN0aW9uLiAgKi8KIApAQCAtMzY4LDcgKzQzNCwxNiBAQCBl eGVjdXRlX2NvbW1hbmQgKGNoYXIgKnAsIGludCBmcm9tX3R0eSkKICAgc3Ry dWN0IGNtZF9saXN0X2VsZW1lbnQgKmM7CiAgIGVudW0gbGFuZ3VhZ2UgZmxh bmc7CiAgIHN0YXRpYyBpbnQgd2FybmVkID0gMDsKLSAgY2hhciAqbGluZTsK KyAgY2hhciAqbGluZSwgKnNoX2NtZDsKKworICBpZiAoKHNoX2NtZCA9IHBh cnNlX2Zvcl9zaGVsbF9jb21tYW5kIChwKSkgIT0gTlVMTCkgCisgICAgewor ICAgICAgRklMRSAqcGlwZTsKKworICAgICAgcGlwZSA9IHBvcGVuIChzaF9j bWQsICJ3Iik7CisgICAgICBleGVjdXRlX2NvbW1hbmRfdG9fcGlwZSAocCwg ZnJvbV90dHksIHBpcGUpOworICAgICAgcmV0dXJuOworICAgIH0KIAogICBj bGVhbnVwID0gcHJlcGFyZV9leGVjdXRlX2NvbW1hbmQgKCk7CiAKZGlmZiAt cnVwIHNyYy8vZ2RiL3VpLWZpbGUuYyBkc3QvL2dkYi91aS1maWxlLmMKLS0t IHNyYy8vZ2RiL3VpLWZpbGUuYwkyMDExLTA1LTE0IDExOjE0OjM2LjAwMDAw MDAwMCArMDUzMAorKysgZHN0Ly9nZGIvdWktZmlsZS5jCTIwMTEtMDctMTUg MTM6NDk6MzQuOTk5OTEwMzMyICswNTMwCkBAIC02MTcsNiArNjE3LDIxIEBA IHN0cnVjdCB1aV9maWxlICoKIHN0ZGlvX2ZpbGVvcGVuIChGSUxFICpmaWxl KQogewogICByZXR1cm4gc3RkaW9fZmlsZV9uZXcgKGZpbGUsIDApOworCit9 CisKK0ZJTEUgKgorZ2RiX21vZGlmeV9pbyAoc3RydWN0IHVpX2ZpbGUgKmZp bGUsIEZJTEUgKmlvc3RyZWFtX25ldykKK3sKKyAgRklMRSAqaW9zdHJlYW1f b2xkOworICBzdHJ1Y3Qgc3RkaW9fZmlsZSAqc3RkaW8gPSB1aV9maWxlX2Rh dGEgKGZpbGUpOworCisgIGlmIChzdGRpby0+bWFnaWMgIT0gJnN0ZGlvX2Zp bGVfbWFnaWMpCisgICAgaW50ZXJuYWxfZXJyb3IgKF9fRklMRV9fLCBfX0xJ TkVfXywKKwkJICAgIF8oImdkYl9tb2RpZnlfaW86IGJhZCBtYWdpYyBudW1i ZXIiKSk7CisgIGlvc3RyZWFtX29sZCA9IHN0ZGlvLT5maWxlOworICBzdGRp by0+ZmlsZSA9IGlvc3RyZWFtX25ldzsKKyAgcmV0dXJuIGlvc3RyZWFtX29s ZDsKIH0KIAogc3RydWN0IHVpX2ZpbGUgKgpkaWZmIC1ydXAgc3JjLy9nZGIv dWktZmlsZS5oIGRzdC8vZ2RiL3VpLWZpbGUuaAotLS0gc3JjLy9nZGIvdWkt ZmlsZS5oCTIwMTEtMDUtMTMgMjI6NTg6MjAuMDAwMDAwMDAwICswNTMwCisr KyBkc3QvL2dkYi91aS1maWxlLmgJMjAxMS0wNy0xNSAxMzo0ODo1NC42MDM5 MTIxOTkgKzA1MzAKQEAgLTEyNiw2ICsxMjYsOSBAQCBleHRlcm4gc3RydWN0 IHVpX2ZpbGUgKnN0ZGlvX2ZpbGVvcGVuIChGCiAvKiBPcGVuIE5BTUUgcmV0 dXJuaW5nIGFuIFNURElPIGJhc2VkIFVJX0ZJTEUuICAqLwogZXh0ZXJuIHN0 cnVjdCB1aV9maWxlICpnZGJfZm9wZW4gKGNoYXIgKm5hbWUsIGNoYXIgKm1v ZGUpOwogCisvKiBNb2RpZnkgdGhlIGZpbGUgcG9pbnRlciBvZiBhbiBTVERJ TyBiYXNlZCBVSV9GSUxFLiAqLworRklMRSAqZ2RiX21vZGlmeV9pbyAoc3Ry dWN0IHVpX2ZpbGUgKmZpbGUsIEZJTEUgKmlvc3RyZWFtX25ldyk7CisKIC8q IENyZWF0ZSBhIGZpbGUgd2hpY2ggd3JpdGVzIHRvIGJvdGggT05FIGFuZCBU V08uICBDTE9TRV9PTkUKICAgIGFuZCBDTE9TRV9UV08gaW5kaWNhdGUgd2hl dGhlciB0aGUgb3JpZ2luYWwgZmlsZXMgc2hvdWxkIGJlCiAgICBjbG9zZWQg d2hlbiB0aGUgbmV3IGZpbGUgaXMgY2xvc2VkLiAgKi8K --0015174c14da834cfe04a85ca0ec--