tests/test-bad-extension.t
author Augie Fackler <augie@google.com>
Wed, 12 Apr 2017 11:23:55 -0700
branchstable
changeset 32050 77eaf9539499
parent 30027 ebe488e04ca3
child 31957 84f9eb9758c0
permissions -rw-r--r--
dispatch: protect against malicious 'hg serve --stdio' invocations (sec) Some shared-ssh installations assume that 'hg serve --stdio' is a safe command to run for minimally trusted users. Unfortunately, the messy implementation of argument parsing here meant that trying to access a repo named '--debugger' would give the user a pdb prompt, thereby sidestepping any hoped-for sandboxing. Serving repositories over HTTP(S) is unaffected. We're not currently hardening any subcommands other than 'serve'. If your service exposes other commands to users with arbitrary repository names, it is imperative that you defend against repository names of '--debugger' and anything starting with '--config'. The read-only mode of hg-ssh stopped working because it provided its hook configuration to "hg serve --stdio" via --config parameter. This is banned for security reasons now. This patch switches it to directly call ui.setconfig(). If your custom hosting infrastructure relies on passing --config to "hg serve --stdio", you'll need to find a different way to get that configuration into Mercurial, either by using ui.setconfig() as hg-ssh does in this patch, or by placing an hgrc file someplace where Mercurial will read it. mitrandir@fb.com provided some extra fixes for the dispatch code and for hg-ssh in places that I overlooked.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
11858
934c7e91c126 tests: unify test-bad-extension
Martin Geisler <mg@lazybytes.net>
parents: 6204
diff changeset
     1
  $ echo 'raise Exception("bit bucket overflow")' > badext.py
28083
550097d01ca3 tests: confirm that a badly documented extension doesn't cause a crash
Simon Farnsworth <simonfar@fb.com>
parents: 27538
diff changeset
     2
  $ abspathexc=`pwd`/badext.py
550097d01ca3 tests: confirm that a badly documented extension doesn't cause a crash
Simon Farnsworth <simonfar@fb.com>
parents: 27538
diff changeset
     3
550097d01ca3 tests: confirm that a badly documented extension doesn't cause a crash
Simon Farnsworth <simonfar@fb.com>
parents: 27538
diff changeset
     4
  $ cat >baddocext.py <<EOF
550097d01ca3 tests: confirm that a badly documented extension doesn't cause a crash
Simon Farnsworth <simonfar@fb.com>
parents: 27538
diff changeset
     5
  > """
550097d01ca3 tests: confirm that a badly documented extension doesn't cause a crash
Simon Farnsworth <simonfar@fb.com>
parents: 27538
diff changeset
     6
  > baddocext is bad
550097d01ca3 tests: confirm that a badly documented extension doesn't cause a crash
Simon Farnsworth <simonfar@fb.com>
parents: 27538
diff changeset
     7
  > """
550097d01ca3 tests: confirm that a badly documented extension doesn't cause a crash
Simon Farnsworth <simonfar@fb.com>
parents: 27538
diff changeset
     8
  > EOF
550097d01ca3 tests: confirm that a badly documented extension doesn't cause a crash
Simon Farnsworth <simonfar@fb.com>
parents: 27538
diff changeset
     9
  $ abspathdoc=`pwd`/baddocext.py
3014
01454af644b8 load extensions only after the ui object has been completely initialized
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
    10
23172
e955549cd045 tests: write hgrc of more than two lines by using shell heredoc
Yuya Nishihara <yuya@tcha.org>
parents: 14286
diff changeset
    11
  $ cat <<EOF >> $HGRCPATH
e955549cd045 tests: write hgrc of more than two lines by using shell heredoc
Yuya Nishihara <yuya@tcha.org>
parents: 14286
diff changeset
    12
  > [extensions]
e955549cd045 tests: write hgrc of more than two lines by using shell heredoc
Yuya Nishihara <yuya@tcha.org>
parents: 14286
diff changeset
    13
  > gpg =
e955549cd045 tests: write hgrc of more than two lines by using shell heredoc
Yuya Nishihara <yuya@tcha.org>
parents: 14286
diff changeset
    14
  > hgext.gpg =
