def test_lt_etc(self): str_symb = claripy.StringS("Symb_2", 4) solver = self.get_solver() c1 = claripy.StrLen(str_symb, 32) <= 4 c2 = claripy.StrLen(str_symb, 32) < 4 c3 = claripy.StrLen(str_symb, 32) >= 4 c4 = claripy.StrLen(str_symb, 32) > 4 solver.add(c1) solver.add(c2) solver.add(c3) solver.add(c4) self.assertFalse(solver.satisfiable())
def test_length_simplification(self): str_concrete = claripy.StringV("concrete") solver = self.get_solver() solver.add(claripy.StrLen(str_concrete, 32) == 8) self.assertTrue(solver.satisfiable()) result = solver.eval(str_concrete, 2) self.assertEqual(['concrete'], list(result)) for r in result: self.assertTrue(len(r) == 8)
def test_length(self): str_symb = claripy.StringS("symb_length", 12, explicit_name=True) solver = self.get_solver() # TODO: How do we want to deal with the size of a symbolic string? solver.add(claripy.StrLen(str_symb, 32) == 14) self.assertTrue(solver.satisfiable()) result = solver.eval(str_symb, 4 if KEEP_TEST_PERFORMANT else 100) for r in result: self.assertTrue(len(r) == 14)
def test_length_simplification(self): correct_script = '''(set-logic ALL) (check-sat) ''' str_concrete = claripy.StringV("concrete") solver = self.get_solver() solver.add(claripy.StrLen(str_concrete, 32) == 8) script = solver.get_smtlib_script_satisfiability() self.assertEqual(correct_script, script)
def test_lt_etc(self): correct_script = '''(set-logic ALL) (declare-fun {0}Symb_lt_test () String) (assert (let ((.def_0 (<= (str.len {0}Symb_lt_test) 4))) .def_0)) (assert (let ((.def_0 (< (str.len {0}Symb_lt_test) 4))) .def_0)) (assert (let ((.def_0 (<= 4 (str.len {0}Symb_lt_test)))) .def_0)) (assert (let ((.def_0 (< 4 (str.len {0}Symb_lt_test)))) .def_0)) (check-sat) '''.format(String.STRING_TYPE_IDENTIFIER) str_symb = claripy.StringS("Symb_lt_test", 4, explicit_name=True) solver = self.get_solver() c1 = claripy.StrLen(str_symb, 32) <= 4 c2 = claripy.StrLen(str_symb, 32) < 4 c3 = claripy.StrLen(str_symb, 32) >= 4 c4 = claripy.StrLen(str_symb, 32) > 4 solver.add(c1) solver.add(c2) solver.add(c3) solver.add(c4) script = solver.get_smtlib_script_satisfiability() # with open("dump_lt_etc.smt2", "w") as dump_f: # dump_f.write(script) self.assertEqual(correct_script, script)
def test_length(self): correct_script = '''(set-logic ALL) (declare-fun {0}symb_length () String) (assert (let ((.def_0 (= (str.len {0}symb_length) 14))) .def_0)) (check-sat) '''.format(String.STRING_TYPE_IDENTIFIER) str_symb = claripy.StringS("symb_length", 12, explicit_name=True) solver = self.get_solver() # TODO: How do we want to dela with the size of a symbolic string? solver.add(claripy.StrLen(str_symb, 32) == 14) script = solver.get_smtlib_script_satisfiability() # with open("dump_length.smt2", "w") as dump_f: # dump_f.write(script) self.assertEqual(correct_script, script)
def run(self, this_str): log.debug( 'Called SimProcedure java.lang.String.length with args: {}'.format( this_str)) return claripy.StrLen(self.state.memory.load(this_str), 32)