Fix NULL dereference in the case of an unexpected extension from a server. Due to a typo, when a server sent an unknown extension, the extension number would be taken from a NULL structure rather than from the variable of the same name that's in the local scope. BUG=517935 Change-Id: I29d5eb3c56cded40f6155a81556199f12439ae06 Reviewed-on: https://boringssl-review.googlesource.com/5650 Reviewed-by: Adam Langley <agl@google.com>
diff --git a/ssl/custom_extensions.c b/ssl/custom_extensions.c index d0bc257..a56c0f6 100644 --- a/ssl/custom_extensions.c +++ b/ssl/custom_extensions.c
@@ -133,7 +133,7 @@ /* Also, if we didn't send the extension, that's also unacceptable. */ !(ssl->s3->tmp.custom_extensions.sent & (1u << index))) { OPENSSL_PUT_ERROR(SSL, SSL_R_UNEXPECTED_EXTENSION); - ERR_add_error_dataf("extension: %u", (unsigned)ext->value); + ERR_add_error_dataf("extension: %u", (unsigned)value); *out_alert = SSL_AD_DECODE_ERROR; return 0; }
diff --git a/ssl/test/runner/runner.go b/ssl/test/runner/runner.go index ff43678..2c01f15 100644 --- a/ssl/test/runner/runner.go +++ b/ssl/test/runner/runner.go
@@ -3789,6 +3789,19 @@ }, flags: []string{"-enable-server-custom-extension", "-custom-extension-fail-add"}, }) + + // Test an unknown extension from the server. + testCases = append(testCases, testCase{ + testType: clientTest, + name: "UnknownExtension-Client", + config: Config{ + Bugs: ProtocolBugs{ + CustomExtension: expectedContents, + }, + }, + shouldFail: true, + expectedError: ":UNEXPECTED_EXTENSION:", + }) } func worker(statusChan chan statusMsg, c chan *testCase, shimPath string, wg *sync.WaitGroup) {