Skip to content

Commit 62a2142

Browse files
committed
crypto: fix style issues in bio
Stop changing arguments, use local variables for things that change.
1 parent a2fd657 commit 62a2142

2 files changed

Lines changed: 37 additions & 29 deletions

File tree

src/node_crypto_bio.cc

Lines changed: 36 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -178,28 +178,33 @@ long NodeBIO::Ctrl(BIO* bio, int cmd, long num, void* ptr) {
178178
size_t NodeBIO::Read(char* out, size_t size) {
179179
size_t bytes_read = 0;
180180
size_t expected = Length() > size ? size : Length();
181+
size_t offset = 0;
182+
size_t left = size;
181183

182184
while (bytes_read < expected) {
183185
assert(read_head_->read_pos_ <= read_head_->write_pos_);
184186
size_t avail = read_head_->write_pos_ - read_head_->read_pos_;
185-
if (avail > size)
186-
avail = size;
187+
if (avail > left)
188+
avail = left;
187189

188190
// Copy data
189191
if (out != NULL)
190-
memcpy(out, read_head_->data_ + read_head_->read_pos_, avail);
192+
memcpy(out + offset, read_head_->data_ + read_head_->read_pos_, avail);
191193
read_head_->read_pos_ += avail;
192194

193195
// Move pointers
194196
bytes_read += avail;
195-
out += avail;
196-
size -= avail;
197+
offset += avail;
198+
left -= avail;
197199

198200
// Move to next buffer
199201
if (read_head_->read_pos_ == read_head_->write_pos_) {
200202
read_head_->read_pos_ = 0;
201203
read_head_->write_pos_ = 0;
202-
read_head_ = read_head_->next_;
204+
205+
// But not get beyond write_head_
206+
if (bytes_read != expected)
207+
read_head_ = read_head_->next_;
203208
}
204209
}
205210
assert(expected == bytes_read);
@@ -212,13 +217,14 @@ size_t NodeBIO::Read(char* out, size_t size) {
212217
size_t NodeBIO::IndexOf(char delim, size_t limit) {
213218
size_t bytes_read = 0;
214219
size_t max = Length() > limit ? limit : Length();
220+
size_t left = limit;
215221
Buffer* current = read_head_;
216222

217223
while (bytes_read < max) {
218224
assert(current->read_pos_ <= current->write_pos_);
219225
size_t avail = current->write_pos_ - current->read_pos_;
220-
if (avail > limit)
221-
avail = limit;
226+
if (avail > left)
227+
avail = left;
222228

223229
// Walk through data
224230
char* tmp = current->data_ + current->read_pos_;
@@ -230,7 +236,7 @@ size_t NodeBIO::IndexOf(char delim, size_t limit) {
230236

231237
// Move pointers
232238
bytes_read += off;
233-
limit -= off;
239+
left -= off;
234240

235241
// Found `delim`
236242
if (off != avail) {
@@ -248,38 +254,40 @@ size_t NodeBIO::IndexOf(char delim, size_t limit) {
248254
}
249255

250256

251-
void NodeBIO::Write(const char* data, size_t len) {
252-
while (len > 0) {
253-
size_t to_write = len;
257+
void NodeBIO::Write(const char* data, size_t size) {
258+
size_t offset = 0;
259+
size_t left = size;
260+
while (left > 0) {
261+
size_t to_write = left;
254262
assert(write_head_->write_pos_ <= kBufferLength);
255263
size_t avail = kBufferLength - write_head_->write_pos_;
256264

257265
if (to_write > avail)
258266
to_write = avail;
259267

260268
// Copy data
261-
memcpy(write_head_->data_ + write_head_->write_pos_, data, to_write);
262-
write_head_->write_pos_ += to_write;
263-
assert(write_head_->write_pos_ <= kBufferLength);
269+
memcpy(write_head_->data_ + write_head_->write_pos_,
270+
data + offset,
271+
to_write);
264272

265273
// Move pointers
266-
len -= to_write;
267-
data += to_write;
274+
left -= to_write;
275+
offset += to_write;
268276
length_ += to_write;
277+
write_head_->write_pos_ += to_write;
278+
assert(write_head_->write_pos_ <= kBufferLength);
269279

270-
// Still have some bytes left:
271-
// 1. Go to next buffer
272-
// 2. Allocate new if next is already full or is partially read
273-
// (is read head)
274-
if (write_head_->next_->write_pos_ == kBufferLength ||
275-
write_head_->next_->read_pos_ != 0) {
276-
Buffer* next = new Buffer();
277-
next->next_ = write_head_->next_;
278-
write_head_->next_ = next;
280+
// Go to next buffer if there still are some bytes to write
281+
if (left != 0) {
282+
if (write_head_->next_->write_pos_ == kBufferLength) {
283+
Buffer* next = new Buffer();
284+
next->next_ = write_head_->next_;
285+
write_head_->next_ = next;
286+
}
287+
write_head_ = write_head_->next_;
279288
}
280-
write_head_ = write_head_->next_;
281289
}
282-
assert(len == 0);
290+
assert(left == 0);
283291
}
284292

285293

src/node_crypto_bio.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ class NodeBIO {
7070
void Reset();
7171

7272
// Put `len` bytes from `data` into buffer
73-
void Write(const char* data, size_t len);
73+
void Write(const char* data, size_t size);
7474

7575
// Return size of buffer in bytes
7676
size_t inline Length() {

0 commit comments

Comments
 (0)