Skip to content

Commit

Permalink
src: fix out-of-bounds write in TwoByteValue
Browse files Browse the repository at this point in the history
Plan 2 bytes instead of 1 byte for the final zero terminator
for UTF-16. This is unlikely to cause real-world problems,
but that ultimately depends on the `malloc` implementation.

The issue can be uncovered by running e.g.
`valgrind node -e "Buffer(65536).fill('a'.repeat(4096), 'utf16le')"`

Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
PR-URL: #6330
  • Loading branch information
addaleax committed Apr 22, 2016
1 parent 0e7d57a commit a3b5b9c
Showing 1 changed file with 3 additions and 1 deletion.
4 changes: 3 additions & 1 deletion src/util.cc
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -47,7 +47,9 @@ TwoByteValue::TwoByteValue(Isolate* isolate, Local<Value> value)
return; return;


// Allocate enough space to include the null terminator // Allocate enough space to include the null terminator
size_t len = StringBytes::StorageSize(isolate, string, UCS2) + 1; size_t len =
StringBytes::StorageSize(isolate, string, UCS2) +
sizeof(uint16_t);
if (len > sizeof(str_st_)) { if (len > sizeof(str_st_)) {
str_ = static_cast<uint16_t*>(malloc(len)); str_ = static_cast<uint16_t*>(malloc(len));
CHECK_NE(str_, nullptr); CHECK_NE(str_, nullptr);
Expand Down

0 comments on commit a3b5b9c

Please sign in to comment.