Skip to content

Commit

Permalink
src: remove usages of GetBackingStore in crypto
Browse files Browse the repository at this point in the history
This removes all usages of GetBackingStore in `crypto`. See the
linked issue for an explanation.

Note: I am not sure of the lifetime semantics intended by
`ArrayBufferOrViewContents` -- I am pretty sure it is correct based on
a manual audit of the callsites, but please ensure that it is correct.

Refs: nodejs#32226
Refs: nodejs#43921
  • Loading branch information
kvakil committed Jul 21, 2022
1 parent 7973e4e commit c7fade8
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 7 deletions.
5 changes: 4 additions & 1 deletion src/crypto/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -113,12 +113,15 @@ the `ByteSource::Builder` without releasing it as a `ByteSource`.

### `ArrayBufferOrViewContents`

The `ArrayBufferOfViewContents` class is a helper utility that abstracts
The `ArrayBufferOrViewContents` class is a helper utility that abstracts
`ArrayBuffer`, `TypedArray`, or `DataView` inputs and provides access to
their underlying data pointers. It is used extensively through `src/crypto`
to make it easier to deal with inputs that allow any `ArrayBuffer`-backed
object.

The lifetime of `ArrayBufferOrViewContents` should not exceed the
lifetime of its input.

### Key objects

Most crypto operations involve the use of keys -- cryptographic inputs
Expand Down
12 changes: 6 additions & 6 deletions src/crypto/crypto_util.h
Original file line number Diff line number Diff line change
Expand Up @@ -703,17 +703,17 @@ class ArrayBufferOrViewContents {
auto view = buf.As<v8::ArrayBufferView>();
offset_ = view->ByteOffset();
length_ = view->ByteLength();
store_ = view->Buffer()->GetBackingStore();
data_ = view->Buffer()->Data();
} else if (buf->IsArrayBuffer()) {
auto ab = buf.As<v8::ArrayBuffer>();
offset_ = 0;
length_ = ab->ByteLength();
store_ = ab->GetBackingStore();
data_ = ab->Data();
} else {
auto sab = buf.As<v8::SharedArrayBuffer>();
offset_ = 0;
length_ = sab->ByteLength();
store_ = sab->GetBackingStore();
data_ = sab->Data();
}
}

Expand All @@ -723,7 +723,7 @@ class ArrayBufferOrViewContents {
// length is zero, so we have to return something.
if (size() == 0)
return &buf;
return reinterpret_cast<T*>(store_->Data()) + offset_;
return reinterpret_cast<T*>(data_) + offset_;
}

inline T* data() {
Expand All @@ -732,7 +732,7 @@ class ArrayBufferOrViewContents {
// length is zero, so we have to return something.
if (size() == 0)
return &buf;
return reinterpret_cast<T*>(store_->Data()) + offset_;
return reinterpret_cast<T*>(data_) + offset_;
}

inline size_t size() const { return length_; }
Expand Down Expand Up @@ -772,7 +772,7 @@ class ArrayBufferOrViewContents {
T buf = 0;
size_t offset_ = 0;
size_t length_ = 0;
std::shared_ptr<v8::BackingStore> store_;
void* data_ = 0;
};

v8::MaybeLocal<v8::Value> EncodeBignum(
Expand Down

0 comments on commit c7fade8

Please sign in to comment.