[PATCH 1/2] server: Terminating '\' in the registry root name is optional.
Alexandre Julliard
julliard at winehq.org
Mon Dec 6 16:06:40 CST 2021
Dmitry Timoshkov <dmitry at baikal.ru> writes:
> diff --git a/server/registry.c b/server/registry.c
> index b00abdbc004..ebe11db1039 100644
> --- a/server/registry.c
> +++ b/server/registry.c
> @@ -127,7 +127,7 @@ static const timeout_t save_period = 30 * -TICKS_PER_SEC; /* delay between peri
> static struct timeout_user *save_timeout_user; /* saving timer */
> static enum prefix_type { PREFIX_UNKNOWN, PREFIX_32BIT, PREFIX_64BIT } prefix_type;
>
> -static const WCHAR root_name[] = { '\\','R','e','g','i','s','t','r','y','\\' };
> +static const WCHAR root_name[] = { '\\','R','e','g','i','s','t','r','y' };
> static const WCHAR wow6432node[] = {'W','o','w','6','4','3','2','N','o','d','e'};
> static const WCHAR symlink_value[] = {'S','y','m','b','o','l','i','c','L','i','n','k','V','a','l','u','e'};
> static const struct unicode_str symlink_str = { symlink_value, sizeof(symlink_value) };
> @@ -411,7 +411,7 @@ static WCHAR *key_get_full_name( struct object *obj, data_size_t *ret_len )
> {
> static const WCHAR backslash = '\\';
> struct key *key = (struct key *) obj;
> - data_size_t len = sizeof(root_name) - sizeof(WCHAR);
> + data_size_t len = sizeof(root_name);
> char *ret;
>
> if (key->flags & KEY_DELETED)
> @@ -431,7 +431,7 @@ static WCHAR *key_get_full_name( struct object *obj, data_size_t *ret_len )
> len -= key->namelen + sizeof(WCHAR);
> memcpy( ret + len, &backslash, sizeof(WCHAR) );
> }
> - memcpy( ret, root_name, sizeof(root_name) - sizeof(WCHAR) );
> + memcpy( ret, root_name, sizeof(root_name) );
> return (WCHAR *)ret;
> }
>
> @@ -483,6 +483,11 @@ static inline void get_req_path( struct unicode_str *str, int skip_root )
> {
> str->str += ARRAY_SIZE( root_name );
> str->len -= sizeof(root_name);
> + if (str->str[0] == '\\')
> + {
> + str->str++;
> + str->len -= sizeof(WCHAR);
> + }
You need to check the length first, and you need to reject anything that
isn't a backslash at that point.
I feel that using the normal path handling also for the first component,
possibly creating a root key of that name, would be a better approach.
--
Alexandre Julliard
julliard at winehq.org
More information about the wine-devel
mailing list