Thank you :)

I did figure that out.

Sometimes the JSON parsing function returns an empty value even if the JSON
is valid, I cannot reproduce the bug with the same JSON object, twice, I am
not sure what is happening.

Any light on that would be appreciated.

-Abhishel

-Abhishek Kona



On Thu, May 15, 2014 at 8:17 AM, Jakob Kummerow <[email protected]>wrote:

> There's a subtle but important difference between "value->IsEmpty()" and
> "value.IsEmpty()" ;-)
>
>
> On Thu, May 15, 2014 at 1:36 AM, Abhishek Kona <[email protected]>wrote:
>
>> I have some v8 Code which tries to Parse JSON I get a SIGSEGV once in a
>> while when I try to access the value. I am very confused about what is
>> happening.
>> Any help would be greatly appreciated.
>>
>> The code to Parse JSON is
>>
>> v8::Handle<v8::Value> FromJSONString(
>>     v8::Handle<v8::Value> json_string) {
>>   v8::HandleScope scope;
>>   v8::Handle<v8::Context> context = v8::Context::GetCurrent();
>>   v8::Handle<v8::Object> global = context->Global();
>>
>>   v8::Handle<v8::Value> JSON_value = global->Get(v8::String::New("JSON"));
>>   if (!IsObject(JSON_value)) {
>>     return scope.Close(v8::Undefined());
>>   }
>>   v8::Handle<v8::Object> JSON  = JSON_value->ToObject();
>>
>>   v8::Handle<v8::Value> JSON_parse_value =
>> JSON->Get(v8::String::New("parse"));
>>
>>   if (JSON_parse_value.IsEmpty() || JSON_parse_value->IsNull() ||
>>       JSON_parse_value->IsUndefined() ||!JSON_parse_value->IsFunction()) {
>>     return scope.Close(v8::Undefined());
>>   }
>>
>>
>>   v8::Handle<v8::Function> JSON_parse =
>>       v8::Handle<v8::Function>::Cast(JSON_parse_value);
>>
>>   return scope.Close(JSON_parse->Call(JSON, 1, &json_string));
>> }
>>
>> And the code which calls this is at => For some reason accessing Value
>> results in a SIGSEGV.
>>
>> bool extractSource(std::string* source, std::string& body) {
>>     v8::HandleScope scope; // this is needed and clears the memory
>>     if (body.empty()) {
>>         return false;
>>     }
>>     v8::Handle<v8::Value> value = v8_server_utils::FromJSONString(body);
>>     if (value->IsEmpty()) { // CRASHES HERE.
>>         return false;
>>     }
>>     if (value->IsNull()) {
>>         return false;
>>     }
>>     if (value->IsUndefined()) {
>>         return false;
>>     }
>>     if (!value->IsObject()) {
>>         return false;
>>     }
>>     auto object = value->ToObject();
>>     auto source_key = v8::String::New("source");
>>     if (object.IsEmpty() || object->IsNull() || object->IsUndefined() ||
>>         !object->Has(source_key)) {
>>         return false;
>>     }
>>     auto source_obj = object->Get(source_key);
>>     *source = v8_server_utils::JSStringToCString(source_obj->ToString());
>>     return true;
>> }
>>
>>
>>
>>  --
>> --
>> v8-users mailing list
>> [email protected]
>> http://groups.google.com/group/v8-users
>> ---
>> You received this message because you are subscribed to the Google Groups
>> "v8-users" group.
>> To unsubscribe from this group and stop receiving emails from it, send an
>> email to [email protected].
>>
>> For more options, visit https://groups.google.com/d/optout.
>>
>
>  --
> --
> v8-users mailing list
> [email protected]
> http://groups.google.com/group/v8-users
> ---
> You received this message because you are subscribed to a topic in the
> Google Groups "v8-users" group.
> To unsubscribe from this topic, visit
> https://groups.google.com/d/topic/v8-users/DEDJOGTWgc0/unsubscribe.
> To unsubscribe from this group and all its topics, send an email to
> [email protected].
> For more options, visit https://groups.google.com/d/optout.
>

-- 
-- 
v8-users mailing list
[email protected]
http://groups.google.com/group/v8-users
--- 
You received this message because you are subscribed to the Google Groups 
"v8-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to