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)
Esempio n. 4
0
    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)
Esempio n. 5
0
    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)
Esempio n. 6
0
    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)
Esempio n. 7
0
    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)