Message ID | 20140327192254.GC1982@domone.podge |
---|---|
State | New |
Headers | show |
On Thu, Mar 27, 2014 at 08:22:54PM +0100, Ondřej Bílka wrote: > > > Fix this by using memmove instead of stpcpy. Tested x86_64 using > > > various combinations of triplets (including NULL and non-NULL ones) to > > > verify that this works correctly and there are no regressions. > > > This could work only with additional assertion that we do not move host > forward otherwise it could overwrite user. If the host, user and domain are out of order, they are copied in order into a separate area in the buffer before the memmove. If you think there's something else that could move host forward then I don't understand and you'll have to elaborate a bit. Siddhesh
On Fri, Mar 28, 2014 at 07:43:22AM +0530, Siddhesh Poyarekar wrote: > On Thu, Mar 27, 2014 at 08:22:54PM +0100, Ondřej Bílka wrote: > > > > Fix this by using memmove instead of stpcpy. Tested x86_64 using > > > > various combinations of triplets (including NULL and non-NULL ones) to > > > > verify that this works correctly and there are no regressions. > > > > > This could work only with additional assertion that we do not move host > > forward otherwise it could overwrite user. > > If the host, user and domain are out of order, they are copied in > order into a separate area in the buffer before the memmove. If you > think there's something else that could move host forward then I don't > understand and you'll have to elaborate a bit. > > Siddhesh They are in order, its best to show on example what I mean by copying: host user domain ^ hoshostser domain hoshost tserdomain hoshost tser domain
On Wed, Apr 09, 2014 at 08:22:29PM +0200, Ondřej Bílka wrote: > On Fri, Mar 28, 2014 at 07:43:22AM +0530, Siddhesh Poyarekar wrote: > > On Thu, Mar 27, 2014 at 08:22:54PM +0100, Ondřej Bílka wrote: > > > > > Fix this by using memmove instead of stpcpy. Tested x86_64 using > > > > > various combinations of triplets (including NULL and non-NULL ones) to > > > > > verify that this works correctly and there are no regressions. > > > > > > > This could work only with additional assertion that we do not move host > > > forward otherwise it could overwrite user. > > > > If the host, user and domain are out of order, they are copied in > > order into a separate area in the buffer before the memmove. If you > > think there's something else that could move host forward then I don't > > understand and you'll have to elaborate a bit. > > > > Siddhesh > > They are in order, its best to show on example what I mean by copying: > > host user domain > ^ OK, now I see what you mean by 'moving host forward'. We don't do that. Siddhesh > hoshostser domain > > hoshost tserdomain > > hoshost tser domain > >
diff --git a/string/extension.h b/string/extension.h new file mode 100644 index 0000000..963dccf --- /dev/null +++ b/string/extension.h @@ -0,0 +1,36 @@ +/* Copyright (C) 2014 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <http://www.gnu.org/licenses/>. */ + + +#ifndef _STRING_EXTENSION_H +#define _STRING_EXTENSION_H 1 + +#include <stdint.h> +#include <string.h> + + +static inline +char * +stpmove (char *dest, const char *src) +{ + size_t len = strlen (src); + memmove (dest, src, len); + return dest + len; +} + + +#endif