def run(self, char_ref): log.debug( 'Called SimProcedure java.lang.Character.isDigit with args: {}'. format(char_ref)) char_str = self.state.memory.load(char_ref) constraint = claripy.StrIsDigit(char_str) return claripy.If(constraint, claripy.BVV(1, 32), claripy.BVV(0, 32))
def test_is_digit_simplification(self): correct_script = '''(set-logic ALL) (check-sat) ''' str_concrete = claripy.StringV("1") res = claripy.StrIsDigit(str_concrete) solver = self.get_solver() solver.add(res) script = solver.get_smtlib_script_satisfiability() self.assertEqual(correct_script, script)
def test_is_digit(self): correct_script = '''(set-logic ALL) (declare-fun STRING_symb_str_is_digit () String) (assert (let ((.def_0 (= ( str.to.int STRING_symb_str_is_digit ) (- 1)))) (let ((.def_1 (not .def_0))) .def_1))) (check-sat) ''' str_symb = claripy.StringS("symb_str_is_digit", 12, explicit_name=True) res = claripy.StrIsDigit(str_symb) solver = self.get_solver() solver.add(res) script = solver.get_smtlib_script_satisfiability() self.assertEqual(correct_script, script)