1. 03 Oct, 2016 3 commits
    • Austin Clements's avatar
      runtime: weaken claim about SetFinalizer panicking · 99339dd4
      Austin Clements authored
      Currently the SetFinalizer documentation makes a strong claim that
      SetFinalizer will panic if the pointer is not to an object allocated
      by calling new, to a composite literal, or to a local variable. This
      is not true. For example, it doesn't panic when passed the address of
      a package-level variable. Nor can we practically make it true. For
      example, we can't distinguish between passing a pointer to a composite
      literal and passing a pointer to its first field.
      
      Hence, weaken the guarantee to say that it "may" panic.
      
      Updates #17311. (Might fix it, depending on what we want to do with
      package-level variables.)
      
      Change-Id: I1c68ea9d0a5bbd3dd1b7ce329d92b0f05e2e0877
      Reviewed-on: https://go-review.googlesource.com/30137Reviewed-by: default avatarBrad Fitzpatrick <bradfitz@golang.org>
      99339dd4
    • Brad Fitzpatrick's avatar
      sort: add Slice, SliceStable, and SliceIsSorted · 22a2bdfe
      Brad Fitzpatrick authored
      Add helpers for sorting slices.
      
      Slice sorts slices:
      
          sort.Slice(s, func(i, j int) bool {
              if s[i].Foo != s[j].Foo {
                  return s[i].Foo < s[j].Foo
              }
              return s[i].Bar < s[j].Bar
          })
      
      SliceStable is the same, but does a stable sort.
      
      SliceIsSorted reports whether a slice is already sorted.
      
      Fixes #16721
      
      Change-Id: I346530af1c5dee148ea9be85946fe08f23ae53e7
      Reviewed-on: https://go-review.googlesource.com/27321
      Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarRuss Cox <rsc@golang.org>
      22a2bdfe
    • Florian Uekermann's avatar
      math/rand: add Rand.Uint64 · 003a598b
      Florian Uekermann authored
      This adds Uint64 methods to Rand and rngSource.
      Rand.Uint64 uses Source.Uint64 directly if it is present.
      
      rngSource.Uint64 provides access to all 64 bits generated by the
      underlying ALFG. To ensure high seed quality a 64th bit has been added
      to all elements of the array of "cooked" random numbers that are used
      for seeding. gen_cooked.go generates both the 63 bit and 64 bit array.
      
      Fixes #4254
      
      Change-Id: I22855618ac69abae3d2799b3e7e59996d4c5a4b1
      Reviewed-on: https://go-review.googlesource.com/27253
      Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarBrad Fitzpatrick <bradfitz@golang.org>
      003a598b
  2. 02 Oct, 2016 4 commits
    • Adam Langley's avatar
      crypto/ecdsa: correct code comment. · 99841957
      Adam Langley authored
      The code comment mixed up max and min. In this case, min is correct
      because this entropy is only used to make the signature scheme
      probabilistic. (I.e. if it were fixed then the scheme would still be
      secure except that key.Sign(foo) would always give the same result for a
      fixed key and foo.)
      
      For this purpose, 256-bits is plenty.
      
      Fixes #16819.
      
      Change-Id: I309bb312b775cf0c4b7463c980ba4b19ad412c36
      Reviewed-on: https://go-review.googlesource.com/30153
      Run-TryBot: Adam Langley <agl@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarBrad Fitzpatrick <bradfitz@golang.org>
      99841957
    • Adam Langley's avatar
      crypto/x509: return better error when a certificate contains no names. · 49aa1d79
      Adam Langley authored
      Currently, if a certificate contains no names (that we parsed),
      verification will return the confusing error:
          x509: certificate is valid for , not example.com.
      
      This change improves the error for that situation.
      
      Fixes #16834.
      
      Change-Id: I2ed9ed08298d7d50df758e503bdb55277449bf55
      Reviewed-on: https://go-review.googlesource.com/30152Reviewed-by: default avatarBrad Fitzpatrick <bradfitz@golang.org>
      Run-TryBot: Adam Langley <agl@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      49aa1d79
    • Adam Langley's avatar
      crypto/x509: fix name constraints handling. · e4dafa32
      Adam Langley authored
      This change brings the behaviour of X.509 name constraints into line
      with NSS[1]. In this area, the behavior specified by the RFC and by NIST
      differs and this code follows the NIST behaviour.
      
      [1] https://github.com/servo/nss/blob/master/lib/certdb/genname.c
      
      Fixes #16347, fixes #14833.
      
      Change-Id: I5acd1970041291c2e3936f5b1fd36f2a0338e613
      Reviewed-on: https://go-review.googlesource.com/30155Reviewed-by: default avatarBrad Fitzpatrick <bradfitz@golang.org>
      e4dafa32
    • Emmanuel Odeke's avatar
      cmd/compile: improve error message for wrong number of arguments to return · 2d573eee
      Emmanuel Odeke authored
      Fixes #4215.
      Fixes #6750.
      
      Improves the error message for wrong number of arguments by comparing
      the signature of the return call site arguments, versus the function's
      expected return arguments.
      
      In this CL, the signature representation of:
      + ideal numbers(TIDEAL) ie float*, complex*, rune, int is
      "number" instead of "untyped number".
      + idealstring is "string" instead of "untyped string".
      + idealbool is "bool" instead of "untyped bool".
      
      However, the representation of other types remains as the compiler
      would produce.
      
      * Example 1(in the error messages, if all lines were printed):
      $ cat main.go && go run main.go
      package main
      
      func foo() (int, int) {
        return 2.3
      }
      
      func foo2() {
        return int(2), 2
      }
      
      func foo3(v int) (a, b, c, d int) {
        if v >= 5 {
          return 1
        }
        return 2, 3
      }
      
      func foo4(name string) (string, int) {
        switch name {
        case "cow":
          return "moo"
        case "dog":
          return "dog", 10, true
        case "fish":
          return ""
        default:
          return "lizard", 10
        }
      }
      
      type S int
      type T string
      type U float64
      
      func foo5() (S, T, U) {
        if false {
          return ""
        } else {
          ptr := new(T)
          return ptr
        }
        return new(S), 12.34, 1 + 0i, 'r', true
      }
      
      func foo6() (T, string) {
        return "T"
      }
      
      ./issue4215.go:4: not enough arguments to return, got (number) want (int, int)
      ./issue4215.go:8: too many arguments to return, got (int, number) want ()
      ./issue4215.go:13: not enough arguments to return, got (number) want (int, int, int, int)
      ./issue4215.go:15: not enough arguments to return, got (number, number) want (int, int, int, int)
      ./issue4215.go:21: not enough arguments to return, got (string) want (string, int)
      ./issue4215.go:23: too many arguments to return, got (string, number, bool) want (string, int)
      ./issue4215.go:25: not enough arguments to return, got (string) want (string, int)
      ./issue4215.go:37: not enough arguments to return, got (string) want (S, T, U)
      ./issue4215.go:40: not enough arguments to return, got (*T) want (S, T, U)
      ./issue4215.go:42: too many arguments to return, got (*S, number, number, number, bool) want (S, T, U)
      ./issue4215.go:46: not enough arguments to return, got (string) want (T, string)
      ./issue4215.go:46: too many errors
      
      * Example 2:
      $ cat 6750.go && go run 6750.go
      package main
      
      import "fmt"
      
      func printmany(nums ...int) {
        for i, n := range nums {
          fmt.Printf("%d: %d\n", i, n)
        }
        fmt.Printf("\n")
      }
      
      func main() {
        printmany(1, 2, 3)
        printmany([]int{1, 2, 3}...)
        printmany(1, "abc", []int{2, 3}...)
      }
      ./issue6750.go:15: too many arguments in call to printmany, got (number, string, []int) want (...int)
      
      Change-Id: I6fdce78553ae81770840070e2c975d3e3c83d5d8
      Reviewed-on: https://go-review.googlesource.com/25156
      Run-TryBot: Matthew Dempsky <mdempsky@google.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarKeith Randall <khr@golang.org>
      2d573eee
  3. 01 Oct, 2016 7 commits
  4. 30 Sep, 2016 14 commits
  5. 29 Sep, 2016 12 commits