svn commit: r338462 - in stable/11: sys/kern usr.bin/sed usr.bin/sed/tests
Konstantin Belousov
kostikbel at gmail.com
Wed Sep 5 12:06:24 UTC 2018
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
> }
More information about the svn-src-all
mailing list