summaryrefslogtreecommitdiff
path: root/rdiff-backup/rdiff_backup/librsync_memoryleak2.py
blob: 72400b2dd71a2a29c798d8608842e0d27ef62d65 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#!/usr/bin/env python

"""Demonstrate a memory leak in pysync/librsync"""

import os, _librsync
from librsync import *

os.chdir("/tmp")

# Write 2 1 byte files
afile = open("a", "wb")
afile.write("a")
afile.close()

efile = open("e", "wb")
efile.write("e")
efile.close()

def copy(infileobj, outpath):
	outfile = open(outpath, "wb")
	while 1:
		buf = infileobj.read(32768)
		if not buf: break
		outfile.write(buf)
	assert not outfile.close()
	assert not infileobj.close()

def test_cycle():
	for i in xrange(100000):
		sm = _librsync.new_sigmaker()
		sm.cycle("a")

def main_test():
	for i in xrange(100000):
		# Write signature file
		afile = open("a", "rb")
		copy(SigFile(afile), "sig")

		# Write delta file
		efile = open("e", "r")
		sigfile = open("sig", "rb")
		copy(DeltaFile(sigfile, efile), "delta")

		# Write patched file
		afile = open("e", "rb")
		deltafile = open("delta", "rb")
		copy(PatchedFile(afile, deltafile), "a.out")

main_test()