Show More
@@ -0,0 +1,27 b'' | |||
|
1 | from __future__ import absolute_import | |
|
2 | ||
|
3 | import unittest | |
|
4 | ||
|
5 | import silenttestrunner | |
|
6 | ||
|
7 | from mercurial import util | |
|
8 | ||
|
9 | ||
|
10 | class dirstests(unittest.TestCase): | |
|
11 | def testdirs(self): | |
|
12 | for case, want in [ | |
|
13 | (b'a/a/a', [b'a', b'a/a', b'']), | |
|
14 | (b'alpha/beta/gamma', [b'', b'alpha', b'alpha/beta']), | |
|
15 | ]: | |
|
16 | d = util.dirs({}) | |
|
17 | d.addpath(case) | |
|
18 | self.assertEqual(sorted(d), sorted(want)) | |
|
19 | ||
|
20 | def testinvalid(self): | |
|
21 | with self.assertRaises(ValueError): | |
|
22 | d = util.dirs({}) | |
|
23 | d.addpath(b'a//b') | |
|
24 | ||
|
25 | ||
|
26 | if __name__ == '__main__': | |
|
27 | silenttestrunner.main(__name__) |
@@ -66,6 +66,14 b' static int _addpath(PyObject *dirs, PyOb' | |||
|
66 | 66 | while ((pos = _finddir(cpath, pos - 1)) != -1) { |
|
67 | 67 | PyObject *val; |
|
68 | 68 | |
|
69 | /* Sniff for trailing slashes, a marker of an invalid input. */ | |
|
70 | if (pos > 0 && cpath[pos - 1] == '/') { | |
|
71 | PyErr_SetString( | |
|
72 | PyExc_ValueError, | |
|
73 | "found invalid consecutive slashes in path"); | |
|
74 | goto bail; | |
|
75 | } | |
|
76 | ||
|
69 | 77 | key = PyBytes_FromStringAndSize(cpath, pos); |
|
70 | 78 | if (key == NULL) |
|
71 | 79 | goto bail; |
@@ -3515,6 +3515,10 b' class dirs(object):' | |||
|
3515 | 3515 | def addpath(self, path): |
|
3516 | 3516 | dirs = self._dirs |
|
3517 | 3517 | for base in finddirs(path): |
|
3518 | if base.endswith(b'/'): | |
|
3519 | raise ValueError( | |
|
3520 | "found invalid consecutive slashes in path: %r" % base | |
|
3521 | ) | |
|
3518 | 3522 | if base in dirs: |
|
3519 | 3523 | dirs[base] += 1 |
|
3520 | 3524 | return |
General Comments 0
You need to be logged in to leave comments.
Login now