POSIX.1-2017 demands in Shell & Utilities under 'Commands in ed':
The e, E, f, r, and w commands shall take an optional file parameter,
separated from the command letter by one or more <blank> characters.

Ensure at least one <blank> character (as defined for the POSIX locale)
is present or error out.

Signed-off-by: Rene Kita <m...@rkta.de>
---
 ed.c | 22 ++++++++++++++++++++++
 1 file changed, 22 insertions(+)

diff --git a/ed.c b/ed.c
index b661ac5..6da845a 100644
--- a/ed.c
+++ b/ed.c
@@ -475,6 +475,24 @@ skipblank(void)
        back(c);
 }
 
+static void
+ensureblank(void)
+{
+       char c;
+
+       switch ((c = input())) {
+       case ' ':
+       case '\t':
+               skipblank();
+       case '\n':
+               back(c);
+       case EOF:
+               break;
+       default:
+               error("unknown command");
+       }
+}
+
 static int
 getnum(void)
 {
@@ -1136,10 +1154,12 @@ repeat:
        case 'w':
                trunc = 1;
        case 'W':
+               ensureblank();
                deflines(nextln(0), lastln);
                dowrite(getfname(cmd), trunc);
                break;
        case 'r':
+               ensureblank();
                if (nlines > 1)
                        goto bad_address;
                deflines(lastln, lastln);
@@ -1251,6 +1271,7 @@ repeat:
                quit();
                break;
        case 'f':
+               ensureblank();
                if (nlines > 0)
                        goto unexpected;
                if (back(input()) != '\n')
@@ -1262,6 +1283,7 @@ repeat:
        case 'E':
                modflag = 0;
        case 'e':
+               ensureblank();
                if (nlines > 0)
                        goto unexpected;
                if (modflag)
-- 
2.42.0.rc1


Reply via email to