def test_symbolic_concrete(self):
        s1 = "hi\0"
        s2 = self.state.symbolicate_buffer("+++\0")
        strs = self._push2(s1, s2)

        ret = strcmp(self.state, *strs)
        self.assertTrue(Z3Solver.instance().can_be_true(
            self.state.constraints, ret != 0))
        self.assertTrue(Z3Solver.instance().can_be_true(
            self.state.constraints, ret == 0))

        self.state.constrain(s2[0] == ord("a"))
        ret = strcmp(self.state, *strs)
        self.assertTrue(self.state.must_be_true(ret > 0))
        self._clear_constraints()

        self.state.constrain(s2[0] == ord("z"))
        ret = strcmp(self.state, *strs)
        self.assertTrue(self.state.must_be_true(ret < 0))
        self._clear_constraints()

        self.state.constrain(s2[0] == ord("h"))
        self.state.constrain(s2[1] == ord("i"))
        ret = strcmp(self.state, *strs)
        self.assertTrue(self.state.must_be_true(ret <= 0))

        self.state.constrain(s2[2] == ord("\0"))
        ret = strcmp(self.state, *strs)
        self.assertTrue(self.state.must_be_true(ret == 0))
Beispiel #2
0
    def test_symbolic_concrete(self):
        s1 = 'hi\0'
        s2 = self.state.symbolicate_buffer('+++\0')
        strs = self._push2(s1, s2)

        ret = strcmp(self.state, *strs)
        self.assertTrue(Z3Solver.instance().can_be_true(
            self.state.constraints, ret != 0))
        self.assertTrue(Z3Solver.instance().can_be_true(
            self.state.constraints, ret == 0))

        self.state.constrain(s2[0] == ord('a'))
        ret = strcmp(self.state, *strs)
        self.assertTrue(self.state.must_be_true(ret > 0))
        self._clear_constraints()

        self.state.constrain(s2[0] == ord('z'))
        ret = strcmp(self.state, *strs)
        self.assertTrue(self.state.must_be_true(ret < 0))
        self._clear_constraints()

        self.state.constrain(s2[0] == ord('h'))
        self.state.constrain(s2[1] == ord('i'))
        ret = strcmp(self.state, *strs)
        self.assertTrue(self.state.must_be_true(ret <= 0))

        self.state.constrain(s2[2] == ord('\0'))
        ret = strcmp(self.state, *strs)
        self.assertTrue(self.state.must_be_true(ret == 0))
    def test_symbolic_actually_concrete(self):
        s1 = "ab\0"
        s2 = self.state.symbolicate_buffer("d+\0")
        strs = self._push2(s1, s2)

        ret = strcmp(self.state, *strs)
        self.assertTrue(self.state.must_be_true(ret < 0))
    def test_effective_null(self):
        s1 = self.state.symbolicate_buffer("a+")
        s2 = self.state.symbolicate_buffer("++")

        strs = self._push2(s1, s2)
        self.state.constrain(s1[1] == 0)
        self.state.constrain(s2[0] == ord("z"))

        ret = strcmp(self.state, *strs)
        self.assertTrue(self.state.must_be_true(ret < 0))
 def _concrete_gt(s1, s2):
     strs = self._push2(s1, s2)
     ret = strcmp(self.state, *strs)
     self.assertTrue(ret > 0)
 def test_concrete_eq(self):
     s = "abc\0"
     strs = self._push2(s, s)
     ret = strcmp(self.state, *strs)
     self.assertEqual(ret, 0)