diff options
author | Devon H. O'Dell <devon.odell@gmail.com> | 2010-01-13 16:48:14 -0800 |
---|---|---|
committer | Devon H. O'Dell <devon.odell@gmail.com> | 2010-01-13 16:48:14 -0800 |
commit | 7049a2be933b1660daed379b0f0fabcb1ea2b448 (patch) | |
tree | 13e130c4006c4c3ce7168492369524ca446cfeab | |
parent | 56c1aa8691ddc1298afaa0fe1619f724f47ff047 (diff) | |
download | go-7049a2be933b1660daed379b0f0fabcb1ea2b448.tar.gz |
cgo: Only allow numeric / string / character type constants for references
to #defined things.
Fixes issue 520.
R=rsc, rsaarelm
CC=golang-dev
http://codereview.appspot.com/186138
Committer: Russ Cox <rsc@golang.org>
-rw-r--r-- | src/cmd/cgo/gcc.go | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/src/cmd/cgo/gcc.go b/src/cmd/cgo/gcc.go index 4f65a1afb..c525b492a 100644 --- a/src/cmd/cgo/gcc.go +++ b/src/cmd/cgo/gcc.go @@ -48,7 +48,13 @@ func (p *Prog) loadDebugInfo() { val = strings.TrimSpace(line[tabIndex:]) } - defines[key] = val + // Only allow string, character, and numeric constants. Ignoring #defines for + // symbols allows those symbols to be referenced in Go, as they will be + // translated by gcc later. + _, err := strconv.Atoi(string(val[0])) + if err == nil || val[0] == '\'' || val[0] == '"' { + defines[key] = val + } } // Construct a slice of unique names from p.Crefs. |