From: Jan Kratochvil <jan.kratochvil@redhat.com>
To: Eli Zaretskii <eliz@gnu.org>
Cc: gdb-patches@sourceware.org
Subject: Re: [patch] PID cmdline argument should be whole from digits [+testcase]
Date: Sun, 14 Feb 2010 14:37:00 -0000 [thread overview]
Message-ID: <20100214143716.GA15916@host0.dyn.jankratochvil.net> (raw)
In-Reply-To: <20100213210342.GC17808@host0.dyn.jankratochvil.net>
Hi,
(+testcase as it is not so complicated to extend the existing one)
Tested on x86_64-fedora12-linux-gnu.
Regards,
Jan
gdb/
2010-02-13 Jan Kratochvil <jan.kratochvil@redhat.com>
* configure.ac (AC_CHECK_FUNCS): Check for getpid.
* configure: Regenerate.
* config.in: Regenerate.
* defs.h (parse_pid): New.
* utils.c (parse_pid): New.
* darwin-nat.c (darwin_attach): Replace ARGS parsing by parse_pid.
* gnu-nat.c (gnu_attach): Likewise.
* nto-procfs.c (procfs_attach): Likewise.
* procfs.c (procfs_attach): Likewise.
* windows-nat.c (windows_attach): Likewise.
* inf-ptrace.c (inf_ptrace_attach): Likewise. Remove variable dummy.
* inf-ttrace.c (inf_ttrace_attach): Likewise.
* remote.c (extended_remote_attach_1): Likewise.
gdb/testsuite/
2010-02-13 Jan Kratochvil <jan.kratochvil@redhat.com>
* gdb.base/default.exp (attach): Update the expect string.
* gdb.base/attach.exp (attach to nonsense is prohibited): Make the
"Illegal process-id" expect string more exact.
(attach to digits-starting nonsense is prohibited): New.
--- a/gdb/configure.ac
+++ b/gdb/configure.ac
@@ -799,7 +799,7 @@ AC_FUNC_ALLOCA
AC_FUNC_MMAP
AC_FUNC_VFORK
AC_CHECK_FUNCS([canonicalize_file_name realpath getrusage getuid \
- getgid pipe poll pread64 sbrk setpgid setpgrp setsid \
+ getpid getgid pipe poll pread64 sbrk setpgid setpgrp setsid \
sigaction sigprocmask sigsetmask socketpair syscall \
ttrace wborder setlocale iconvlist libiconvlist btowc \
setrlimit getrlimit])
--- a/gdb/darwin-nat.c
+++ b/gdb/darwin-nat.c
@@ -1514,13 +1514,7 @@ darwin_attach (struct target_ops *ops, char *args, int from_tty)
struct inferior *inf;
kern_return_t kret;
- if (!args)
- error_no_arg (_("process-id to attach"));
-
- pid = atoi (args);
-
- if (pid == getpid ()) /* Trying to masturbate? */
- error (_("I refuse to debug myself!"));
+ pid = parse_pid (args);
if (from_tty)
{
--- a/gdb/defs.h
+++ b/gdb/defs.h
@@ -426,6 +426,8 @@ int compare_positive_ints (const void *ap, const void *bp);
extern const char *gdb_bfd_errmsg (bfd_error_type error_tag, char **matching);
+extern unsigned long parse_pid (char *args);
+
/* From demangle.c */
extern void set_demangling_style (char *);
--- a/gdb/gnu-nat.c
+++ b/gdb/gnu-nat.c
@@ -2139,13 +2139,7 @@ gnu_attach (struct target_ops *ops, char *args, int from_tty)
struct inf *inf = cur_inf ();
struct inferior *inferior;
- if (!args)
- error_no_arg (_("process-id to attach"));
-
- pid = atoi (args);
-
- if (pid == getpid ()) /* Trying to masturbate? */
- error (_("I refuse to debug myself!"));
+ pid = parse_pid (args);
if (from_tty)
{
--- a/gdb/inf-ptrace.c
+++ b/gdb/inf-ptrace.c
@@ -187,20 +187,9 @@ inf_ptrace_attach (struct target_ops *ops, char *args, int from_tty)
{
char *exec_file;
pid_t pid;
- char *dummy;
struct inferior *inf;
- if (!args)
- error_no_arg (_("process-id to attach"));
-
- dummy = args;
- pid = strtol (args, &dummy, 0);
- /* Some targets don't set errno on errors, grrr! */
- if (pid == 0 && args == dummy)
- error (_("Illegal process-id: %s."), args);
-
- if (pid == getpid ()) /* Trying to masturbate? */
- error (_("I refuse to debug myself!"));
+ pid = parse_pid (args);
if (from_tty)
{
--- a/gdb/inf-ttrace.c
+++ b/gdb/inf-ttrace.c
@@ -691,20 +691,10 @@ inf_ttrace_attach (struct target_ops *ops, char *args, int from_tty)
{
char *exec_file;
pid_t pid;
- char *dummy;
ttevent_t tte;
struct inferior *inf;
- if (!args)
- error_no_arg (_("process-id to attach"));
-
- dummy = args;
- pid = strtol (args, &dummy, 0);
- if (pid == 0 && args == dummy)
- error (_("Illegal process-id: %s."), args);
-
- if (pid == getpid ()) /* Trying to masturbate? */
- error (_("I refuse to debug myself!"));
+ pid = parse_pid (args);
if (from_tty)
{
--- a/gdb/nto-procfs.c
+++ b/gdb/nto-procfs.c
@@ -619,13 +619,7 @@ procfs_attach (struct target_ops *ops, char *args, int from_tty)
int pid;
struct inferior *inf;
- if (!args)
- error_no_arg (_("process-id to attach"));
-
- pid = atoi (args);
-
- if (pid == getpid ())
- error (_("Attaching GDB to itself is not a good idea..."));
+ pid = parse_pid (args);
if (from_tty)
{
--- a/gdb/procfs.c
+++ b/gdb/procfs.c
@@ -3606,12 +3606,7 @@ procfs_attach (struct target_ops *ops, char *args, int from_tty)
char *exec_file;
int pid;
- if (!args)
- error_no_arg (_("process-id to attach"));
-
- pid = atoi (args);
- if (pid == getpid ())
- error (_("Attaching GDB to itself is not a good idea..."));
+ pid = parse_pid (args);
if (from_tty)
{
--- a/gdb/remote.c
+++ b/gdb/remote.c
@@ -3857,17 +3857,9 @@ extended_remote_attach_1 (struct target_ops *target, char *args, int from_tty)
{
struct remote_state *rs = get_remote_state ();
int pid;
- char *dummy;
char *wait_status = NULL;
- if (!args)
- error_no_arg (_("process-id to attach"));
-
- dummy = args;
- pid = strtol (args, &dummy, 0);
- /* Some targets don't set errno on errors, grrr! */
- if (pid == 0 && args == dummy)
- error (_("Illegal process-id: %s."), args);
+ pid = parse_pid (args);
if (remote_protocol_packets[PACKET_vAttach].support == PACKET_DISABLE)
error (_("This target does not support attaching to a process"));
--- a/gdb/utils.c
+++ b/gdb/utils.c
@@ -3648,6 +3648,32 @@ gdb_bfd_errmsg (bfd_error_type error_tag, char **matching)
return ret;
}
+/* Return ARGS parsed as numeric pid. Call error if ARGS is not a valid number
+ or if ARGS is GDB's GETPID. */
+
+unsigned long
+parse_pid (char *args)
+{
+ unsigned long pid;
+ char *dummy;
+
+ if (!args)
+ error_no_arg (_("process-id"));
+
+ dummy = args;
+ pid = strtoul (args, &dummy, 0);
+ /* Some targets don't set errno on errors, grrr! */
+ if ((pid == 0 && dummy == args) || dummy != &args[strlen (args)])
+ error (_("Illegal process-id: %s."), args);
+
+#ifdef HAVE_GETPID
+ if (pid == getpid ()) /* Trying to masturbate? */
+ error (_("I refuse to debug myself!"));
+#endif
+
+ return pid;
+}
+
/* Provide a prototype to silence -Wmissing-prototypes. */
extern initialize_file_ftype _initialize_utils;
--- a/gdb/windows-nat.c
+++ b/gdb/windows-nat.c
@@ -1691,8 +1691,7 @@ windows_attach (struct target_ops *ops, char *args, int from_tty)
BOOL ok;
DWORD pid;
- if (!args)
- error_no_arg (_("process-id to attach"));
+ pid = parse_pid (args);
if (set_process_privilege (SE_DEBUG_NAME, TRUE) < 0)
{
@@ -1700,8 +1699,6 @@ windows_attach (struct target_ops *ops, char *args, int from_tty)
printf_unfiltered ("This can cause attach to fail on Windows NT/2K/XP\n");
}
- pid = strtoul (args, 0, 0); /* Windows pid */
-
windows_init_thread_list ();
ok = DebugActiveProcess (pid);
saw_create = 0;
--- a/gdb/testsuite/gdb.base/default.exp
+++ b/gdb/testsuite/gdb.base/default.exp
@@ -42,7 +42,7 @@ gdb_test "append binary value" "Missing filename\."
setup_xfail "mips-idt-*"
send_gdb "attach\n"
gdb_expect {
- -re "Argument required .(process-id|program) to attach.*$gdb_prompt $"\
+ -re "Argument required .(process-id|program to attach).*$gdb_prompt $"\
{ pass "attach" }
-re "You can't do that when your target is `None'.*$gdb_prompt $"\
{ pass "attach" }
--- a/gdb/testsuite/gdb.base/attach.exp
+++ b/gdb/testsuite/gdb.base/attach.exp
@@ -93,7 +93,28 @@ proc do_attach_tests {} {
set test "attach to nonsense is prohibited"
gdb_test_multiple "attach abc" "$test" {
- -re "Illegal process-id: abc.*$gdb_prompt $" {
+ -re "Illegal process-id: abc\\.\r\n$gdb_prompt $" {
+ pass "$test"
+ }
+ -re "Attaching to.*, process .*couldn't open /proc file.*$gdb_prompt $" {
+ # Response expected from /proc-based systems.
+ pass "$test"
+ }
+ -re "Can't attach to process..*$gdb_prompt $" {
+ # Response expected on Cygwin
+ pass "$test"
+ }
+ -re "Attaching to.*$gdb_prompt $" {
+ fail "$test (bogus pid allowed)"
+ }
+ }
+
+ # Verify that we cannot attach to nonsense even if its initial part is
+ # a valid PID.
+
+ set test "attach to digits-starting nonsense is prohibited"
+ gdb_test_multiple "attach ${testpid}x" "$test" {
+ -re "Illegal process-id: ${testpid}x\\.\r\n$gdb_prompt $" {
pass "$test"
}
-re "Attaching to.*, process .*couldn't open /proc file.*$gdb_prompt $" {
next prev parent reply other threads:[~2010-02-14 14:37 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-02-13 15:20 [patch] PID cmdline argument should be whole from digits Jan Kratochvil
2010-02-13 17:47 ` Eli Zaretskii
2010-02-13 21:03 ` Jan Kratochvil
2010-02-14 14:37 ` Jan Kratochvil [this message]
2010-02-14 14:54 ` [patch] PID cmdline argument should be whole from digits [+testcase] Pedro Alves
2010-02-14 18:56 ` Jan Kratochvil
2010-02-15 14:57 ` Pedro Alves
2010-02-15 15:52 ` Jan Kratochvil
2010-02-15 16:03 ` Mark Kettenis
2010-02-15 17:38 ` Jan Kratochvil
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20100214143716.GA15916@host0.dyn.jankratochvil.net \
--to=jan.kratochvil@redhat.com \
--cc=eliz@gnu.org \
--cc=gdb-patches@sourceware.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox