Fix magic SSL reason codes. SSL reason codes corresponding to alerts have special values. Teach make_errors.go that values above 1000 are reserved (otherwise it will assign new values in that namespace). Also fix all the existing reason codes which corresponded to alerts. Change-Id: Ieabdf8fd59f4802938616934e1d84e659227cf84 Reviewed-on: https://boringssl-review.googlesource.com/1212 Reviewed-by: Adam Langley <agl@google.com>
diff --git a/util/make_errors.go b/util/make_errors.go index 20b3e2d..f770e3d 100644 --- a/util/make_errors.go +++ b/util/make_errors.go
@@ -28,6 +28,11 @@ "unicode" ) +// ssl.h reserves values 1000 and above for error codes corresponding to +// alerts. If automatically assigned reason codes exceed this value, this script +// will error. This must be kept in sync with SSL_AD_REASON_OFFSET in ssl.h. +const reservedReasonCode = 1000 + var resetFlag *bool = flag.Bool("reset", false, "If true, ignore current assignments and reassign from scratch") func makeErrors(reset bool) error { @@ -59,7 +64,14 @@ if reset { err = nil functions = make(map[string]int) - reasons = make(map[string]int) + // Retain any reason codes above reservedReasonCode. + newReasons := make(map[string]int) + for key, value := range reasons { + if value >= reservedReasonCode { + newReasons[key] = value + } + } + reasons = newReasons } if err != nil { @@ -87,8 +99,8 @@ } } - assignNewValues(functions) - assignNewValues(reasons) + assignNewValues(functions, -1) + assignNewValues(reasons, reservedReasonCode) headerFile, err = os.Open(headerPath) if err != nil { @@ -294,10 +306,13 @@ } } -func assignNewValues(assignments map[string]int) { +func assignNewValues(assignments map[string]int, reserved int) { max := 99 for _, value := range assignments { + if reserved >= 0 && value >= reserved { + continue + } if value > max { max = value } @@ -307,6 +322,11 @@ for key, value := range assignments { if value == -1 { + if reserved >= 0 && max >= reserved { + // If this happens, try passing + // -reset. Otherwise bump up reservedReasonCode. + panic("Automatically-assigned values exceeded limit!") + } assignments[key] = max max++ }