mirror of
https://github.com/Grasscutters/mitmproxy.git
synced 2025-01-30 23:09:44 +00:00
pathod: fix leaking fds
This commit is contained in:
parent
673ed5b45e
commit
cfed4432a0
@ -1,7 +1,7 @@
|
||||
import os
|
||||
import string
|
||||
import random
|
||||
import mmap
|
||||
|
||||
import sys
|
||||
|
||||
DATATYPES = dict(
|
||||
@ -74,24 +74,20 @@ class RandomGenerator:
|
||||
|
||||
|
||||
class FileGenerator:
|
||||
|
||||
def __init__(self, path):
|
||||
self.path = path
|
||||
self.fp = open(path, "rb")
|
||||
self.map = mmap.mmap(self.fp.fileno(), 0, access=mmap.ACCESS_READ)
|
||||
|
||||
def __len__(self):
|
||||
return len(self.map)
|
||||
return os.path.getsize(self.path)
|
||||
|
||||
def __getitem__(self, x):
|
||||
with open(self.path, mode="rb") as f:
|
||||
if isinstance(x, slice):
|
||||
return self.map.__getitem__(x)
|
||||
# A slice of length 1 returns a byte object (not an integer)
|
||||
return self.map.__getitem__(slice(x, x + 1 or self.map.size()))
|
||||
with mmap.mmap(f.fileno(), 0, access=mmap.ACCESS_READ) as mapped:
|
||||
return mapped.__getitem__(x)
|
||||
else:
|
||||
f.seek(x)
|
||||
return f.read(1)
|
||||
|
||||
def __repr__(self):
|
||||
return "<%s" % self.path
|
||||
|
||||
def close(self):
|
||||
self.map.close()
|
||||
self.fp.close()
|
||||
|
@ -216,7 +216,8 @@ def args_pathod(argv, stdout_=sys.stdout, stderr_=sys.stderr):
|
||||
anchors = []
|
||||
for patt, spec in args.anchors:
|
||||
if os.path.isfile(spec):
|
||||
data = open(spec).read()
|
||||
with open(spec) as f:
|
||||
data = f.read()
|
||||
spec = data
|
||||
try:
|
||||
arex = re.compile(patt)
|
||||
|
@ -14,16 +14,14 @@ def test_randomgenerator():
|
||||
|
||||
def test_filegenerator(tmpdir):
|
||||
f = tmpdir.join("foo")
|
||||
f.write(b"x" * 10000)
|
||||
f.write(b"abcdefghijklmnopqrstuvwxyz" * 1000)
|
||||
g = generators.FileGenerator(str(f))
|
||||
assert len(g) == 10000
|
||||
assert g[0] == b"x"
|
||||
assert g[-1] == b"x"
|
||||
assert g[0:5] == b"xxxxx"
|
||||
assert len(g) == 26000
|
||||
assert g[0] == b"a"
|
||||
assert g[2:7] == b"cdefg"
|
||||
assert len(g[1:10]) == 9
|
||||
assert len(g[10000:10001]) == 0
|
||||
assert len(g[26000:26001]) == 0
|
||||
assert repr(g)
|
||||
g.close()
|
||||
|
||||
|
||||
def test_transform_generator():
|
||||
|
@ -2,7 +2,6 @@ import os
|
||||
import requests
|
||||
import pytest
|
||||
|
||||
from mitmproxy.test import tutils
|
||||
from pathod import test
|
||||
from pathod.pathod import SSLOptions, CA_CERT_NAME
|
||||
|
||||
@ -27,7 +26,7 @@ class TestDaemonManual:
|
||||
d = test.Daemon(ssl=True, ssloptions=ssloptions)
|
||||
rsp = requests.get(
|
||||
"https://localhost:%s/p/202:da" % d.port,
|
||||
verify=os.path.join(d.thread.server.ssloptions.confdir, CA_CERT_NAME))
|
||||
verify=os.path.expanduser(os.path.join(d.thread.server.ssloptions.confdir, CA_CERT_NAME)))
|
||||
assert rsp.ok
|
||||
assert rsp.status_code == 202
|
||||
d.shutdown()
|
||||
|
@ -1,3 +1,4 @@
|
||||
import os
|
||||
import tempfile
|
||||
import re
|
||||
import shutil
|
||||
|
Loading…
Reference in New Issue
Block a user