'sed -e' dumps core

David Elliott dce at mips.COM
Sun Sep 4 01:11:25 AEST 1988


In article <15741 at shemp.CS.UCLA.EDU> casey at admin.cognet.ucla.edu.UUCP (Casey Leedom) writes:
>In article <1334 at solo7.cs.vu.nl> maart at cs.vu.nl () writes:
>> 'sed -e' without any further argument dumps core.  A fix should be easy.
>
>  What version of 2BSD are you using?  I just did this on our current
>2.10BSD (soon to be released at the site near you) and didn't have any
>problems.  Are you using 2.9BSD?

If you're on a DEC machine, or any machine that allows dereferencing of
NULL pointers, it probably works fine.

This is one of those long-standing problems, and is present in both
BSD and System V.  There are actually 2 bugs.  In the -f code, the
check for enough arguments left checks to see if eargc is 1 and then
decrements it, exiting if it isn't, but eargc can't be 1 at that point.
The -e code doesn't even check for enough arguments in System V, but
I seem to remember it does the same as for -f in BSD.

Here's the fix for System V (the BSD code should be similar):


*** sed0.c.old
--- sed0.c
***************
*** 97,106 ****
  			continue;
  
  		case 'f':
! 			if(eargc-- <= 0)	exit(2);
  
  			if((fin = fopen(*++eargv, "r")) == NULL) {
! 				fprintf(stderr, "Cannot open pattern-file: %s\n", *eargv);
  				exit(2);
  			}
  
--- 97,110 ----
  			continue;
  
  		case 'f':
! 			if (eargc < 2) {
! 				fprintf(stderr, "-f requires a file argument\n");
! 				exit(2);
! 			}
! 			eargc--;
  
  			if((fin = fopen(*++eargv, "r")) == NULL) {
! 				perror(*eargv);
  				exit(2);
  			}
  
***************
*** 109,114 ****
--- 113,122 ----
  			continue;
  
  		case 'e':
+ 			if (eargc < 2) {
+ 				fprintf(stderr, "-e requires an argument\n");
+ 				exit(2);
+ 			}
  			eflag++;
  			fcomp();
  			eflag = 0;
-- 
David Elliott		dce at mips.com  or  {ames,prls,pyramid,decwrl}!mips!dce



More information about the Comp.bugs.2bsd mailing list