0
0
Fork 0
mirror of https://github.com/denoland/rusty_v8.git synced 2024-11-24 15:19:31 -05:00

fix(OneByteConst): missing ASCII assertion, assert length (#1282)

Fix missing ASCII assertion, assert length
This commit is contained in:
Aapo Alasuutari 2023-07-14 02:51:34 +03:00 committed by GitHub
parent 096c540393
commit fcf0281d3e
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -100,7 +100,7 @@ extern "C" {
pub struct OneByteConst { pub struct OneByteConst {
vtable: *const OneByteConstNoOp, vtable: *const OneByteConstNoOp,
cached_data: *const char, cached_data: *const char,
length: int, length: usize,
} }
// SAFETY: The vtable for OneByteConst is an immutable static and all // SAFETY: The vtable for OneByteConst is an immutable static and all
@ -121,7 +121,7 @@ extern "C" fn one_byte_const_data(this: *const OneByteConst) -> *const char {
} }
extern "C" fn one_byte_const_length(this: *const OneByteConst) -> usize { extern "C" fn one_byte_const_length(this: *const OneByteConst) -> usize {
// SAFETY: Only called from C++ with a valid OneByteConst pointer. // SAFETY: Only called from C++ with a valid OneByteConst pointer.
unsafe { (*this).length as usize } unsafe { (*this).length }
} }
type OneByteConstNoOp = extern "C" fn(*const OneByteConst); type OneByteConstNoOp = extern "C" fn(*const OneByteConst);
@ -439,11 +439,13 @@ impl String {
pub const fn create_external_onebyte_const( pub const fn create_external_onebyte_const(
buffer: &'static [u8], buffer: &'static [u8],
) -> OneByteConst { ) -> OneByteConst {
is_ascii(buffer); // Assert that the buffer contains only ASCII, and that the
// length is less or equal to (64-bit) v8::String::kMaxLength.
assert!(is_ascii(buffer) && buffer.len() <= ((1 << 29) - 24));
OneByteConst { OneByteConst {
vtable: &ONE_BYTE_CONST_VTABLE.delete1, vtable: &ONE_BYTE_CONST_VTABLE.delete1,
cached_data: buffer.as_ptr() as *const char, cached_data: buffer.as_ptr() as *const char,
length: buffer.len() as i32, length: buffer.len(),
} }
} }