Isn’t strlcpy() the more appropriate interface? strncpy doesn’t guarantee NUL 
termination.

Warner

> On Dec 18, 2015, at 2:58 PM, Pedro F. Giffuni <p...@freebsd.org> wrote:
> 
> Author: pfg
> Date: Fri Dec 18 21:58:42 2015
> New Revision: 292454
> URL: https://svnweb.freebsd.org/changeset/base/292454
> 
> Log:
>  ed(1): Prevent possible string overflows
> 
>  CID:         1007252
>  MFC after:   2 weeks
> 
> Modified:
>  head/bin/ed/main.c
> 
> Modified: head/bin/ed/main.c
> ==============================================================================
> --- head/bin/ed/main.c        Fri Dec 18 21:34:28 2015        (r292453)
> +++ head/bin/ed/main.c        Fri Dec 18 21:58:42 2015        (r292454)
> @@ -505,7 +505,8 @@ exec_command(void)
>                       return ERR;
>               else if (open_sbuf() < 0)
>                       return FATAL;
> -             if (*fnp && *fnp != '!') strcpy(old_filename, fnp);
> +             if (*fnp && *fnp != '!')
> +                      strncpy(old_filename, fnp, PATH_MAX);
> #ifdef BACKWARDS
>               if (*fnp == '\0' && *old_filename == '\0') {
>                       errmsg = "no current filename";
> @@ -532,7 +533,8 @@ exec_command(void)
>                       return ERR;
>               }
>               GET_COMMAND_SUFFIX();
> -             if (*fnp) strcpy(old_filename, fnp);
> +             if (*fnp)
> +                     strncpy(old_filename, fnp, PATH_MAX);
>               printf("%s\n", strip_escapes(old_filename));
>               break;
>       case 'g':
> @@ -663,7 +665,7 @@ exec_command(void)
>               GET_COMMAND_SUFFIX();
>               if (!isglobal) clear_undo_stack();
>               if (*old_filename == '\0' && *fnp != '!')
> -                     strcpy(old_filename, fnp);
> +                     strncpy(old_filename, fnp, PATH_MAX);
> #ifdef BACKWARDS
>               if (*fnp == '\0' && *old_filename == '\0') {
>                       errmsg = "no current filename";
> @@ -797,7 +799,7 @@ exec_command(void)
>                       return ERR;
>               GET_COMMAND_SUFFIX();
>               if (*old_filename == '\0' && *fnp != '!')
> -                     strcpy(old_filename, fnp);
> +                     strncpy(old_filename, fnp, PATH_MAX);
> #ifdef BACKWARDS
>               if (*fnp == '\0' && *old_filename == '\0') {
>                       errmsg = "no current filename";
> 

Attachment: signature.asc
Description: Message signed with OpenPGP using GPGMail

Reply via email to