From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 9441 invoked by alias); 16 Jul 2011 18:06:08 -0000 Received: (qmail 9429 invoked by uid 22791); 16 Jul 2011 18:06:07 -0000 X-SWARE-Spam-Status: No, hits=-2.3 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; Sat, 16 Jul 2011 18:05:52 +0000 Received: by eyx24 with SMTP id 24so1367109eyx.5 for ; Sat, 16 Jul 2011 11:05:50 -0700 (PDT) MIME-Version: 1.0 Received: by 10.213.112.141 with SMTP id w13mr1647406ebp.131.1310839550484; Sat, 16 Jul 2011 11:05:50 -0700 (PDT) Received: by 10.213.22.195 with HTTP; Sat, 16 Jul 2011 11:05:50 -0700 (PDT) In-Reply-To: References: <834o2my2uj.fsf@gnu.org> Date: Sun, 17 Jul 2011 20:26: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=0015174beabac39ffa04a8339d5f 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/msg00415.txt.bz2 --0015174beabac39ffa04a8339d5f Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Content-length: 2864 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-c= pos))) !=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, comments >> 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 the >> 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. > --0015174beabac39ffa04a8339d5f Content-Type: text/x-patch; charset=US-ASCII; name="gdb-shell-integration-new.patch" Content-Disposition: attachment; filename="gdb-shell-integration-new.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_gq6w04dn0 Content-length: 4746 ZGlmZiAtcnVwIHNyYy8vZ2RiL3RvcC5jIGRzdC8vZ2RiL3RvcC5jCi0tLSBz cmMvL2dkYi90b3AuYwkyMDExLTA2LTI4IDAwOjUxOjUwLjAwMDAwMDAwMCAr MDUzMAorKysgZHN0Ly9nZGIvdG9wLmMJMjAxMS0wNy0xNiAyMzowNTo0Ni43 NDU5Nzg5OTIgKzA1MzAKQEAgLTQ4LDYgKzQ4LDcgQEAKICNpbmNsdWRlICJl dmVudC1sb29wLmgiCiAjaW5jbHVkZSAiZ2RidGhyZWFkLmgiCiAjaW5jbHVk ZSAicHl0aG9uL3B5dGhvbi5oIgorI2luY2x1ZGUgInVpLWZpbGUuaCIKIAog LyogcmVhZGxpbmUgaW5jbHVkZSBmaWxlcy4gICovCiAjaW5jbHVkZSAicmVh ZGxpbmUvcmVhZGxpbmUuaCIKQEAgLTM1OCw2ICszNTksNjggQEAgcHJlcGFy ZV9leGVjdXRlX2NvbW1hbmQgKHZvaWQpCiAgIHJldHVybiBjbGVhbnVwOwog fQogCitjaGFyICoKK3BhcnNlX2Zvcl9zaGVsbF9jb21tYW5kIChjaGFyICpw KQoreworICBjaGFyICpzaF9jbWQsICpjcG9zLCAqc3BvcywgKmVwb3M7Cisg IGludCBxdW90ZV9jbnQgPSAwOworCisgIGlmICgoc2hfY21kID0gc3RyY2hy IChwLCAnfCcpKSAhPSBOVUxMKQorICAgIHsKKyAgICAgIHNwb3MgPSBwOwor ICAgICAgZXBvcyA9IHAgKyBzdHJsZW4gKHApIC0gMTsKKworICAgICAgZm9y ICg7OykKKyAgICB7CisgICAgICBmb3IgKGNwb3MgPSBzcG9zOyAoY3BvcyA9 IG1lbWNociAoY3BvcywgJyInLCAoc2hfY21kLWNwb3MpKSkgIT0gTlVMTDsg Y3BvcysrKQorICAgICAgICBxdW90ZV9jbnQrKzsKKyAgICAgIHNwb3MgPSAo c2hfY21kICsgMSk7CisgICAgICBpZiAoKHF1b3RlX2NudCAlIDIpID09IDAg fHwgKHNoX2NtZCA9IHN0cmNociAoc3BvcywgJ3wnKSkgPT0gTlVMTCkKKyAg ICAgICAgYnJlYWs7CisgICAgfQorCisgICAgaWYgKHNoX2NtZCA9PSBOVUxM KQorICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBjcG9zID0gc3BvczsKKyAg ICB3aGlsZSAoaXNzcGFjZSgqY3BvcykpCisgICAgICBjcG9zKys7CisKKyAg ICBpZiAoKmNwb3MgIT0gJ3snKQorICAgICAgcmV0dXJuIHBhcnNlX2Zvcl9z aGVsbF9jb21tYW5kIChjcG9zKTsKKworICAgICpjcG9zID0gJyAnOworCisg ICAgY3BvcyA9IGVwb3M7CisgICAgd2hpbGUgKGlzc3BhY2UoKmNwb3MpKQor ICAgICAgY3Bvcy0tOworCisgICAgaWYgKCpjcG9zICE9ICd9JykKKyAgICAg IHJldHVybiBwYXJzZV9mb3Jfc2hlbGxfY29tbWFuZCAoY3Bvcyk7CisKKyAg ICAqY3BvcyA9ICcgJzsKKyAgICB9CisKKyAgaWYgKHNoX2NtZCkKKyAgICAq c2hfY21kKysgPSAnXDAnOworCisgIHJldHVybiBzaF9jbWQ7Cit9CisKKy8q IFJ1biBleGVjdXRlX2NvbW1hbmQgZm9yIFAgYW5kIEZST01fVFRZLiBXcml0 ZSBvdXRwdXQgaW4gcGlwZSwgCisgICBkbyBub3QgZGlzcGxheSBpdCB0byB0 aGUgc2NyZWVuLiAgKi8KKwordm9pZAorZXhlY3V0ZV9jb21tYW5kX3RvX3Bp cGUgKGNoYXIgKnAsIGludCBmcm9tX3R0eSwgRklMRSAqcGlwZSkKK3sKKyAg RklMRSAqZmlsZTsKKworICBmaWxlID0gZ2RiX21vZGlmeV9pbyAoZ2RiX3N0 ZG91dCwgcGlwZSk7CisgIGV4ZWN1dGVfY29tbWFuZCAocCwgZnJvbV90dHkp OworICBwaXBlID0gZ2RiX21vZGlmeV9pbyAoZ2RiX3N0ZG91dCwgZmlsZSk7 CisgIHBjbG9zZSAocGlwZSk7Cit9CisKIC8qIEV4ZWN1dGUgdGhlIGxpbmUg UCBhcyBhIGNvbW1hbmQsIGluIHRoZSBjdXJyZW50IHVzZXIgY29udGV4dC4K ICAgIFBhc3MgRlJPTV9UVFkgYXMgc2Vjb25kIGFyZ3VtZW50IHRvIHRoZSBk ZWZpbmluZyBmdW5jdGlvbi4gICovCiAKQEAgLTM2OCw3ICs0MzEsMTYgQEAg ZXhlY3V0ZV9jb21tYW5kIChjaGFyICpwLCBpbnQgZnJvbV90dHkpCiAgIHN0 cnVjdCBjbWRfbGlzdF9lbGVtZW50ICpjOwogICBlbnVtIGxhbmd1YWdlIGZs YW5nOwogICBzdGF0aWMgaW50IHdhcm5lZCA9IDA7Ci0gIGNoYXIgKmxpbmU7 CisgIGNoYXIgKmxpbmUsICpzaF9jbWQ7CisKKyAgaWYgKChzaF9jbWQgPSBw YXJzZV9mb3Jfc2hlbGxfY29tbWFuZCAocCkpICE9IE5VTEwpIAorICAgIHsK KyAgICAgIEZJTEUgKnBpcGU7CisKKyAgICAgIHBpcGUgPSBwb3BlbiAoc2hf Y21kLCAidyIpOworICAgICAgZXhlY3V0ZV9jb21tYW5kX3RvX3BpcGUgKHAs IGZyb21fdHR5LCBwaXBlKTsKKyAgICAgIHJldHVybjsKKyAgICB9CiAKICAg Y2xlYW51cCA9IHByZXBhcmVfZXhlY3V0ZV9jb21tYW5kICgpOwogCmRpZmYg LXJ1cCBzcmMvL2dkYi91aS1maWxlLmMgZHN0Ly9nZGIvdWktZmlsZS5jCi0t LSBzcmMvL2dkYi91aS1maWxlLmMJMjAxMS0wNS0xNCAxMToxNDozNi4wMDAw MDAwMDAgKzA1MzAKKysrIGRzdC8vZ2RiL3VpLWZpbGUuYwkyMDExLTA3LTE1 IDEzOjQ5OjM0Ljk5OTkxMDMzMiArMDUzMApAQCAtNjE3LDYgKzYxNywyMSBA QCBzdHJ1Y3QgdWlfZmlsZSAqCiBzdGRpb19maWxlb3BlbiAoRklMRSAqZmls ZSkKIHsKICAgcmV0dXJuIHN0ZGlvX2ZpbGVfbmV3IChmaWxlLCAwKTsKKwor fQorCitGSUxFICoKK2dkYl9tb2RpZnlfaW8gKHN0cnVjdCB1aV9maWxlICpm aWxlLCBGSUxFICppb3N0cmVhbV9uZXcpCit7CisgIEZJTEUgKmlvc3RyZWFt X29sZDsKKyAgc3RydWN0IHN0ZGlvX2ZpbGUgKnN0ZGlvID0gdWlfZmlsZV9k YXRhIChmaWxlKTsKKworICBpZiAoc3RkaW8tPm1hZ2ljICE9ICZzdGRpb19m aWxlX21hZ2ljKQorICAgIGludGVybmFsX2Vycm9yIChfX0ZJTEVfXywgX19M SU5FX18sCisJCSAgICBfKCJnZGJfbW9kaWZ5X2lvOiBiYWQgbWFnaWMgbnVt YmVyIikpOworICBpb3N0cmVhbV9vbGQgPSBzdGRpby0+ZmlsZTsKKyAgc3Rk aW8tPmZpbGUgPSBpb3N0cmVhbV9uZXc7CisgIHJldHVybiBpb3N0cmVhbV9v bGQ7CiB9CiAKIHN0cnVjdCB1aV9maWxlICoKZGlmZiAtcnVwIHNyYy8vZ2Ri L3VpLWZpbGUuaCBkc3QvL2dkYi91aS1maWxlLmgKLS0tIHNyYy8vZ2RiL3Vp LWZpbGUuaAkyMDExLTA1LTEzIDIyOjU4OjIwLjAwMDAwMDAwMCArMDUzMAor KysgZHN0Ly9nZGIvdWktZmlsZS5oCTIwMTEtMDctMTUgMTM6NDg6NTQuNjAz OTEyMTk5ICswNTMwCkBAIC0xMjYsNiArMTI2LDkgQEAgZXh0ZXJuIHN0cnVj dCB1aV9maWxlICpzdGRpb19maWxlb3BlbiAoRgogLyogT3BlbiBOQU1FIHJl dHVybmluZyBhbiBTVERJTyBiYXNlZCBVSV9GSUxFLiAgKi8KIGV4dGVybiBz dHJ1Y3QgdWlfZmlsZSAqZ2RiX2ZvcGVuIChjaGFyICpuYW1lLCBjaGFyICpt b2RlKTsKIAorLyogTW9kaWZ5IHRoZSBmaWxlIHBvaW50ZXIgb2YgYW4gU1RE SU8gYmFzZWQgVUlfRklMRS4gKi8KK0ZJTEUgKmdkYl9tb2RpZnlfaW8gKHN0 cnVjdCB1aV9maWxlICpmaWxlLCBGSUxFICppb3N0cmVhbV9uZXcpOworCiAv KiBDcmVhdGUgYSBmaWxlIHdoaWNoIHdyaXRlcyB0byBib3RoIE9ORSBhbmQg VFdPLiAgQ0xPU0VfT05FCiAgICBhbmQgQ0xPU0VfVFdPIGluZGljYXRlIHdo ZXRoZXIgdGhlIG9yaWdpbmFsIGZpbGVzIHNob3VsZCBiZQogICAgY2xvc2Vk IHdoZW4gdGhlIG5ldyBmaWxlIGlzIGNsb3NlZC4gICovCg== --0015174beabac39ffa04a8339d5f--