summaryrefslogtreecommitdiff
path: root/proofs
diff options
context:
space:
mode:
Diffstat (limited to 'proofs')
-rw-r--r--proofs/lfsc_checker/code.cpp19
-rw-r--r--proofs/signatures/th_bv_bitblast.plf2
2 files changed, 20 insertions, 1 deletions
diff --git a/proofs/lfsc_checker/code.cpp b/proofs/lfsc_checker/code.cpp
index ee143a710..48ebc5578 100644
--- a/proofs/lfsc_checker/code.cpp
+++ b/proofs/lfsc_checker/code.cpp
@@ -1303,7 +1303,9 @@ Expr *run_code(Expr *_e) {
return tmp;
}
+ assert(hd->getclass() == CEXPR);
CExpr *prog = (CExpr *)hd;
+ assert(prog->kids[1]->getclass() == CEXPR);
Expr **cur = ((CExpr *)prog->kids[1])->kids;
vector<Expr *> old_vals;
SymExpr *var;
@@ -1331,10 +1333,26 @@ Expr *run_code(Expr *_e) {
else
{
while((var = (SymExpr *)*cur++)) {
+ // Check whether not enough arguments were supplied
+ if (i >= args.size()) {
+ for (size_t i = 0; i < args.size(); i++) {
+ args[i]->dec();
+ }
+ return NULL;
+ }
+
old_vals.push_back(var->val);
var->val = args[i++];
}
+ // Check whether too many arguments were supplied
+ if (i < args.size()) {
+ for (size_t i = 0; i < args.size(); i++) {
+ args[i]->dec();
+ }
+ return NULL;
+ }
+
if (dbg_prog) {
dbg_prog_indent(cout);
cout << "[";
@@ -1359,6 +1377,7 @@ Expr *run_code(Expr *_e) {
cur = ((CExpr *)prog->kids[1])->kids;
i = 0;
while((var = (SymExpr *)*cur++)) {
+ assert(i < args.size());
args[i]->dec();
var->val = old_vals[i++];
}
diff --git a/proofs/signatures/th_bv_bitblast.plf b/proofs/signatures/th_bv_bitblast.plf
index 2b2fe0868..109155a21 100644
--- a/proofs/signatures/th_bv_bitblast.plf
+++ b/proofs/signatures/th_bv_bitblast.plf
@@ -173,7 +173,7 @@
(! xb bblt
(! rb bblt
(! xbb (bblast_term m x xb)
- (! c ( ^ (bblast_sextend xb k m) rb)
+ (! c ( ^ (bblast_sextend xb k) rb)
(bblast_term n (sign_extend n k m x) rb))))))))))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
generated by cgit on debian on lair
contact matthew@masot.net with questions or feedback