protoc-gen-lua
protoc-gen-lua copied to clipboard
double may cause crash on some phone
When parse message with a double field, it may cause crash, because incorrect data alignment will send signal sigbus in these machines.So modify lua_pb.c to use follow functions to parse float and double: static float unpack_float(const uint8_t* buffer) {
ifdef IS_LITTLE_ENDIAN
float fvalue;
memcpy(&fvalue, buffer, sizeof(float));
return fvalue;
else
uint32_t uvalue;
memcpy(&uvalue, buffer, sizeof(uint32_t));
uvalue = le32toh(uvalue);
return *(*float)&uvalue;
endif
}
static double unpack_double(const uint8_t* buffer) {
ifdef IS_LITTLE_ENDIAN
double dvalue;
memcpy(&dvalue, buffer, sizeof(double));
return dvalue;
else
uint64_t uvalue;
memcpy(&uvalue, buffer, sizeof(uint64_t));
uvalue = le64toh(uvalue);
return *(*double)&uvalue;
endif
}