settings_writer.cc
Go to the documentation of this file.
1 /* Copyright (c) 2018, Google Inc.
2  *
3  * Permission to use, copy, modify, and/or distribute this software for any
4  * purpose with or without fee is hereby granted, provided that the above
5  * copyright notice and this permission notice appear in all copies.
6  *
7  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
8  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
9  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
10  * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
11  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
12  * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
13  * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */
14 
15 #include "settings_writer.h"
16 
17 #include <stdio.h>
18 
19 #include <openssl/ssl.h>
20 
21 #include "fuzzer_tags.h"
22 #include "test_config.h"
23 
24 
26 
28  SSL_SESSION *session) {
29  if (config->write_settings.empty()) {
30  return true;
31  }
32  // Treat write_settings as a path prefix for each connection in the run.
33  char buf[DECIMAL_SIZE(int)];
34  snprintf(buf, sizeof(buf), "%d", i);
35  path_ = config->write_settings + buf;
36 
37  if (!CBB_init(cbb_.get(), 64)) {
38  return false;
39  }
40 
41  if (session != nullptr) {
42  uint8_t *data;
43  size_t len;
44  if (!SSL_SESSION_to_bytes(session, &data, &len)) {
45  return false;
46  }
47  bssl::UniquePtr<uint8_t> free_data(data);
48  CBB child;
49  if (!CBB_add_u16(cbb_.get(), kSessionTag) ||
51  !CBB_add_bytes(&child, data, len) || !CBB_flush(cbb_.get())) {
52  return false;
53  }
54  }
55 
56  if (config->is_server &&
57  (config->require_any_client_certificate || config->verify_peer) &&
59  return false;
60  }
61 
62  return true;
63 }
64 
66  if (path_.empty()) {
67  return true;
68  }
69 
71  size_t settings_len;
72  if (!CBB_add_u16(cbb_.get(), kDataTag) ||
73  !CBB_finish(cbb_.get(), &settings, &settings_len)) {
74  return false;
75  }
76  bssl::UniquePtr<uint8_t> free_settings(settings);
77 
78  using ScopedFILE = std::unique_ptr<FILE, decltype(&fclose)>;
79  ScopedFILE file(fopen(path_.c_str(), "w"), fclose);
80  if (!file) {
81  return false;
82  }
83 
84  return fwrite(settings, settings_len, 1, file.get()) == 1;
85 }
86 
87 bool SettingsWriter::WriteHandoff(bssl::Span<const uint8_t> handoff) {
88  return WriteData(kHandoffTag, handoff);
89 }
90 
91 bool SettingsWriter::WriteHandback(bssl::Span<const uint8_t> handback) {
92  return WriteData(kHandbackTag, handback);
93 }
94 
95 bool SettingsWriter::WriteHints(bssl::Span<const uint8_t> hints) {
96  return WriteData(kHintsTag, hints);
97 }
98 
99 bool SettingsWriter::WriteData(uint16_t tag, bssl::Span<const uint8_t> data) {
100  if (path_.empty()) {
101  return true;
102  }
103 
104  CBB child;
105  if (!CBB_add_u16(cbb_.get(), tag) ||
107  !CBB_add_bytes(&child, data.data(), data.size()) ||
108  !CBB_flush(cbb_.get())) {
109  return false;
110  }
111  return true;
112 }
settings_writer.h
kRequestClientCert
static const uint16_t kRequestClientCert
Definition: fuzzer_tags.h:40
SettingsWriter::WriteData
bool WriteData(uint16_t tag, bssl::Span< const uint8_t > data)
Definition: settings_writer.cc:99
CBB_flush
#define CBB_flush
Definition: boringssl_prefix_symbols.h:1045
CBB_init
#define CBB_init
Definition: boringssl_prefix_symbols.h:1047
fuzzer_tags.h
file
const grpc_generator::File * file
Definition: python_private_generator.h:38
uint16_t
unsigned short uint16_t
Definition: stdint-msvc2008.h:79
SettingsWriter::SettingsWriter
SettingsWriter()
Definition: settings_writer.cc:25
buf
voidpf void * buf
Definition: bloaty/third_party/zlib/contrib/minizip/ioapi.h:136
file
Definition: bloaty/third_party/zlib/examples/gzappend.c:170
kDataTag
static const uint16_t kDataTag
Definition: fuzzer_tags.h:32
TestConfig
Definition: third_party/boringssl-with-bazel/src/ssl/test/test_config.h:27
uint8_t
unsigned char uint8_t
Definition: stdint-msvc2008.h:78
test_config.h
SettingsWriter::Commit
bool Commit()
Definition: settings_writer.cc:65
CBB_add_u16
#define CBB_add_u16
Definition: boringssl_prefix_symbols.h:1027
tag
static void * tag(intptr_t t)
Definition: bad_client.cc:318
CBB_finish
#define CBB_finish
Definition: boringssl_prefix_symbols.h:1043
kHintsTag
static const uint16_t kHintsTag
Definition: fuzzer_tags.h:49
googletest-filter-unittest.child
child
Definition: bloaty/third_party/googletest/googletest/test/googletest-filter-unittest.py:62
SSL_SESSION_to_bytes
#define SSL_SESSION_to_bytes
Definition: boringssl_prefix_symbols.h:272
data
char data[kBufferLength]
Definition: abseil-cpp/absl/strings/internal/str_format/float_conversion.cc:1006
SettingsWriter::path_
std::string path_
Definition: settings_writer.h:43
kHandoffTag
static const uint16_t kHandoffTag
Definition: fuzzer_tags.h:43
ssl.h
SettingsWriter::WriteHints
bool WriteHints(bssl::Span< const uint8_t > hints)
Definition: settings_writer.cc:95
ssl_session_st
Definition: third_party/boringssl-with-bazel/src/ssl/internal.h:3787
CBB_add_bytes
#define CBB_add_bytes
Definition: boringssl_prefix_symbols.h:1025
ScopedFILE
std::unique_ptr< FILE, FileCloser > ScopedFILE
Definition: third_party/boringssl-with-bazel/src/tool/internal.h:39
benchmark.FILE
FILE
Definition: benchmark.py:21
check_version.settings
settings
Definition: check_version.py:61
grpc::fclose
fclose(creds_file)
SettingsWriter::Init
bool Init(int i, const TestConfig *config, SSL_SESSION *session)
Definition: settings_writer.cc:27
SettingsWriter::cbb_
bssl::ScopedCBB cbb_
Definition: settings_writer.h:44
config_s
Definition: bloaty/third_party/zlib/deflate.c:120
DECIMAL_SIZE
#define DECIMAL_SIZE(type)
Definition: mem.h:124
free_data
static void free_data(void *data, size_t len)
Definition: c_slice_buffer_test.cc:64
SettingsWriter::WriteHandoff
bool WriteHandoff(bssl::Span< const uint8_t > handoff)
Definition: settings_writer.cc:87
len
int len
Definition: abseil-cpp/absl/base/internal/low_level_alloc_test.cc:46
kHandbackTag
static const uint16_t kHandbackTag
Definition: fuzzer_tags.h:46
SettingsWriter::WriteHandback
bool WriteHandback(bssl::Span< const uint8_t > handback)
Definition: settings_writer.cc:91
i
uint64_t i
Definition: abseil-cpp/absl/container/btree_benchmark.cc:230
cbb_st
Definition: bytestring.h:375
kSessionTag
static const uint16_t kSessionTag
Definition: fuzzer_tags.h:36
CBB_add_u24_length_prefixed
#define CBB_add_u24_length_prefixed
Definition: boringssl_prefix_symbols.h:1031


grpc
Author(s):
autogenerated on Fri May 16 2025 03:00:12