mirror of https://github.com/lukechilds/node.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
54 lines
1.6 KiB
54 lines
1.6 KiB
12 years ago
|
#!/usr/bin/env python
|
||
|
|
||
|
# Copyright (c) 2012 Google Inc. All rights reserved.
|
||
|
# Use of this source code is governed by a BSD-style license that can be
|
||
|
# found in the LICENSE file.
|
||
|
|
||
|
"""
|
||
|
Make sure buffer security check setting is extracted properly.
|
||
|
"""
|
||
|
|
||
|
import TestGyp
|
||
|
|
||
|
import sys
|
||
|
|
||
|
if sys.platform == 'win32':
|
||
|
test = TestGyp.TestGyp(formats=['msvs', 'ninja'])
|
||
|
|
||
|
CHDIR = 'compiler-flags'
|
||
|
test.run_gyp('buffer-security-check.gyp', chdir=CHDIR)
|
||
|
test.build('buffer-security-check.gyp', chdir=CHDIR)
|
||
|
|
||
|
def GetDisassemblyOfMain(exe):
|
||
|
# The standard library uses buffer security checks independent of our
|
||
|
# buffer security settings, so we extract just our code (i.e. main()) to
|
||
|
# check against.
|
||
|
full_path = test.built_file_path(exe, chdir=CHDIR)
|
||
|
output = test.run_dumpbin('/disasm', full_path)
|
||
|
result = []
|
||
|
in_main = False
|
||
|
for line in output.splitlines():
|
||
|
if line == '_main:':
|
||
|
in_main = True
|
||
|
elif in_main:
|
||
|
# Disassembly of next function starts.
|
||
|
if line.startswith('_'):
|
||
|
break
|
||
|
result.append(line)
|
||
|
return '\n'.join(result)
|
||
|
|
||
|
# Buffer security checks are on by default, make sure security_cookie
|
||
|
# appears in the disassembly of our code.
|
||
|
if 'security_cookie' not in GetDisassemblyOfMain('test_bsc_unset.exe'):
|
||
|
test.fail_test()
|
||
|
|
||
|
# Explicitly on.
|
||
|
if 'security_cookie' not in GetDisassemblyOfMain('test_bsc_on.exe'):
|
||
|
test.fail_test()
|
||
|
|
||
|
# Explicitly off, shouldn't be a reference to the security cookie.
|
||
|
if 'security_cookie' in GetDisassemblyOfMain('test_bsc_off.exe'):
|
||
|
test.fail_test()
|
||
|
|
||
|
test.pass_test()
|