Skip to content

Commit d732ab0

Browse files
committed
Explicitly specify FILE_READ_ATTRIBUTES when optning files to read attributes.
1 parent 88b0be8 commit d732ab0

File tree

1 file changed

+84
-52
lines changed

1 file changed

+84
-52
lines changed

src/operations.cpp

Lines changed: 84 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -1252,7 +1252,13 @@ namespace {
12521252

12531253
inline bool is_reparse_point_a_symlink(path const& p)
12541254
{
1255-
handle_wrapper h(create_file_handle(p, 0u, FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, NULL, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS | FILE_FLAG_OPEN_REPARSE_POINT));
1255+
handle_wrapper h(create_file_handle(
1256+
p,
1257+
FILE_READ_ATTRIBUTES,
1258+
FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE,
1259+
NULL,
1260+
OPEN_EXISTING,
1261+
FILE_FLAG_BACKUP_SEMANTICS | FILE_FLAG_OPEN_REPARSE_POINT));
12561262
if (BOOST_UNLIKELY(h.handle == INVALID_HANDLE_VALUE))
12571263
return false;
12581264

@@ -1357,8 +1363,13 @@ bool remove_nt5_impl(path const& p, DWORD attrs, error_code* ec)
13571363
//! remove() implementation for Windows Vista and newer
13581364
bool remove_nt6_impl(path const& p, remove_impl_type impl, error_code* ec)
13591365
{
1360-
handle_wrapper h(create_file_handle(p, DELETE | FILE_READ_ATTRIBUTES | FILE_WRITE_ATTRIBUTES, FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE,
1361-
NULL, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS | FILE_FLAG_OPEN_REPARSE_POINT));
1366+
handle_wrapper h(create_file_handle(
1367+
p,
1368+
DELETE | FILE_READ_ATTRIBUTES | FILE_WRITE_ATTRIBUTES,
1369+
FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE,
1370+
NULL,
1371+
OPEN_EXISTING,
1372+
FILE_FLAG_BACKUP_SEMANTICS | FILE_FLAG_OPEN_REPARSE_POINT));
13621373
DWORD err;
13631374
if (BOOST_UNLIKELY(h.handle == INVALID_HANDLE_VALUE))
13641375
{
@@ -2373,7 +2384,7 @@ bool copy_file(path const& from, path const& to, unsigned int options, error_cod
23732384
// Create handle_wrappers here so that CloseHandle calls don't clobber error code returned by GetLastError
23742385
handle_wrapper hw_from, hw_to;
23752386

2376-
hw_from.handle = create_file_handle(from.c_str(), 0u, FILE_SHARE_DELETE | FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS);
2387+
hw_from.handle = create_file_handle(from.c_str(), FILE_READ_ATTRIBUTES, FILE_SHARE_DELETE | FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS);
23772388

23782389
FILETIME lwt_from;
23792390
if (hw_from.handle == INVALID_HANDLE_VALUE)
@@ -2384,15 +2395,15 @@ bool copy_file(path const& from, path const& to, unsigned int options, error_cod
23842395
return false;
23852396
}
23862397

2387-
if (!::GetFileTime(hw_from.handle, 0, 0, &lwt_from))
2398+
if (!::GetFileTime(hw_from.handle, NULL, NULL, &lwt_from))
23882399
goto fail_last_error;
23892400

2390-
hw_to.handle = create_file_handle(to.c_str(), 0u, FILE_SHARE_DELETE | FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS);
2401+
hw_to.handle = create_file_handle(to.c_str(), FILE_READ_ATTRIBUTES, FILE_SHARE_DELETE | FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS);
23912402

23922403
if (hw_to.handle != INVALID_HANDLE_VALUE)
23932404
{
23942405
FILETIME lwt_to;
2395-
if (!::GetFileTime(hw_to.handle, 0, 0, &lwt_to))
2406+
if (!::GetFileTime(hw_to.handle, NULL, NULL, &lwt_to))
23962407
goto fail_last_error;
23972408

23982409
ULONGLONG tfrom = (static_cast< ULONGLONG >(lwt_from.dwHighDateTime) << 32) | static_cast< ULONGLONG >(lwt_from.dwLowDateTime);
@@ -2894,23 +2905,21 @@ bool equivalent(path const& p1, path const& p2, system::error_code* ec)
28942905
// been retrieved.
28952906

28962907
// p2 is done first, so any error reported is for p1
2897-
handle_wrapper h2(
2898-
create_file_handle(
2899-
p2.c_str(),
2900-
0u,
2901-
FILE_SHARE_DELETE | FILE_SHARE_READ | FILE_SHARE_WRITE,
2902-
NULL,
2903-
OPEN_EXISTING,
2904-
FILE_FLAG_BACKUP_SEMANTICS));
2905-
2906-
handle_wrapper h1(
2907-
create_file_handle(
2908-
p1.c_str(),
2909-
0u,
2910-
FILE_SHARE_DELETE | FILE_SHARE_READ | FILE_SHARE_WRITE,
2911-
NULL,
2912-
OPEN_EXISTING,
2913-
FILE_FLAG_BACKUP_SEMANTICS));
2908+
handle_wrapper h2(create_file_handle(
2909+
p2.c_str(),
2910+
FILE_READ_ATTRIBUTES,
2911+
FILE_SHARE_DELETE | FILE_SHARE_READ | FILE_SHARE_WRITE,
2912+
NULL,
2913+
OPEN_EXISTING,
2914+
FILE_FLAG_BACKUP_SEMANTICS));
2915+
2916+
handle_wrapper h1(create_file_handle(
2917+
p1.c_str(),
2918+
FILE_READ_ATTRIBUTES,
2919+
FILE_SHARE_DELETE | FILE_SHARE_READ | FILE_SHARE_WRITE,
2920+
NULL,
2921+
OPEN_EXISTING,
2922+
FILE_FLAG_BACKUP_SEMANTICS));
29142923

29152924
if (BOOST_UNLIKELY(h1.handle == INVALID_HANDLE_VALUE || h2.handle == INVALID_HANDLE_VALUE))
29162925
{
@@ -3044,8 +3053,13 @@ uintmax_t hard_link_count(path const& p, system::error_code* ec)
30443053

30453054
#else // defined(BOOST_POSIX_API)
30463055

3047-
handle_wrapper h(
3048-
create_file_handle(p.c_str(), 0u, FILE_SHARE_DELETE | FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS));
3056+
handle_wrapper h(create_file_handle(
3057+
p.c_str(),
3058+
FILE_READ_ATTRIBUTES,
3059+
FILE_SHARE_DELETE | FILE_SHARE_READ | FILE_SHARE_WRITE,
3060+
NULL,
3061+
OPEN_EXISTING,
3062+
FILE_FLAG_BACKUP_SEMANTICS));
30493063

30503064
if (BOOST_UNLIKELY(h.handle == INVALID_HANDLE_VALUE))
30513065
{
@@ -3166,8 +3180,13 @@ std::time_t creation_time(path const& p, system::error_code* ec)
31663180

31673181
#else // defined(BOOST_POSIX_API)
31683182

3169-
handle_wrapper hw(
3170-
create_file_handle(p.c_str(), 0u, FILE_SHARE_DELETE | FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS));
3183+
handle_wrapper hw(create_file_handle(
3184+
p.c_str(),
3185+
FILE_READ_ATTRIBUTES,
3186+
FILE_SHARE_DELETE | FILE_SHARE_READ | FILE_SHARE_WRITE,
3187+
NULL,
3188+
OPEN_EXISTING,
3189+
FILE_FLAG_BACKUP_SEMANTICS));
31713190

31723191
if (BOOST_UNLIKELY(hw.handle == INVALID_HANDLE_VALUE))
31733192
{
@@ -3219,8 +3238,13 @@ std::time_t last_write_time(path const& p, system::error_code* ec)
32193238

32203239
#else // defined(BOOST_POSIX_API)
32213240

3222-
handle_wrapper hw(
3223-
create_file_handle(p.c_str(), 0u, FILE_SHARE_DELETE | FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS));
3241+
handle_wrapper hw(create_file_handle(
3242+
p.c_str(),
3243+
FILE_READ_ATTRIBUTES,
3244+
FILE_SHARE_DELETE | FILE_SHARE_READ | FILE_SHARE_WRITE,
3245+
NULL,
3246+
OPEN_EXISTING,
3247+
FILE_FLAG_BACKUP_SEMANTICS));
32243248

32253249
if (BOOST_UNLIKELY(hw.handle == INVALID_HANDLE_VALUE))
32263250
{
@@ -3281,8 +3305,13 @@ void last_write_time(path const& p, const std::time_t new_time, system::error_co
32813305

32823306
#else // defined(BOOST_POSIX_API)
32833307

3284-
handle_wrapper hw(
3285-
create_file_handle(p.c_str(), FILE_WRITE_ATTRIBUTES, FILE_SHARE_DELETE | FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS));
3308+
handle_wrapper hw(create_file_handle(
3309+
p.c_str(),
3310+
FILE_WRITE_ATTRIBUTES,
3311+
FILE_SHARE_DELETE | FILE_SHARE_READ | FILE_SHARE_WRITE,
3312+
NULL,
3313+
OPEN_EXISTING,
3314+
FILE_FLAG_BACKUP_SEMANTICS));
32863315

32873316
if (BOOST_UNLIKELY(hw.handle == INVALID_HANDLE_VALUE))
32883317
{
@@ -3294,7 +3323,7 @@ void last_write_time(path const& p, const std::time_t new_time, system::error_co
32943323
FILETIME lwt;
32953324
to_FILETIME(new_time, lwt);
32963325

3297-
if (BOOST_UNLIKELY(!::SetFileTime(hw.handle, 0, 0, &lwt)))
3326+
if (BOOST_UNLIKELY(!::SetFileTime(hw.handle, NULL, NULL, &lwt)))
32983327
goto fail;
32993328

33003329
#endif // defined(BOOST_POSIX_API)
@@ -3445,8 +3474,13 @@ path read_symlink(path const& p, system::error_code* ec)
34453474

34463475
#else
34473476

3448-
handle_wrapper h(
3449-
create_file_handle(p.c_str(), 0u, FILE_SHARE_DELETE | FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS | FILE_FLAG_OPEN_REPARSE_POINT));
3477+
handle_wrapper h(create_file_handle(
3478+
p.c_str(),
3479+
FILE_READ_ATTRIBUTES,
3480+
FILE_SHARE_DELETE | FILE_SHARE_READ | FILE_SHARE_WRITE,
3481+
NULL,
3482+
OPEN_EXISTING,
3483+
FILE_FLAG_BACKUP_SEMANTICS | FILE_FLAG_OPEN_REPARSE_POINT));
34503484

34513485
DWORD error;
34523486
if (BOOST_UNLIKELY(h.handle == INVALID_HANDLE_VALUE))
@@ -3460,7 +3494,7 @@ path read_symlink(path const& p, system::error_code* ec)
34603494

34613495
boost::scoped_ptr< reparse_data_buffer_with_storage > buf(new reparse_data_buffer_with_storage);
34623496
DWORD sz = 0u;
3463-
if (BOOST_UNLIKELY(!::DeviceIoControl(h.handle, FSCTL_GET_REPARSE_POINT, 0, 0, buf.get(), sizeof(*buf), &sz, 0)))
3497+
if (BOOST_UNLIKELY(!::DeviceIoControl(h.handle, FSCTL_GET_REPARSE_POINT, NULL, 0, buf.get(), sizeof(*buf), &sz, NULL)))
34643498
{
34653499
error = ::GetLastError();
34663500
goto return_error;
@@ -3711,14 +3745,13 @@ file_status status(path const& p, error_code* ec)
37113745
if (st.type() == symlink_file)
37123746
{
37133747
// Resolve the symlink
3714-
handle_wrapper h(
3715-
create_file_handle(
3716-
p.c_str(),
3717-
0u, // dwDesiredAccess; attributes only
3718-
FILE_SHARE_DELETE | FILE_SHARE_READ | FILE_SHARE_WRITE,
3719-
NULL, // lpSecurityAttributes
3720-
OPEN_EXISTING,
3721-
FILE_FLAG_BACKUP_SEMANTICS));
3748+
handle_wrapper h(create_file_handle(
3749+
p.c_str(),
3750+
FILE_READ_ATTRIBUTES, // dwDesiredAccess; attributes only
3751+
FILE_SHARE_DELETE | FILE_SHARE_READ | FILE_SHARE_WRITE,
3752+
NULL, // lpSecurityAttributes
3753+
OPEN_EXISTING,
3754+
FILE_FLAG_BACKUP_SEMANTICS));
37223755

37233756
if (h.handle == INVALID_HANDLE_VALUE)
37243757
{
@@ -3814,14 +3847,13 @@ file_status symlink_status(path const& p, error_code* ec)
38143847

38153848
#else // defined(BOOST_POSIX_API)
38163849

3817-
handle_wrapper h(
3818-
create_file_handle(
3819-
p.c_str(),
3820-
0u, // dwDesiredAccess; attributes only
3821-
FILE_SHARE_DELETE | FILE_SHARE_READ | FILE_SHARE_WRITE,
3822-
NULL, // lpSecurityAttributes
3823-
OPEN_EXISTING,
3824-
FILE_FLAG_BACKUP_SEMANTICS | FILE_FLAG_OPEN_REPARSE_POINT));
3850+
handle_wrapper h(create_file_handle(
3851+
p.c_str(),
3852+
FILE_READ_ATTRIBUTES, // dwDesiredAccess; attributes only
3853+
FILE_SHARE_DELETE | FILE_SHARE_READ | FILE_SHARE_WRITE,
3854+
NULL, // lpSecurityAttributes
3855+
OPEN_EXISTING,
3856+
FILE_FLAG_BACKUP_SEMANTICS | FILE_FLAG_OPEN_REPARSE_POINT));
38253857

38263858
if (h.handle == INVALID_HANDLE_VALUE)
38273859
{

0 commit comments

Comments
 (0)