From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1Ktis5-0002Dt-Iw for qemu-devel@nongnu.org; Sat, 25 Oct 2008 09:08:01 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1Ktis4-0002DR-BC for qemu-devel@nongnu.org; Sat, 25 Oct 2008 09:08:01 -0400 Received: from [199.232.76.173] (port=50573 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1Ktis4-0002DJ-3R for qemu-devel@nongnu.org; Sat, 25 Oct 2008 09:08:00 -0400 Received: from rv-out-0708.google.com ([209.85.198.247]:58850) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1Ktis3-0002zo-EI for qemu-devel@nongnu.org; Sat, 25 Oct 2008 09:07:59 -0400 Received: by rv-out-0708.google.com with SMTP id f25so1186694rvb.22 for ; Sat, 25 Oct 2008 06:07:58 -0700 (PDT) Message-ID: Date: Sat, 25 Oct 2008 15:07:58 +0200 From: "andrzej zaborowski" Subject: Re: [Qemu-devel] [5532] Replace uses of strndup (a GNU extension) with Qemu pstrdup In-Reply-To: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Content-Disposition: inline References: Reply-To: qemu-devel@nongnu.org List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org 2008/10/25 Blue Swirl : > On 10/25/08, andrzej zaborowski wrote: >> 2008/10/25 Blue Swirl : >> >> > Revision: 5532 >> > http://svn.sv.gnu.org/viewvc/?view=rev&root=qemu&revision=5532 >> > Author: blueswir1 >> > Date: 2008-10-25 11:23:27 +0000 (Sat, 25 Oct 2008) >> > >> > Log Message: >> > ----------- >> > Replace uses of strndup (a GNU extension) with Qemu pstrdup >> > >> > Modified Paths: >> > -------------- >> > trunk/cutils.c >> > trunk/hw/bt-hci.c >> > trunk/qemu-common.h >> > >> > Modified: trunk/cutils.c >> > =================================================================== >> > --- trunk/cutils.c 2008-10-25 11:21:28 UTC (rev 5531) >> > +++ trunk/cutils.c 2008-10-25 11:23:27 UTC (rev 5532) >> > @@ -50,6 +50,18 @@ >> > return buf; >> > } >> > >> > +/* strdup with a limit */ >> > +char *pstrdup(const char *str, size_t buf_size) >> > +{ >> > + size_t len; >> > + char *buf; >> > + >> > + len = MIN(buf_size, strlen(str)); >> > + buf = qemu_malloc(len); >> > + pstrcpy(buf, len, str); >> > + return buf; >> > +} >> >> >> I think here also pstrcpy will only copy up to buf_size - 1 characters >> while strndup would copy buf_size chars. > > That is actually safer if we always want the strings to be NUL terminated. strndup also always NUL terminates the string so it's just as safe, the length is just different. > > But the allocation length is wrong, it should be MIN(buf_size, strlen(str) + 1). By my reading of the manual, it should rather be MIN(buf_size, strlen(str)) + 1. Now that I think of it, note that this changed malloc to qemu_malloc so you need to change the respective free()s to qemu_free()s. Cheers