From 4c44561d9f97331bb23f900f47a69305091f3ab3 Mon Sep 17 00:00:00 2001 From: Harald van Dijk Date: Fri, 26 Sep 2014 22:27:13 +0800 Subject: [JOBS] Fix off-by-one error for multiple of four job numbers On 29/07/13 23:44, Luigi Tarenga wrote: > hi list, > while writing a script to execute parallel ssh command on many host I found > a strange behavior of dash. I can replicate it with a very simple script but > didn't find any documentation about dash or POSIX that can explain it. > > tested on centos 6.4 (dash 0.5.5.1) and wih dash compiled from source (0.5.7) > the following script reports error: > > #!/bin/dash > > sleep 3 & > sleep 3 & > sleep 3 & > sleep 3 & > > #/bin/true > jobs -l > > wait %1 > wait %2 > wait %3 > wait %4 > > [vortex@lizard ~]$ ./dash-0.5.7/src/dash test.sh > [4] + 4569 Running > [3] - 4568 Running > [2] 4567 Running > [1] 4566 Running > prova: 14: wait: No such job: %4 > [vortex@lizard ~]$ echo $? > 2 Yes, this looks like a bug to me. The number of allocated jobs is always kept as a multiple of four, and the first check in considering whether the job number is valid is "if it's greater than or equal to the number of allocated job, it's invalid". That doesn't look right. That would only be right if jobs were zero-based, but they aren't. If it's exactly equal to the number of available jobs, it can still be valid. It works when adding /bin/true, because four more more jobs end up allocated internally. Signed-off-by: Herbert Xu --- src/jobs.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src') diff --git a/src/jobs.c b/src/jobs.c index bf40204..c2c2332 100644 --- a/src/jobs.c +++ b/src/jobs.c @@ -699,7 +699,7 @@ check: if (is_number(p)) { num = atoi(p); - if (num < njobs) { + if (num <= njobs) { jp = jobtab + num - 1; if (jp->used) goto gotit; -- cgit 1.4.1 ue='author'>author
Commit message (Expand)Author
2022-02-20Remove unused mbs.len field from struct EditJune McEnroe
2022-02-19Remove unneeded includes in ui.cJune McEnroe
2022-02-19Reimplement tab completeJune McEnroe
2022-02-19Handle errors from editFn, etc.June McEnroe
2022-02-19Reimplement text macrosJune McEnroe
2022-02-19Factor out input handling to input.cJune McEnroe
2022-02-19Factor out window management to window.cJune McEnroe
2022-02-19Enable -Wmissing-prototypesJune McEnroe
2022-02-19Fix edit.[ch] license notice additional permissionsJune McEnroe
2022-02-19Run line editing testsJune McEnroe
2022-02-18Implement new line editing "library"June McEnroe
2022-02-18Simplify cursor positioning in inputJune McEnroe
2022-02-18Fix M-f orderingJune McEnroe
2022-02-12Move sandman build to scripts/MakefileJune McEnroe
2022-02-12Use compat_readpassphrase.c on LinuxJune McEnroe
2022-02-12Copy RPP defines from oconfigureJune McEnroe