From: Junio C Hamano Date: Thu, 02 Aug 2007 21:14:43 GMT Subject: Re: [PATCH] Fix set_work_tree on cygwin Message-ID: <7vwswdtz98.fsf@assigned-by-dhcp.cox.net> In-Reply-To: Johannes Schindelin writes: > Hi, > > On Thu, 2 Aug 2007, Alex Riesen wrote: > >> Johannes Schindelin, Thu, Aug 02, 2007 17:38:37 +0200: >> >> > On Thu, 2 Aug 2007, Alex Riesen wrote: >> > >> > >@@ -209,7 +209,8 @@ const char *set_work_tree(const char *dir) >> > > len = strlen(dir); >> > > if (len > postfix_len && !strcmp(dir + len - postfix_len, >> > > "/" DEFAULT_GIT_DIR_ENVIRONMENT)) { >> > >- strncpy(dir_buffer, dir, len - postfix_len); >> > >+ strncpy(dir_buffer, dir, len - postfix_len); >> > >+ dir_buffer[len - postfix_len] = '\0'; >> > > >> > > /* are we inside the default work tree? */ >> > > rel = get_relative_cwd(buffer, sizeof(buffer), dir_buffer); >> > >> > Darn, darn, darn. strncpy does _not_ NUL terminate. I keep forgetting >> > that. >> > >> > Better use strlcpy()? >> >> Of course, but it just should not be needed at all: static supposed to >> be zeroed. > > Certainly. But reality outweighs theory, and so I Ack either your patch > or replacing it by strlcpy(). Static is supposed to be zeroed and also is supposed to retain the value from the previous call. I am guessing from the change to make "rel" to non-static that this function is called twice perhaps?