Program exited with code -11 when calling

Anthony anthoq88 at gmail.com
Wed Jul 1 05:33:58 UTC 2020


On Wednesday, 1 July 2020 at 05:09:47 UTC, Cym13 wrote:
> On Wednesday, 1 July 2020 at 05:04:28 UTC, Anthony wrote:
>> I'm trying to convert this c function:
>>
>> bson_t *bson_new_from_json (const uint8_t *data, ssize_t len, 
>> bson_error_t *error);
>>
>>
>> Into a D function. This is my attempt:
>> extern(C) {
>>     struct bson_t;
>>     struct bson_error_t;
>>
>>     bson_t* bson_new_from_json(const uint8_t* data, long len, 
>> bson_error_t* error);
>> }
>>
>> However when I try it, for example:
>>
>> auto str_utf8 = str.toUTF8();
>> bson_error_t error
>>
>> auto bson = bson_new_from_json(cast(const 
>> uint8_t*)str_utf8.ptr, -1, &error);
>>
>>
>> I get a "Program exited with code -11" message.
>> Does anyone know what I'm doing wrong?
>>
>> Thanks
>
> I don't know the exact function you are trying to use, but -11 
> means "segmentation fault" on linux. This means that your 
> program is trying to read or write a memory location that it is 
> not supposed to. This typically happens during buffer overflows 
> and similar memory corruption bugs.
>
> One thing that jumps to me is the -1 in your call instead of 
> the length. Without knowing the C function's implementation I 
> would expect it to mean either "read before the array" which 
> would be a buffer overflow or to have the special meaning of 
> "deduce the string size yourself". In that last case I would 
> expect bson_new_from_json to expect a NUL-terminated array, but 
> I don't know if your UTF8 array is NUL-terminated.


Thanks for getting back to me.

Yeah I figured it was a segmentation fault, however, I don't know 
exactly how to pinpoint where this is happening. I'm wondering if 
there's anything wrong with how I'm casting the data since 
everything is self contained (assuming bson_new_from_json is 
correct since it works using c directly).

void foo() {
     import std.utf;
     import core.stdc.stdint;

     auto str_utf8 = "{\"a\":1}";
     bson_error_t error;

     bson_new_from_json(cast(uint8_t*)str_utf8, 
(cast(uint8_t[])str_utf8).length, &error);
}



Re -1 in the call: Apparently it uses strlen() to deduce the 
size. However, I tried explicitly state the array length but had 
no luck.




More information about the Digitalmars-d-learn mailing list