Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit d2bb830

Browse files
committed
#10464: fix netrc handling of lines with embedded '#" characters.
Patch by Xuanji Li.
1 parent 2fdc7b1 commit d2bb830

4 files changed

Lines changed: 23 additions & 6 deletions

File tree

Lib/netrc.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,11 +34,15 @@ def __init__(self, file=None):
3434
def _parse(self, file, fp):
3535
lexer = shlex.shlex(fp)
3636
lexer.wordchars += r"""!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~"""
37+
lexer.commenters = lexer.commenters.replace('#', '')
3738
while 1:
3839
# Look for a machine, default, or macdef top-level keyword
3940
toplevel = tt = lexer.get_token()
4041
if not tt:
4142
break
43+
elif tt[0] == '#':
44+
fp.readline();
45+
continue;
4246
elif tt == 'machine':
4347
entryname = lexer.get_token()
4448
elif tt == 'default':

Lib/test/test_netrc.py

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,13 @@
33
from test import support
44

55
TEST_NETRC = """
6+
7+
#this is a comment
8+
#this is a comment
9+
# this is a comment
10+
611
machine foo login log1 password pass1 account acct1
12+
machine bar login log1 password pass# account acct1
713
814
macdef macro1
915
line1
@@ -28,17 +34,21 @@ def setUp(self):
2834
fp = open(temp_filename, mode)
2935
fp.write(TEST_NETRC)
3036
fp.close()
37+
self.nrc = netrc.netrc(temp_filename)
3138

3239
def tearDown(self):
3340
os.unlink(temp_filename)
3441

3542
def test_case_1(self):
36-
nrc = netrc.netrc(temp_filename)
37-
self.assertTrue(nrc.macros == {'macro1':['line1\n', 'line2\n'],
38-
'macro2':['line3\n', 'line4\n']}
39-
)
40-
self.assertTrue(nrc.hosts['foo'] == ('log1', 'acct1', 'pass1'))
41-
self.assertTrue(nrc.hosts['default'] == ('log2', None, 'pass2'))
43+
self.assertEqual(self.nrc.hosts['foo'], ('log1', 'acct1', 'pass1'))
44+
self.assertEqual(self.nrc.hosts['default'], ('log2', None, 'pass2'))
45+
46+
def test_macros(self):
47+
self.assertEqual(self.nrc.macros, {'macro1':['line1\n', 'line2\n'],
48+
'macro2':['line3\n', 'line4\n']})
49+
50+
def test_parses_passwords_with_hash_character(self):
51+
self.assertEqual(self.nrc.hosts['bar'], ('log1', 'acct1', 'pass#'))
4252

4353
def test_main():
4454
support.run_unittest(NetrcTestCase)

Misc/ACKS

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -501,6 +501,7 @@ John Lenton
501501
Christopher Tur Lesniewski-Laas
502502
Mark Levinson
503503
William Lewis
504+
Xuanji Li
504505
Robert van Liere
505506
Ross Light
506507
Shawn Ligocki

Misc/NEWS

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,8 @@ Core and Builtins
4646
Library
4747
-------
4848

49+
- Issue #10464: netrc now correctly handles lines with embedded '#' characters.
50+
4951
- Added itertools.accumulate().
5052

5153
- Issue #4113: Added custom ``__repr__`` method to ``functools.partial``.

0 commit comments

Comments
 (0)