Skip site navigation (1)Skip section navigation (2)
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>