]> git.lizzy.rs Git - rust.git/commitdiff
Fix SECURITY_SQOS_PRESENT missing
authorPaul Dicker <pitdicker@gmail.com>
Wed, 6 Feb 2019 13:17:22 +0000 (14:17 +0100)
committerPaul Dicker <pitdicker@gmail.com>
Fri, 15 Feb 2019 09:07:03 +0000 (10:07 +0100)
if security_qos_flags(SECURITY_ANONYMOUS) is set

src/libstd/sys/windows/fs.rs

index 533b8ae9ba2c043644affba3d7232667ab64258b..e1f815a525c9827c9284be02fbe41bcbfc68ba44 100644 (file)
@@ -191,7 +191,11 @@ pub fn new() -> OpenOptions {
     pub fn access_mode(&mut self, access_mode: u32) { self.access_mode = Some(access_mode); }
     pub fn share_mode(&mut self, share_mode: u32) { self.share_mode = share_mode; }
     pub fn attributes(&mut self, attrs: u32) { self.attributes = attrs; }
-    pub fn security_qos_flags(&mut self, flags: u32) { self.security_qos_flags = flags; }
+    pub fn security_qos_flags(&mut self, flags: u32) {
+        // We have to set `SECURITY_SQOS_PRESENT` here, because one of the valid flags we can
+        // receive is `SECURITY_ANONYMOUS = 0x0`, which we can't check for later on.
+        self.security_qos_flags = flags | c::SECURITY_SQOS_PRESENT;
+    }
     pub fn security_attributes(&mut self, attrs: c::LPSECURITY_ATTRIBUTES) {
         self.security_attributes = attrs as usize;
     }
@@ -239,7 +243,6 @@ fn get_flags_and_attributes(&self) -> c::DWORD {
         self.custom_flags |
         self.attributes |
         self.security_qos_flags |
-        if self.security_qos_flags != 0 { c::SECURITY_SQOS_PRESENT } else { 0 } |
         if self.create_new { c::FILE_FLAG_OPEN_REPARSE_POINT } else { 0 }
     }
 }