Date: Wed, 5 Sep 2018 15:06:06 +0300 From: Konstantin Belousov <kostikbel@gmail.com> To: Mark Johnston <markj@FreeBSD.org> Cc: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-11@freebsd.org Subject: Re: svn commit: r338462 - in stable/11: sys/kern usr.bin/sed usr.bin/sed/tests Message-ID: <20180905120606.GA3161@kib.kiev.ua> In-Reply-To: <201809050030.w850UZaF031642@repo.freebsd.org> References: <201809050030.w850UZaF031642@repo.freebsd.org>
next in thread | previous in thread | raw e-mail | index | archive | help
On Wed, Sep 05, 2018 at 12:30:35AM +0000, Mark Johnston wrote: > Author: markj > Date: Wed Sep 5 00:30:34 2018 > New Revision: 338462 > URL: https://svnweb.freebsd.org/changeset/base/338462 > > Log: > MFC r338375: > sed: Fix -i option behavior with 'q' command. > > PR: 230507 > > Modified: > stable/11/sys/kern/imgact_elf.c ^^^^ This part is not relevant. > stable/11/usr.bin/sed/extern.h > stable/11/usr.bin/sed/main.c > stable/11/usr.bin/sed/process.c > stable/11/usr.bin/sed/tests/sed2_test.sh > Directory Properties: > stable/11/ (props changed) > > Modified: stable/11/sys/kern/imgact_elf.c > ============================================================================== > --- stable/11/sys/kern/imgact_elf.c Tue Sep 4 19:28:46 2018 (r338461) > +++ stable/11/sys/kern/imgact_elf.c Wed Sep 5 00:30:34 2018 (r338462) > @@ -839,7 +839,8 @@ __CONCAT(exec_, __elfN(imgact))(struct image_params *i > break; > case PT_INTERP: > /* Path to interpreter */ > - if (phdr[i].p_filesz > MAXPATHLEN) { > + if (phdr[i].p_filesz < 2 || > + phdr[i].p_filesz > MAXPATHLEN) { > uprintf("Invalid PT_INTERP\n"); > error = ENOEXEC; > goto ret; > @@ -870,6 +871,11 @@ __CONCAT(exec_, __elfN(imgact))(struct image_params *i > } else { > interp = __DECONST(char *, imgp->image_header) + > phdr[i].p_offset; > + if (interp[interp_name_len - 1] != '\0') { > + uprintf("Invalid PT_INTERP\n"); > + error = ENOEXEC; > + goto ret; > + } > } > break; > case PT_GNU_STACK: > > Modified: stable/11/usr.bin/sed/extern.h > ============================================================================== > --- stable/11/usr.bin/sed/extern.h Tue Sep 4 19:28:46 2018 (r338461) > +++ stable/11/usr.bin/sed/extern.h Wed Sep 5 00:30:34 2018 (r338462) > @@ -44,6 +44,8 @@ extern int aflag, eflag, nflag; > extern const char *fname, *outfname; > extern FILE *infile, *outfile; > extern int rflags; /* regex flags to use */ > +extern const char *inplace; > +extern int quit; > > void cfclose(struct s_command *, struct s_command *); > void compile(void); > > Modified: stable/11/usr.bin/sed/main.c > ============================================================================== > --- stable/11/usr.bin/sed/main.c Tue Sep 4 19:28:46 2018 (r338461) > +++ stable/11/usr.bin/sed/main.c Wed Sep 5 00:30:34 2018 (r338462) > @@ -101,6 +101,7 @@ FILE *outfile; /* Current output file */ > > int aflag, eflag, nflag; > int rflags = 0; > +int quit = 0; > static int rval; /* Exit status */ > > static int ispan; /* Whether inplace editing spans across files */ > @@ -114,7 +115,7 @@ const char *fname; /* File name. */ > const char *outfname; /* Output file name */ > static char oldfname[PATH_MAX]; /* Old file name (for in-place editing) */ > static char tmpfname[PATH_MAX]; /* Temporary file name (for in-place editing) */ > -static const char *inplace; /* Inplace edit file extension. */ > +const char *inplace; /* Inplace edit file extension. */ > u_long linenum; > > static void add_compunit(enum e_cut, char *); > @@ -334,7 +335,7 @@ mf_fgets(SPACE *sp, enum e_spflag spflag) > } > > for (;;) { > - if (infile != NULL && (c = getc(infile)) != EOF) { > + if (infile != NULL && (c = getc(infile)) != EOF && !quit) { > (void)ungetc(c, infile); > break; > } > > Modified: stable/11/usr.bin/sed/process.c > ============================================================================== > --- stable/11/usr.bin/sed/process.c Tue Sep 4 19:28:46 2018 (r338461) > +++ stable/11/usr.bin/sed/process.c Wed Sep 5 00:30:34 2018 (r338462) > @@ -207,10 +207,14 @@ redirect: > } > break; > case 'q': > - if (!nflag && !pd) > - OUT(); > - flush_appends(); > - exit(0); > + if (inplace == NULL) { > + if (!nflag && !pd) > + OUT(); > + flush_appends(); > + exit(0); > + } > + quit = 1; > + break; > case 'r': > if (appendx >= appendnum) > if ((appends = realloc(appends, > > Modified: stable/11/usr.bin/sed/tests/sed2_test.sh > ============================================================================== > --- stable/11/usr.bin/sed/tests/sed2_test.sh Tue Sep 4 19:28:46 2018 (r338461) > +++ stable/11/usr.bin/sed/tests/sed2_test.sh Wed Sep 5 00:30:34 2018 (r338462) > @@ -38,6 +38,7 @@ inplace_hardlink_src_body() > atf_check ln a b > atf_check sed -i '' -e 's,foo,bar,g' b > atf_check -o 'inline:bar\n' -s exit:0 cat b > + atf_check -s not-exit:0 stat -q '.!'* > } > > atf_test_case inplace_symlink_src > @@ -50,10 +51,27 @@ inplace_symlink_src_body() > echo foo > a > atf_check ln -s a b > atf_check -e not-empty -s not-exit:0 sed -i '' -e 's,foo,bar,g' b > + atf_check -s not-exit:0 stat -q '.!'* > } > > +atf_test_case inplace_command_q > +inplace_command_q_head() > +{ > + atf_set "descr" "Verify -i works correctly with the 'q' command" > +} > +inplace_command_q_body() > +{ > + printf '1\n2\n3\n' > a > + atf_check -o 'inline:1\n2\n' sed '2q' a > + atf_check sed -i.bak '2q' a > + atf_check -o 'inline:1\n2\n' cat a > + atf_check -o 'inline:1\n2\n3\n' cat a.bak > + atf_check -s not-exit:0 stat -q '.!'* > +} > + > atf_init_test_cases() > { > + atf_add_test_case inplace_command_q > atf_add_test_case inplace_hardlink_src > atf_add_test_case inplace_symlink_src > }
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20180905120606.GA3161>