mirror of
				https://github.com/golang/go.git
				synced 2025-10-31 16:50:58 +00:00 
			
		
		
		
	 0c54225b51
			
		
	
	
		0c54225b51
		
	
	
	
	
		
			
			The recent linker changes broke NaCl support a month ago, and there are no known users of it. The NaCl code can always be recovered from the repository history. R=adg, r CC=golang-dev https://golang.org/cl/3671042
		
			
				
	
	
		
			36 lines
		
	
	
	
		
			1 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			36 lines
		
	
	
	
		
			1 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| // $G $D/$F.go && $L $F.$A &&
 | |
| //	((! sh -c ./$A.out) >/dev/null 2>&1 || echo BUG: should fail)
 | |
| 
 | |
| // Copyright 2009 The Go Authors. All rights reserved.
 | |
| // Use of this source code is governed by a BSD-style
 | |
| // license that can be found in the LICENSE file.
 | |
| 
 | |
| package main
 | |
| 
 | |
| import "unsafe"
 | |
| 
 | |
| func f([]byte) {
 | |
| 	panic("unreachable")
 | |
| }
 | |
| 
 | |
| var dummy [512<<20]byte	// give us a big address space
 | |
| func main() {
 | |
| 	// the test only tests what we intend to test
 | |
| 	// if dummy starts in the first 256 MB of memory.
 | |
| 	// otherwise there might not be anything mapped
 | |
| 	// at the address that might be accidentally
 | |
| 	// dereferenced below.
 | |
| 	if uintptr(unsafe.Pointer(&dummy)) > 256<<20 {
 | |
| 		panic("dummy too far out")
 | |
| 	}
 | |
| 
 | |
| 	// The problem here is that indexing into p[] with a large
 | |
| 	// enough index can jump out of the unmapped section
 | |
| 	// at the beginning of memory and into valid memory.
 | |
| 	//
 | |
| 	// To avoid needing a check on every slice beyond the
 | |
| 	// usual len and cap, we require the *array -> slice
 | |
| 	// conversion to do the check.
 | |
| 	var p *[1<<30]byte = nil
 | |
| 	f(p[0:])	// should crash
 | |
| }
 |