Patchwork D11476: extensions: prevent a crash on py3 with a `minimumhgversion` str value

login
register
mail settings
Submitter phabricator
Date Sept. 21, 2021, 3:39 p.m.
Message ID <differential-rev-PHID-DREV-ttcu265bwyejvjghonvx-req@mercurial-scm.org>
Download mbox | patch
Permalink /patch/49792/
State Superseded
Headers show

Comments

phabricator - Sept. 21, 2021, 3:39 p.m.
mharbison72 created this revision.
Herald added a reviewer: hg-reviewers.
Herald added a subscriber: mercurial-patches.

REVISION SUMMARY
  The expectation is that this field is bytes, but unported extensions are a thing
  and it shouldn't explode on a bad value.  We already do this transformation in
  the version reporting mechanism.

REPOSITORY
  rHG Mercurial

BRANCH
  default

REVISION DETAIL
  https://phab.mercurial-scm.org/D11476

AFFECTED FILES
  mercurial/extensions.py
  tests/test-extension.t

CHANGE DETAILS




To: mharbison72, #hg-reviewers
Cc: mercurial-patches, mercurial-devel

Patch

diff --git a/tests/test-extension.t b/tests/test-extension.t
--- a/tests/test-extension.t
+++ b/tests/test-extension.t
@@ -1692,12 +1692,13 @@ 
   $ hg --config extensions.minversion=minversion3.py version 2>&1 | egrep '\(third'
   [1]
 
-Don't explode on py3 with a bad version number
+Don't explode on py3 with a bad version number (both str vs bytes, and not enough
+parts)
 
   $ cat > minversion4.py << EOF
   > from mercurial import util
   > util.version = lambda: b'3.5'
-  > minimumhgversion = b'3'
+  > minimumhgversion = '3'
   > EOF
   $ hg --config extensions.minversion=minversion4.py version -v
   Mercurial Distributed SCM (version 3.5)
diff --git a/mercurial/extensions.py b/mercurial/extensions.py
--- a/mercurial/extensions.py
+++ b/mercurial/extensions.py
@@ -224,7 +224,7 @@ 
     minver = getattr(mod, 'minimumhgversion', None)
     if minver:
         curver = util.versiontuple(n=2)
-        extmin = util.versiontuple(minver, 2)
+        extmin = util.versiontuple(stringutil.forcebytestr(minver), 2)
 
         if None in extmin:
             extmin = (extmin[0] or 0, extmin[1] or 0)