28083
550097d01ca3 tests: confirm that a badly documented extension doesn't cause a crash
Simon Farnsworth <simonfar@fb.com>
parents: 27538
diff changeset
    15
  > badext = $abspathexc
550097d01ca3 tests: confirm that a badly documented extension doesn't cause a crash
Simon Farnsworth <simonfar@fb.com>
parents: 27538
diff changeset
    16
  > baddocext = $abspathdoc
23172
e955549cd045 tests: write hgrc of more than two lines by using shell heredoc
Yuya Nishihara <yuya@tcha.org>
parents: 14286
diff changeset
    17
  > badext2 =
e955549cd045 tests: write hgrc of more than two lines by using shell heredoc
Yuya Nishihara <yuya@tcha.org>
parents: 14286
diff changeset
    18
  > EOF
3014
01454af644b8 load extensions only after the ui object has been completely initialized
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
    19
26239
f39953663cc9 test-bad-extension: reduce dependencies on other things
timeless@mozdev.org
parents: 25364
diff changeset
    20
  $ hg -q help help 2>&1 |grep extension
12640
6cc4b14fb76b tests: remove redundant globs
Mads Kiilerich <mads@kiilerich.com>
parents: 12376
diff changeset
    21
  *** failed to import extension badext from $TESTTMP/badext.py: bit bucket overflow
12375
02990e22150b tests: require regexes in unified tests to be marked with " (re)"
Brodie Rao <brodie@bitheap.org>
parents: 11858
diff changeset
    22
  *** failed to import extension badext2: No module named badext2
25364
de23a552fc23 extensions: show traceback on load failure if --traceback flag is set
Yuya Nishihara <yuya@tcha.org>
parents: 23172
diff changeset
    23
de23a552fc23 extensions: show traceback on load failure if --traceback flag is set
Yuya Nishihara <yuya@tcha.org>
parents: 23172
diff changeset
    24
show traceback
de23a552fc23 extensions: show traceback on load failure if --traceback flag is set
Yuya Nishihara <yuya@tcha.org>
parents: 23172
diff changeset
    25
26239
f39953663cc9 test-bad-extension: reduce dependencies on other things
timeless@mozdev.org
parents: 25364
diff changeset
    26
  $ hg -q help help --traceback 2>&1 | egrep ' extension|^Exception|Traceback|ImportError'
25364
de23a552fc23 extensions: show traceback on load failure if --traceback flag is set
Yuya Nishihara <yuya@tcha.org>
parents: 23172
diff changeset
    27
  *** failed to import extension badext from $TESTTMP/badext.py: bit bucket overflow
de23a552fc23 extensions: show traceback on load failure if --traceback flag is set
Yuya Nishihara <yuya@tcha.org>
parents: 23172
diff changeset
    28
  Traceback (most recent call last):
de23a552fc23 extensions: show traceback on load failure if --traceback flag is set
Yuya Nishihara <yuya@tcha.org>
parents: 23172
diff changeset
    29
  Exception: bit bucket overflow
de23a552fc23 extensions: show traceback on load failure if --traceback flag is set
Yuya Nishihara <yuya@tcha.org>
parents: 23172
diff changeset
    30
  *** failed to import extension badext2: No module named badext2
de23a552fc23 extensions: show traceback on load failure if --traceback flag is set
Yuya Nishihara <yuya@tcha.org>
parents: 23172
diff changeset
    31
  Traceback (most recent call last):
de23a552fc23 extensions: show traceback on load failure if --traceback flag is set
Yuya Nishihara <yuya@tcha.org>
parents: 23172
diff changeset
    32
  ImportError: No module named badext2
de23a552fc23 extensions: show traceback on load failure if --traceback flag is set
Yuya Nishihara <yuya@tcha.org>
parents: 23172
diff changeset
    33
28155
7f430b2ac7fd extensions: add notloaded method to return extensions failed to load
Jun Wu <quark@fb.com>
parents: 28083
diff changeset
    34
