diff options
| author | Brian Anderson <banderson@mozilla.com> | 2014-09-25 13:01:32 -0700 |
|---|---|---|
| committer | Brian Anderson <banderson@mozilla.com> | 2014-09-26 10:17:03 -0700 |
| commit | 3b3d7021e4a2bccace8816bb24eec33eac09c9f2 (patch) | |
| tree | ac28ac0674f39528c2ce53ced6fc8faa616a4e4b | |
| parent | a52eaaa996a7edeb699a756f755ad4b8c23dc9df (diff) | |
| download | rust-3b3d7021e4a2bccace8816bb24eec33eac09c9f2.tar.gz rust-3b3d7021e4a2bccace8816bb24eec33eac09c9f2.zip | |
Add test for #13259. Closes #13259 and #14742
| -rw-r--r-- | src/test/run-pass/issue-13259-windows-tcb-trash.rs | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/src/test/run-pass/issue-13259-windows-tcb-trash.rs b/src/test/run-pass/issue-13259-windows-tcb-trash.rs new file mode 100644 index 00000000000..94953730df8 --- /dev/null +++ b/src/test/run-pass/issue-13259-windows-tcb-trash.rs @@ -0,0 +1,28 @@ +extern crate libc; +use libc::{c_void, LPVOID, DWORD}; +use libc::types::os::arch::extra::LPWSTR; + +extern "system" { + fn FormatMessageW(flags: DWORD, + lpSrc: LPVOID, + msgId: DWORD, + langId: DWORD, + buf: LPWSTR, + nsize: DWORD, + args: *const c_void) + -> DWORD; +} + +fn test() { + let mut buf: [u16, ..50] = [0, ..50]; + let ret = unsafe { + FormatMessageW(0x1000, 0 as *mut c_void, 1, 0x400, + buf.as_mut_ptr(), buf.len() as u32, 0 as *const c_void) + }; + // On some 32-bit Windowses (Win7-8 at least) this will fail with segmented + // stacks taking control of pvArbitrary + assert!(ret != 0); +} +fn main() { + test() +} \ No newline at end of file |
