Skip to content

Commit 099689a

Browse files
committed
cbmc: simplify string models a bit, get rid of loops
1 parent c29ab6e commit 099689a

File tree

2 files changed

+6
-17
lines changed

2 files changed

+6
-17
lines changed

Makefile

+2-3
Original file line numberDiff line numberDiff line change
@@ -986,10 +986,9 @@ CBMC_AUX= cbmc-aux.c
986986
#.piv-apdu.c.cbmc: CBMC_OPTS+= --paths lifo
987987
.piv-apdu.c.cbmc: CBMC_OPTS+= --unwind 20
988988
.piv-apdu.c.cbmc: CBMC_OPTS+= --object-bits 12
989-
.piv-apdu.c.cbmc: CBMC_OPTS+= --unwindset tlv_read_string.0:12
990989
.piv-apdu.c.cbmc: CBMC_OPTS+= --unwindset tlv_abort.0:5
991-
.piv-apdu.c.cbmc: CBMC_OPTS+= --unwindset piv_decode_rts.0:10
992-
.piv-apdu.c.cbmc: CBMC_OPTS+= --unwindset piv_decode_rts.1:14
990+
.piv-apdu.c.cbmc: CBMC_OPTS+= --unwindset piv_decode_rts.0:8
991+
.piv-apdu.c.cbmc: CBMC_OPTS+= --unwindset piv_decode_rts.1:8
993992

994993
.tlv.c.cbmc: CBMC_AUX+=
995994
.tlv.c.cbmc: CBMC_OPTS+= --unwind 10

cbmc-aux.c

+4-14
Original file line numberDiff line numberDiff line change
@@ -788,10 +788,7 @@ tlv_read_upto(struct tlv_state *ts, uint8_t *dest, size_t maxLen,
788788
nbytes = maxLen;
789789
tc->tc_bytes -= nbytes;
790790

791-
for (i = 0; i < nbytes; ++i) {
792-
uint8_t v;
793-
dest[i] = v;
794-
}
791+
__CPROVER_havoc_slice(dest, nbytes);
795792
*len = nbytes;
796793

797794
return (ERRF_OK);
@@ -824,12 +821,8 @@ tlv_read_string(struct tlv_state *ts, char **dest)
824821

825822
str = malloc(nbytes + 1);
826823
__CPROVER_assume(str != NULL);
827-
for (i = 0; i < nbytes; ++i) {
828-
char v;
829-
__CPROVER_assume(v != 0);
830-
str[i] = v;
831-
}
832-
__CPROVER_assume(str[nbytes] == 0);
824+
__CPROVER_assume(__CPROVER_is_zero_string(str));
825+
__CPROVER_assume(__CPROVER_zero_string_length(str) == nbytes);
833826
*dest = str;
834827

835828
return (ERRF_OK);
@@ -851,10 +844,7 @@ tlv_read(struct tlv_state *ts, uint8_t *dest, size_t len)
851844

852845
tc->tc_bytes -= len;
853846

854-
for (i = 0; i < len; ++i) {
855-
uint8_t v;
856-
dest[i] = v;
857-
}
847+
__CPROVER_havoc_slice(dest, len);
858848

859849
return (ERRF_OK);
860850
}

0 commit comments

Comments
 (0)