names of extensions failed to load can be accessed via extensions.notloaded()
7f430b2ac7fd extensions: add notloaded method to return extensions failed to load
Jun Wu <quark@fb.com>
parents: 28083
diff changeset
    35
7f430b2ac7fd extensions: add notloaded method to return extensions failed to load
Jun Wu <quark@fb.com>
parents: 28083
diff changeset
    36
  $ cat <<EOF > showbadexts.py
7f430b2ac7fd extensions: add notloaded method to return extensions failed to load
Jun Wu <quark@fb.com>
parents: 28083
diff changeset
    37
  > from mercurial import cmdutil, commands, extensions
7f430b2ac7fd extensions: add notloaded method to return extensions failed to load
Jun Wu <quark@fb.com>
parents: 28083
diff changeset
    38
  > cmdtable = {}
7f430b2ac7fd extensions: add notloaded method to return extensions failed to load
Jun Wu <quark@fb.com>
parents: 28083
diff changeset
    39
  > command = cmdutil.command(cmdtable)
7f430b2ac7fd extensions: add notloaded method to return extensions failed to load
Jun Wu <quark@fb.com>
parents: 28083
diff changeset
    40
  > @command('showbadexts', norepo=True)
7f430b2ac7fd extensions: add notloaded method to return extensions failed to load
Jun Wu <quark@fb.com>
parents: 28083
diff changeset
    41
  > def showbadexts(ui, *pats, **opts):
28338
9974b8236cac tests: Solaris grep doesn't add a trailing newline when it's missing
Danek Duvall <danek.duvall@oracle.com>
parents: 28155
diff changeset
    42
  >     ui.write('BADEXTS: %s\n' % ' '.join(sorted(extensions.notloaded())))
28155
7f430b2ac7fd extensions: add notloaded method to return extensions failed to load
Jun Wu <quark@fb.com>
parents: 28083
diff changeset
    43
  > EOF
7f430b2ac7fd extensions: add notloaded method to return extensions failed to load
Jun Wu <quark@fb.com>
parents: 28083
diff changeset
    44
  $ hg --config extensions.badexts=showbadexts.py showbadexts 2>&1 | grep '^BADEXTS'
7f430b2ac7fd extensions: add notloaded method to return extensions failed to load
Jun Wu <quark@fb.com>
parents: 28083
diff changeset
    45
  BADEXTS: badext badext2
7f430b2ac7fd extensions: add notloaded method to return extensions failed to load
Jun Wu <quark@fb.com>
parents: 28083
diff changeset
    46
25364
de23a552fc23 extensions: show traceback on load failure if --traceback flag is set
Yuya Nishihara <yuya@tcha.org>
parents: 23172
diff changeset
    47
show traceback for ImportError of hgext.name if debug is set
de23a552fc23 extensions: show traceback on load failure if --traceback flag is set
Yuya Nishihara <yuya@tcha.org>
parents: 23172
diff changeset
    48
