delorie.com/archives/browse.cgi   search  
Mail Archives: cygwin/2005/03/03/01:58:58

Mailing-List: contact cygwin-help AT cygwin DOT com; run by ezmlm
List-Subscribe: <mailto:cygwin-subscribe AT cygwin DOT com>
List-Archive: <http://sourceware.org/ml/cygwin/>
List-Post: <mailto:cygwin AT cygwin DOT com>
List-Help: <mailto:cygwin-help AT cygwin DOT com>, <http://sourceware.org/ml/#faqs>
Sender: cygwin-owner AT cygwin DOT com
Mail-Followup-To: cygwin AT cygwin DOT com
Delivered-To: mailing list cygwin AT cygwin DOT com
Message-ID: <4226B59F.2020307@cwilson.fastmail.fm>
Date: Thu, 03 Mar 2005 01:58:39 -0500
From: Charles Wilson <cygwin AT cwilson DOT fastmail DOT fm>
User-Agent: Mozilla Thunderbird 1.0 (Windows/20041206)
MIME-Version: 1.0
To: cygwin AT cygwin DOT com
Subject: Re: cygstart patch
References: <49D88D820A7BC0479A7B0932D4219EFE1DD0EC AT NAEAPAXREX04VA DOT nadsusea DOT nads DOT navy DOT mil>
In-Reply-To: <49D88D820A7BC0479A7B0932D4219EFE1DD0EC@NAEAPAXREX04VA.nadsusea.nads.navy.mil>

Derosa, Anthony CIV NAVAIR 2035, 2, 205/214 wrote:
> I found a small bug and added a feature to the cygstart utility, which is part of the cygutils package.  The feature that I added removes the limit on the length of the command line arguments passed to the target application, which was previously limited to MAX_PATH.  The bug I fixed was in regard to freeing the variable "args" instead of tyring to free "workDir" twice.  A patch and change log follow below.  As this is my first contribution, please correct me if I did something incorrectly.

Thanks for the patch, Anthony.  It looks good (I can't beLIEVE the 
thinko on free(workDir) )  -- but I have one concern.  Maybe it's 
overblown, but replacing all of the strNcat calls (which are somewhat 
resistant to buffer overruns) with strcat (which are NOT) seems to be 
mistake.

OTOH, I can't see anyway around it without ALSO calling strlen() -- and 
if strlen() succeeds without "going off into the weeds", the strcat() 
will too, so you might as well just use strcat since strNcat+strlen is 
not really any more safe.

I'm not an expert on these issues; anybody else want to chime in here 
before I apply Anthony's patch?

--
Chuck



> --- ../cygutils-1.2.6/src/cygstart/cygstart.c	2002-03-16 00:49:44.000000000 -0500
> +++ src/cygstart/cygstart.c	2005-03-02 09:16:00.383625000 -0500
> @@ -340,14 +340,18 @@ int main(int argc, const char **argv)
>  
>      /* Retrieve any arguments */
>      if (rest && *rest) {
> -        if ((args = (char *) malloc(MAX_PATH+1)) == NULL) {
> +        if ((args = (char *) malloc(strlen(*rest)+1)) == NULL) {
>              fprintf(stderr, "%s: memory allocation error\n", argv[0]);
>              exit(1);
> -        }
> -        strncpy(args, *rest, MAX_PATH);
> +        }	 
> +        strcpy(args, *rest);
>          while (rest++ && *rest) {
> -            strncat(args, " ", MAX_PATH-strlen(args));
> -            strncat(args, *rest, MAX_PATH-strlen(args));
> +            if ( (args = (char *) realloc(args, strlen(args) + strlen(*rest) + 1)) == NULL) {
> +                fprintf(stderr, "%s: memory allocation error\n", argv[0]);
> +                exit(1);
> +            }		
> +            strcat(args, " ");
> +            strcat(args, *rest);
>          }
>      }
>  
> @@ -359,7 +363,7 @@ int main(int argc, const char **argv)
>      if (action)
>          free(action);
>      if (args)
> -        free(workDir);
> +        free(args);

D'oh!


>      if (workDir)
>          free(workDir);
>      if (file)
> 


--
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple
Problem reports:       http://cygwin.com/problems.html
Documentation:         http://cygwin.com/docs.html
FAQ:                   http://cygwin.com/faq/

- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019