Size: a a a

2020 December 13

AB

Andrey Burov in Go-go!
она выходит за границы
источник

AB

Andrey Burov in Go-go!
cdata := C.CString(data)
 cflags := C.int(flags)

сделай uintprt и т.п. и скорми ей это
источник

AB

Andrey Burov in Go-go!
я точно не знаю, в C/++ не силен
источник

AB

Andrey Burov in Go-go!
cdata точно может быть NULL, т.к. твоя функция делает realloc
источник

АИ

Арман Исмаилов... in Go-go!
Сделал websocket сервер, обращаюсь к этой функции через него с другого компа:

   response.Data, err = kalkan.SignData(query.Data, query.Flags)
   if err != nil {
     response.Error = err.Error()
   }
Все также получаю after sign
источник

АИ

Арман Исмаилов... in Go-go!
Andrey Burov
cdata := C.CString(data)
 cflags := C.int(flags)

сделай uintprt и т.п. и скорми ей это
А это как?👀
источник

Z

Zver in Go-go!
Арман Исмаилов
Переписал функцию теперь unsafe. Pointer выпилил, вместо unsigned char использую char:
func SignData(data string, flags int) (string, error) {
 var result C.char
 cdata := C.CString(data)
 cflags := C.int(flags)
 log.Println("before sign")
 if C.sign_data(cflags, cdata, &result) != 0 {
   return "", GetLastErrorString()
 }
 C.free(unsafe.Pointer(cdata))
 log.Println("after sign")
 return C.GoString(&result), GetLastErrorString()
}
Просто для теста result замени на массив чаров. На пару сотен. Вообще тебе по идее должен быть известен размер результата, под него нужно выделить память.
источник

AB

Andrey Burov in Go-go!
Andrey Burov
cdata точно может быть NULL, т.к. твоя функция делает realloc
сорян, чушь, точно НЕ деалет
источник

AB

Andrey Burov in Go-go!
Арман Исмаилов
Сделал websocket сервер, обращаюсь к этой функции через него с другого компа:

   response.Data, err = kalkan.SignData(query.Data, query.Flags)
   if err != nil {
     response.Error = err.Error()
   }
Все также получаю after sign
сделай не C.String, а массив побольше (не slice)
источник

АИ

Арман Исмаилов... in Go-go!
Да пробую
источник

AB

Andrey Burov in Go-go!
cdata := [2048]byte
источник

Z

Zver in Go-go!
Andrey Burov
сделай не C.String, а массив побольше (не slice)
Можно и слайс выделить нужного размера и взять указатель на первый символ.
источник

AB

Andrey Burov in Go-go!
Zver
Можно и слайс выделить нужного размера и взять указатель на первый символ.
C-метод ;)
источник

Z

Zver in Go-go!
С cdata там нормально. Под result надо.
источник

Z

Zver in Go-go!
Result за границы выходит.
источник

Z

Zver in Go-go!
Andrey Burov
C-метод ;)
Что метод?
источник

AB

Andrey Burov in Go-go!
я тебя еще хотел бы предупредить что это не thread safe, смотри реализацию твоих Cшных функций
источник

AB

Andrey Burov in Go-go!
Zver
Что метод?
в C (который не C++, так часто делают)
источник

Z

Zver in Go-go!
В гоу так делают.
источник

AB

Andrey Burov in Go-go!
bad practics
источник