(note that --debug option isn't applied yet when loading extensions)
de23a552fc23 extensions: show traceback on load failure if --traceback flag is set
Yuya Nishihara <yuya@tcha.org>
parents: 23172
diff changeset
    49
26239
f39953663cc9 test-bad-extension: reduce dependencies on other things
timeless@mozdev.org
parents: 25364
diff changeset
    50
  $ (hg -q help help --traceback --config ui.debug=True 2>&1) \
f39953663cc9 test-bad-extension: reduce dependencies on other things
timeless@mozdev.org
parents: 25364
diff changeset
    51
  > | grep -v '^ ' \
f39953663cc9 test-bad-extension: reduce dependencies on other things
timeless@mozdev.org
parents: 25364
diff changeset
    52
  > | egrep 'extension..[^p]|^Exception|Traceback|ImportError|not import'
25364
de23a552fc23 extensions: show traceback on load failure if --traceback flag is set
Yuya Nishihara <yuya@tcha.org>
parents: 23172
diff changeset
    53
  *** failed to import extension badext from $TESTTMP/badext.py: bit bucket overflow
de23a552fc23 extensions: show traceback on load failure if --traceback flag is set
Yuya Nishihara <yuya@tcha.org>
parents: 23172
diff changeset
    54
  Traceback (most recent call last):
de23a552fc23 extensions: show traceback on load failure if --traceback flag is set
Yuya Nishihara <yuya@tcha.org>
parents: 23172
diff changeset
    55
  Exception: bit bucket overflow
30027
ebe488e04ca3 extensions: fix a debug message when searching for extensions
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 28737
diff changeset
    56
  could not import hgext.badext2 (No module named *badext2): trying hgext3rd.badext2 (glob)
25364
de23a552fc23 extensions: show traceback on load failure if --traceback flag is set
Yuya Nishihara <yuya@tcha.org>
parents: 23172
diff changeset
    57
  Traceback (most recent call last):
27538
50ad3f25fb4c test-bad-extension: account for PyPy/CPython error difference
Bryan O'Sullivan <bos@serpentine.com>
parents: 26239
diff changeset
    58
  ImportError: No module named *badext2 (glob)
28737
a3a01194a337 pypy: fix overspecific test checks
Maciej Fijalkowski <fijall@gmail.com>
parents: 28541
diff changeset
    59
  could not import hgext3rd.badext2 (No module named *badext2): trying badext2 (glob)
28541
4b81487a01d4 extensions: also search for extension in the 'hgext3rd' package
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 28338
diff changeset
    60
  Traceback (most recent call last):
28737
a3a01194a337 pypy: fix overspecific test checks
Maciej Fijalkowski <fijall@gmail.com>
parents: 28541
diff changeset
    61
  ImportError: No module named *badext2 (glob)
25364
de23a552fc23 extensions: show traceback on load failure if --traceback flag is set
Yuya Nishihara <yuya@tcha.org>
parents: 23172
diff changeset
    62
  *** failed to import extension badext2: No module named badext2
de23a552fc23 extensions: show traceback on load failure if --traceback flag is set
Yuya Nishihara <yuya@tcha.org>
parents: 23172
diff changeset
    63
  Traceback (most recent call last):
de23a552fc23 extensions: show traceback on load failure if --traceback flag is set
Yuya Nishihara <yuya@tcha.org>
parents: 23172
diff changeset
    64
  ImportError: No module named badext2
28083
550097d01ca3 tests: confirm that a badly documented extension doesn't cause a crash
Simon Farnsworth <simonfar@fb.com>
parents: 27538
diff changeset
    65
550097d01ca3 tests: confirm that a badly documented extension doesn't cause a crash
Simon Farnsworth <simonfar@fb.com>
parents: 27538
diff changeset
    66
confirm that there's no crash when an extension's documentation is bad
550097d01ca3 tests: confirm that a badly documented extension doesn't cause a crash
Simon Farnsworth <simonfar@fb.com>
parents: 27538
diff changeset
    67
550097d01ca3 tests: confirm that a badly documented extension doesn't cause a crash
Simon Farnsworth <simonfar@fb.com>
parents: 27538
diff changeset
    68
  $ hg help --keyword baddocext
550097d01ca3 tests: confirm that a badly documented extension doesn't cause a crash
Simon Farnsworth <simonfar@fb.com>
parents: 27538
diff changeset
    69
  *** failed to import extension badext from $TESTTMP/badext.py: bit bucket overflow
550097d01ca3 tests: confirm that a badly documented extension doesn't cause a crash
Simon Farnsworth <simonfar@fb.com>
parents: 27538
diff changeset
    70
  *** failed to import extension badext2: No module named badext2
550097d01ca3 tests: confirm that a badly documented extension doesn't cause a crash
Simon Farnsworth <simonfar@fb.com>
parents: 27538
diff changeset
    71
  Topics:
550097d01ca3 tests: confirm that a badly documented extension doesn't cause a crash
Simon Farnsworth <simonfar@fb.com>
parents: 27538
diff changeset
    72
  
550097d01ca3 tests: confirm that a badly documented extension doesn't cause a crash
Simon Farnsworth <simonfar@fb.com>
parents: 27538
diff changeset
    73
   extensions Using Additional Features