Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
src: fix unaligned access in ucs2 string encoder
Seen with g++ 4.9.2 on x86_64 Linux: a SIGSEGV is generated when the input to v8::String::NewFromTwoByte() is not suitably aligned. g++ 4.9.2 emits SSE instructions for copy loops. That requires aligned input but that was something StringBytes::Encode() did not enforce until now. Make a properly aligned copy before handing off the input to V8. We could, as an optimization, check that the pointer is aligned on a two-byte boundary but that is technically still UB; pointers-to-char are allowed to alias other pointers but the reverse is not true: a pointer-to-uint16_t that aliases a pointer-to-char is in violation of the pointer aliasing rules. See https://code.google.com/p/v8/issues/detail?id=3694 Fixes segfaulting test simple/test-stream2-writable. PR-URL: nodejs#127 Reviewed-by: Trevor Norris <trev.norris@gmail.com>
- Loading branch information