#define _GNU_SOURCE
#include <stdio.h>
#include <stdint.h>
#include <string.h>
#include <fenv.h>
struct somestruct
{
int foo;
float bar;
};
int main(void) {
// Симулируем машинку, которая может в sNaN.
feenableexcept(FE_INVALID);
// Симулируем нехороший пакет с данными.
static const uint8_t bad_input[] = {
0xad, 0xde, 0xad, 0xde, 0xff, 0xff, 0xbf, 0xff,
};
// Не подозревая о подвохе, декодируем пакет.
struct somestruct s;
memcpy(&s
, bad_input
, sizeof(bad_input
));
printf("Successfully parsed `somestruct' from stream.\n");
s.bar += 0.0f;
printf("foo = %x, bar = %f\n", s.
foo, s.
bar); }
I2RlZmluZSBfR05VX1NPVVJDRQojaW5jbHVkZSA8c3RkaW8uaD4KI2luY2x1ZGUgPHN0ZGludC5oPgojaW5jbHVkZSA8c3RyaW5nLmg+CiNpbmNsdWRlIDxmZW52Lmg+CgpzdHJ1Y3Qgc29tZXN0cnVjdAp7CglpbnQgZm9vOwoJZmxvYXQgYmFyOwp9OwoKaW50IG1haW4odm9pZCkgewoJLy8g0KHQuNC80YPQu9C40YDRg9C10Lwg0LzQsNGI0LjQvdC60YMsINC60L7RgtC+0YDQsNGPINC80L7QttC10YIg0LIgc05hTi4KCWZlZW5hYmxlZXhjZXB0KEZFX0lOVkFMSUQpOwoJCgkvLyDQodC40LzRg9C70LjRgNGD0LXQvCDQvdC10YXQvtGA0L7RiNC40Lkg0L/QsNC60LXRgiDRgSDQtNCw0L3QvdGL0LzQuC4KCXN0YXRpYyBjb25zdCB1aW50OF90IGJhZF9pbnB1dFtdID0gewoJCTB4YWQsIDB4ZGUsIDB4YWQsIDB4ZGUsIDB4ZmYsIDB4ZmYsIDB4YmYsIDB4ZmYsCgl9OwoJCgkvLyDQndC1INC/0L7QtNC+0LfRgNC10LLQsNGPINC+INC/0L7QtNCy0L7RhdC1LCDQtNC10LrQvtC00LjRgNGD0LXQvCDQv9Cw0LrQtdGCLgoJc3RydWN0IHNvbWVzdHJ1Y3QgczsKCW1lbWNweSgmcywgYmFkX2lucHV0LCBzaXplb2YoYmFkX2lucHV0KSk7CgkKCXByaW50ZigiU3VjY2Vzc2Z1bGx5IHBhcnNlZCBgc29tZXN0cnVjdCcgZnJvbSBzdHJlYW0uXG4iKTsKCWZmbHVzaChzdGRvdXQpOwoJCglzLmJhciArPSAwLjBmOwoJCglwcmludGYoImZvbyA9ICV4LCBiYXIgPSAlZlxuIiwgcy5mb28sIHMuYmFyKTsKCWZmbHVzaChzdGRvdXQpOwp9Cg==