Welcome! Log In Create A New Profile

Advanced

Re: [PATCH 03 of 12] Win32: non-ASCII directory names support in ngx_getcwd()

Sergey Kandaurov
February 17, 2023 10:04AM
> On 13 Jan 2023, at 01:35, Maxim Dounin <mdounin@mdounin.ru> wrote:
>
> # HG changeset patch
> # User Maxim Dounin <mdounin@mdounin.ru>
> # Date 1673548916 -10800
> # Thu Jan 12 21:41:56 2023 +0300
> # Node ID 7cf820c46860796cff91f53a5d2db669bb5b5a6c
> # Parent d05c0adf5890aecc68ce8906ef19ca07502ed071
> Win32: non-ASCII directory names support in ngx_getcwd().
>
> This makes it possible to start nginx without a prefix explicitly set
> in a directory with non-ASCII characters in it.
>
> diff -r d05c0adf5890 -r 7cf820c46860 src/os/win32/ngx_files.c
> --- a/src/os/win32/ngx_files.c Thu Jan 12 21:41:39 2023 +0300
> +++ b/src/os/win32/ngx_files.c Thu Jan 12 21:41:56 2023 +0300
> @@ -428,6 +428,30 @@ ngx_realpath(u_char *path, u_char *resol
> }
>
>
> +size_t
> +ngx_getcwd(u_char *buf, size_t size)
> +{
> + u_char *p;
> + size_t n;
> + u_short utf16[NGX_MAX_PATH];
> +
> + n = GetCurrentDirectoryW(NGX_MAX_PATH, utf16);
> +
> + if (n == 0) {
> + return 0;
> + }
> +
> + p = ngx_utf16_to_utf8(buf, utf16, &size, NULL);
> +

No error check may result in double-free, first freed
after (re-)allocation on NGX_EILSEQ, then as below.

> + if (p != buf) {
> + ngx_free(p);
> + return 0;

Why return an error if (re-)allocation happened?
Sizes (calculated in 1-byte units) above NGX_MAX_PATH
seem perfectly valid with multibyte UTF-8.

> + }
> +
> + return size - 1;
> +}
> +
> +
> ngx_int_t
> ngx_open_dir(ngx_str_t *name, ngx_dir_t *dir)
> {
> diff -r d05c0adf5890 -r 7cf820c46860 src/os/win32/ngx_files.h
> --- a/src/os/win32/ngx_files.h Thu Jan 12 21:41:39 2023 +0300
> +++ b/src/os/win32/ngx_files.h Thu Jan 12 21:41:56 2023 +0300
> @@ -178,8 +178,12 @@ void ngx_close_file_mapping(ngx_file_map
>
> u_char *ngx_realpath(u_char *path, u_char *resolved);
> #define ngx_realpath_n ""
> -#define ngx_getcwd(buf, size) GetCurrentDirectory(size, (char *) buf)
> +
> +
> +size_t ngx_getcwd(u_char *buf, size_t size);
> #define ngx_getcwd_n "GetCurrentDirectory()"
> +
> +
> #define ngx_path_separator(c) ((c) == '/' || (c) == '\\')
>
> #define NGX_HAVE_MAX_PATH 1

--
Sergey Kandaurov
_______________________________________________
nginx-devel mailing list
nginx-devel@nginx.org
https://mailman.nginx.org/mailman/listinfo/nginx-devel
Subject Author Views Posted

[PATCH 00 of 12] win32 non-ASCII names support fixes

Maxim Dounin 825 January 12, 2023 04:40PM

[PATCH 03 of 12] Win32: non-ASCII directory names support in ngx_getcwd()

Maxim Dounin 184 January 12, 2023 04:40PM

Re: [PATCH 03 of 12] Win32: non-ASCII directory names support in ngx_getcwd()

Sergey Kandaurov 119 February 17, 2023 10:04AM

Re: [PATCH 03 of 12] Win32: non-ASCII directory names support in ngx_getcwd()

Maxim Dounin 177 February 19, 2023 12:24PM

Re: [PATCH 03 of 12] Win32: non-ASCII directory names support in ngx_getcwd()

Sergey Kandaurov 112 February 22, 2023 11:02AM

[PATCH 01 of 12] Win32: non-ASCII names support in autoindex (ticket #458)

Maxim Dounin 139 January 12, 2023 04:40PM

Re: [PATCH 01 of 12] Win32: non-ASCII names support in autoindex (ticket #458)

Sergey Kandaurov 128 February 17, 2023 09:40AM

Re: [PATCH 01 of 12] Win32: non-ASCII names support in autoindex (ticket #458)

Maxim Dounin 112 February 19, 2023 12:18PM

Re: [PATCH 01 of 12] Win32: non-ASCII names support in autoindex (ticket #458)

Sergey Kandaurov 118 February 22, 2023 10:40AM

[PATCH 02 of 12] Win32: non-ASCII names support in "include" with wildcards

Maxim Dounin 146 January 12, 2023 04:40PM

Re: [PATCH 02 of 12] Win32: non-ASCII names support in "include" with wildcards

Sergey Kandaurov 142 February 17, 2023 09:54AM

Re: [PATCH 02 of 12] Win32: non-ASCII names support in "include" with wildcards

Maxim Dounin 162 February 19, 2023 12:20PM

Re: [PATCH 02 of 12] Win32: non-ASCII names support in "include" with wildcards

Sergey Kandaurov 120 February 22, 2023 10:50AM

[PATCH 04 of 12] Win32: non-ASCII directory names support in ngx_create_dir()

Maxim Dounin 150 January 12, 2023 04:40PM

Re: [PATCH 04 of 12] Win32: non-ASCII directory names support in ngx_create_dir()

Sergey Kandaurov 137 February 17, 2023 10:14AM

[PATCH 05 of 12] Win32: non-ASCII directory names support in ngx_delete_dir()

Maxim Dounin 127 January 12, 2023 04:40PM

Re: [PATCH 05 of 12] Win32: non-ASCII directory names support in ngx_delete_dir()

Sergey Kandaurov 126 February 17, 2023 10:14AM

[PATCH 06 of 12] Win32: reworked ngx_win32_rename_file() to check errors

Maxim Dounin 152 January 12, 2023 04:40PM

[PATCH 07 of 12] Win32: reworked ngx_win32_rename_file() to use nginx wrappers

Maxim Dounin 124 January 12, 2023 04:40PM

[PATCH 09 of 12] Win32: non-ASCII names support in ngx_rename_file()

Maxim Dounin 173 January 12, 2023 04:40PM

[PATCH 10 of 12] Win32: non-ASCII names support in ngx_open_tempfile()

Maxim Dounin 132 January 12, 2023 04:40PM

[PATCH 08 of 12] Win32: non-ASCII names support in ngx_delete_file()

Maxim Dounin 127 January 12, 2023 04:40PM

[PATCH 12 of 12] Win32: non-ASCII names in ngx_fs_bsize(), ngx_fs_available()

Maxim Dounin 149 January 12, 2023 04:40PM

[PATCH 11 of 12] Win32: fixed ngx_fs_bsize() for symlinks

Maxim Dounin 151 January 12, 2023 04:40PM

Re: [PATCH 11 of 12] Win32: fixed ngx_fs_bsize() for symlinks

Sergey Kandaurov 121 February 17, 2023 10:18AM

Re: [PATCH 11 of 12] Win32: fixed ngx_fs_bsize() for symlinks

Maxim Dounin 125 February 19, 2023 12:24PM

Re: [PATCH 11 of 12] Win32: fixed ngx_fs_bsize() for symlinks

Sergey Kandaurov 116 February 22, 2023 11:02AM

Re: [PATCH 11 of 12] Win32: fixed ngx_fs_bsize() for symlinks

Maxim Dounin 120 February 23, 2023 01:48PM

Re: [PATCH 11 of 12] Win32: fixed ngx_fs_bsize() for symlinks

Sergey Kandaurov 125 February 24, 2023 05:42AM

Re: [PATCH 11 of 12] Win32: fixed ngx_fs_bsize() for symlinks

Sergey Kandaurov 132 March 21, 2023 07:26AM



Sorry, you do not have permission to post/reply in this forum.

Online Users

Guests: 201
Record Number of Users: 8 on April 13, 2023
Record Number of Guests: 421 on December 02, 2018
Powered by nginx      Powered by FreeBSD      PHP Powered      Powered by MariaDB      ipv6 ready