src: don't call DecodeWrite() on Buffers

Don't call DecodeWrite() with a Buffer as its argument because it in
turn calls StringBytes::Write() and that method expects a Local<String>.

"Why then does that function take a Local<Value>?" I hear you ask.
Good question but I don't have the answer.  I added a CHECK for good
measure and what do you know, all of a sudden a large number of crypto
tests started failing.

Calling DecodeWrite(BINARY) on a buffer is nonsensical anyway: if you
want the contents of the buffer, just copy out the data, there is no
need to decode it - and that's exactly what this commit does.

Fixes a great many instances of the following run-time error in debug
builds:

    FATAL ERROR: v8::String::Cast() Could not convert to string
This commit is contained in:
Ben Noordhuis authored and Fedor Indutny committed 2014-03-16 16:15:34 +04:00
1 parent e87ceb2b42
commit c30cc4e3a5
2 files changed
+8 -28

No files matched your search

+1
View File
@@ -301,6 +301,7 @@ size_t StringBytes::Write(Isolate* isolate,
size_t len = 0;
bool is_extern = GetExternalParts(isolate, val, &data, &len);
CHECK(val->IsString() == true);
Local<String> str = val.As<String>();
len = len < buflen ? len : buflen;