Beispiel #1
0
    def test_symbolic(self):
        sy = self.state.symbolicate_buffer('+++\0')
        s = self._push_string(sy)

        ret = strlen(self.state, s)
        self.assertItemsEqual(
            range(4), solver.get_all_values(self.state.constraints, ret))

        self.state.constrain(sy[0] == 0)
        ret = strlen(self.state, s)
        self.assertTrue(self.state.must_be_true(ret == 0))
        self._clear_constraints()

        self.state.constrain(sy[0] != 0)
        self.state.constrain(sy[1] == 0)
        ret = strlen(self.state, s)
        self.assertTrue(self.state.must_be_true(ret == 1))
        self._clear_constraints()

        self.state.constrain(sy[0] != 0)
        self.state.constrain(sy[1] != 0)
        self.state.constrain(sy[2] == 0)
        ret = strlen(self.state, s)
        self.assertTrue(self.state.must_be_true(ret == 2))
        self._clear_constraints()

        self.state.constrain(sy[0] != 0)
        self.state.constrain(sy[1] != 0)
        self.state.constrain(sy[2] != 0)
        ret = strlen(self.state, s)
        self.assertTrue(self.state.must_be_true(ret == 3))
Beispiel #2
0
    def test_symbolic(self):
        sy = self.state.symbolicate_buffer('+++\0')
        s = self._push_string(sy)

        ret = strlen(self.state, s)
        print solver.get_all_values(self.state.constraints, ret)
        self.assertItemsEqual(range(4), solver.get_all_values(self.state.constraints, ret))

        self.state.constrain(sy[0] == 0)
        ret = strlen(self.state, s)
        self.assertFalse(solver.can_be_true(self.state.constraints, ret != 0))
        self._clear_constraints()

        self.state.constrain(sy[0] != 0)
        self.state.constrain(sy[1] == 0)
        ret = strlen(self.state, s)
        self.assertFalse(solver.can_be_true(self.state.constraints, ret != 1))
        self._clear_constraints()

        self.state.constrain(sy[0] != 0)
        self.state.constrain(sy[1] != 0)
        self.state.constrain(sy[2] == 0)
        ret = strlen(self.state, s)
        self.assertFalse(solver.can_be_true(self.state.constraints, ret != 2))
        self._clear_constraints()

        self.state.constrain(sy[0] != 0)
        self.state.constrain(sy[1] != 0)
        self.state.constrain(sy[2] != 0)
        ret = strlen(self.state, s)
        self.assertFalse(solver.can_be_true(self.state.constraints, ret != 3))
Beispiel #3
0
    def test_symbolic_mixed(self):
        sy = self.state.symbolicate_buffer('a+b+\0')
        s = self._push_string(sy)

        self.state.constrain(sy[1] == 0)
        ret = strlen(self.state, s)
        self.assertTrue(self.state.must_be_true(ret == 1))
        self._clear_constraints()

        self.state.constrain(sy[1] != 0)
        self.state.constrain(sy[3] == 0)
        ret = strlen(self.state, s)
        self.assertTrue(self.state.must_be_true(ret == 3))
        self._clear_constraints()

        self.state.constrain(sy[1] != 0)
        self.state.constrain(sy[3] != 0)
        ret = strlen(self.state, s)
        self.assertTrue(self.state.must_be_true(ret == 4))
Beispiel #4
0
    def test_symbolic_mixed(self):
        sy = self.state.symbolicate_buffer('a+b+\0')
        s = self._push_string(sy)

        self.state.constrain(sy[1] == 0)
        ret = strlen(self.state, s)
        self.assertFalse(solver.can_be_true(self.state.constraints, ret != 1))
        self._clear_constraints()

        self.state.constrain(sy[1] != 0)
        self.state.constrain(sy[3] == 0)
        ret = strlen(self.state, s)
        self.assertFalse(solver.can_be_true(self.state.constraints, ret != 3))
        self._clear_constraints()

        self.state.constrain(sy[1] != 0)
        self.state.constrain(sy[3] != 0)
        ret = strlen(self.state, s)
        self.assertFalse(solver.can_be_true(self.state.constraints, ret != 4))
Beispiel #5
0
    def test_symbolic_mixed(self):
        sy = self.state.symbolicate_buffer('a+b+\0')
        s = self._push_string(sy)

        self.state.constrain(sy[1] == 0)
        ret = strlen(self.state, s)
        self.assertFalse(solver.can_be_true(self.state.constraints, ret != 1))
        self._clear_constraints()

        self.state.constrain(sy[1] != 0)
        self.state.constrain(sy[3] == 0)
        ret = strlen(self.state, s)
        self.assertFalse(solver.can_be_true(self.state.constraints, ret != 3))
        self._clear_constraints()

        self.state.constrain(sy[1] != 0)
        self.state.constrain(sy[3] != 0)
        ret = strlen(self.state, s)
        self.assertFalse(solver.can_be_true(self.state.constraints, ret != 4))
Beispiel #6
0
 def test_symbolic_effective_null(self):
     sy = self.state.symbolicate_buffer('ab+')
     self.state.constrain(sy[2] == 0)
     s = self._push_string(sy)
     ret = strlen(self.state, s)
     self.assertEqual(ret, 2)
Beispiel #7
0
 def test_concrete_empty(self):
     s = self._push_string('\0')
     ret = strlen(self.state, s)
     self.assertEqual(ret, 0)
Beispiel #8
0
 def test_concrete(self):
     s = self._push_string('abc\0')
     ret = strlen(self.state, s)
     self.assertEqual(ret, 3)
Beispiel #9
0
 def test_symbolic_effective_null(self):
     sy = self.state.symbolicate_buffer('ab+')
     self.state.constrain(sy[2] == 0)
     s = self._push_string(sy)
     ret = strlen(self.state, s)
     self.assertEqual(ret, 2)
Beispiel #10
0
 def test_concrete_empty(self):
     s = self._push_string('\0')
     ret = strlen(self.state, s)
     self.assertEqual(ret, 0)
Beispiel #11
0
 def test_concrete(self):
     s = self._push_string('abc\0')
     ret = strlen(self.state, s)
     self.assertEqual(ret, 3)