Skip to content

Commit fa9170c

Browse files
committed
Add regression test for fix to unified goto program processing
This adds a regression test that checks to ensure that goto-analyser reaches the "Checking assertions" phase of it's execution and also one of the checks was SUCCESFUL. This also fails on any invariant violation.
1 parent 8e533b7 commit fa9170c

File tree

4 files changed

+81
-0
lines changed

4 files changed

+81
-0
lines changed
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
struct evp_md_ctx_st
2+
{
3+
const void *digest;
4+
};
5+
struct s2n_evp_digest
6+
{
7+
const void *ctx;
8+
};
9+
union s2n_hash_low_level_digest {
10+
};
11+
struct s2n_hash_evp_digest
12+
{
13+
struct s2n_evp_digest evp_md5_secondary;
14+
};
15+
struct s2n_hash_state
16+
{
17+
const struct s2n_hash *hash_impl;
18+
union {
19+
union s2n_hash_low_level_digest low_level;
20+
struct s2n_hash_evp_digest high_level;
21+
} digest;
22+
};
23+
struct s2n_hash
24+
{
25+
int (*free)(struct s2n_hash_state *state);
26+
};
27+
void EVP_MD_CTX_free(struct evp_md_ctx_st *ctx)
28+
{
29+
free(ctx->digest);
30+
free(ctx);
31+
}
32+
static int s2n_evp_hash_free(struct s2n_hash_state *state)
33+
{
34+
(EVP_MD_CTX_free((state->digest.high_level.evp_md5_secondary.ctx)));
35+
return 0;
36+
}
37+
static const struct s2n_hash s2n_evp_hash = {
38+
.free = &s2n_evp_hash_free,
39+
};
40+
static int s2n_hash_set_impl(struct s2n_hash_state *state)
41+
{
42+
state->hash_impl = &s2n_evp_hash;
43+
return 0;
44+
}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
void s2n_hash_free_harness()
2+
{
3+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
CORE
2+
test.c
3+
--verify
4+
^EXIT=0$
5+
^SIGNAL=0$
6+
Checking assertions
7+
^\[EVP_MD_CTX_free.precondition_instance.1\] line \d+ free argument must be NULL or valid pointer: SUCCESS
8+
--
9+
Invariant check failed
10+
--
11+
This test checks that after building the goto binary (see test.sh)
12+
that there is no errors that lead to invariant violations.
13+
This was created after a bug was found due to the
14+
instrument_preconditions code not correctly fixing locations and
15+
the invariant check of partial inlining detecting this location
16+
inconsistency.
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
#!/usr/bin/env bash
2+
set -e
3+
4+
goto_cc=$1
5+
is_windows=$2
6+
7+
if [[ "${is_windows}" == "true" ]]; then
8+
${goto_cc} --export-file-local-symbols simple.c
9+
mv simple.exe simple.gb
10+
${goto_cc} --export-file-local-symbols s2n_hash_inlined.c
11+
mv s2n_hash_inlined.exe s2n_hash_inlined.gb
12+
${goto_cc} --function s2n_hash_free_harness simple.gb s2n_hash_inlined.gb
13+
mv simple.exe test.gb
14+
else
15+
${goto_cc} --export-file-local-symbols simple.c -o simple.gb
16+
${goto_cc} --export-file-local-symbols s2n_hash_inlined.c -o s2n_hash_inlined.gb
17+
${goto_cc} --function s2n_hash_free_harness simple.gb s2n_hash_inlined.gb -o test.gb
18+
fi

0 commit comments

Comments
 (0)