Fixed crashes introduced by the API change

This commit is contained in:
Snaipe 2015-09-08 19:21:53 +02:00
parent 4d114fdd38
commit 01831b2ed5
2 changed files with 13 additions and 19 deletions

View file

@ -68,9 +68,10 @@ struct criterion_assert_args {
const char *default_msg = "" CR_VA_HEAD(__VA_ARGS__); \
char *formatted_msg = NULL; \
int msglen = asprintf(&formatted_msg, "" CR_VA_TAIL(__VA_ARGS__)); \
MsgVar = formatted_msg ? formatted_msg : default_msg; \
MsgVar = formatted_msg && *formatted_msg ? \
formatted_msg : default_msg; \
\
if (!formatted_msg) \
if (!formatted_msg || !*formatted_msg) \
msglen = strlen(default_msg); \
\
BufSize = sizeof(struct criterion_assert_stats) \
@ -78,10 +79,9 @@ struct criterion_assert_args {
\
char *buf = (char*) CR_STDN malloc(BufSize); \
stat = (struct criterion_assert_stats*) buf; \
\
CR_STDN memset(buf, 0, sizeof (struct criterion_assert_stats)); \
buf += sizeof (struct criterion_assert_stats); \
*((size_t*) buf) = msglen; \
*((size_t*) buf) = msglen + 1; \
buf += sizeof (size_t); \
CR_STDN strcpy(buf, MsgVar); \
CR_STDN free(formatted_msg); \

View file

@ -39,7 +39,7 @@ void destroy_event(void *ptr, UNUSED void *meta) {
void destroy_assert_event(void *ptr, UNUSED void *meta) {
struct event *ev = ptr;
free((void*) ((struct criterion_assert_stats *) ev)->message);
free((void*) ((struct criterion_assert_stats *) ev->data)->message);
free(ev->data);
}
@ -52,19 +52,18 @@ struct event *read_event(FILE *f) {
case ASSERT: {
const size_t assert_size = sizeof (struct criterion_assert_stats);
struct criterion_assert_stats *buf = NULL;
size_t *len = NULL;
char *msg = NULL;
buf = malloc(assert_size);
if (fread(buf, assert_size, 1, f) == 0)
goto fail_assert;
len = malloc(sizeof (size_t));
if (fread(len, sizeof (size_t), 1, f) == 0)
size_t len = 0;
if (fread(&len, sizeof (size_t), 1, f) == 0)
goto fail_assert;
msg = malloc(*len);
if (fread(buf, *len, 1, f) == 0)
msg = malloc(len);
if (fread(msg, len, 1, f) == 0)
goto fail_assert;
buf->message = msg;
@ -77,25 +76,20 @@ struct event *read_event(FILE *f) {
return ev;
fail_assert:
free(len);
free(buf);
free(msg);
return NULL;
}
case THEORY_FAIL: {
size_t *len = malloc(sizeof (size_t));
if (fread(len, sizeof (size_t), 1, f) == 0) {
free(len);
size_t len = 0;
if (fread(&len, sizeof (size_t), 1, f) == 0)
return NULL;
}
char *buf = malloc(*len);
if (fread(buf, *len, 1, f) == 0) {
free(len);
char *buf = malloc(len);
if (fread(buf, len, 1, f) == 0) {
free(buf);
return NULL;
}
free(len);
struct event *ev = smalloc(
.size = sizeof (struct event),