[PATCH STABLE] subrepo: open files in 'rb' mode to read exact data in (issue3926)

FUJIWARA Katsunori foozy at lares.dti.ne.jp
Thu May 9 07:29:47 CDT 2013

# HG changeset patch
# User FUJIWARA Katsunori <foozy at lares.dti.ne.jp>
# Date 1368101398 -32400
#      Thu May 09 21:09:58 2013 +0900
# Branch stable
# Node ID ed1a212193dc237edc350330146128a13641e38f
# Parent  0a12e5f3a979ee302dc10647483200df00a105ab
subrepo: open files in 'rb' mode to read exact data in (issue3926)

Before this patch, "subrepo._calcfilehash()" opens files by "open()"
without any mode specification. This implies "text mode" on Windows.

When target file contains '\x00' byte, "read()" in "text mode" reads
file contents in without data after '\x00'.

This causes invalid SHA1 hash calculation in "subrepo._calcfilehash()".

This patch opens files in 'rb' mode to read exact data in.

diff --git a/mercurial/subrepo.py b/mercurial/subrepo.py
--- a/mercurial/subrepo.py
+++ b/mercurial/subrepo.py
@@ -31,7 +31,7 @@
 def _calcfilehash(filename):
     data = ''
     if os.path.exists(filename):
-        fd = open(filename)
+        fd = open(filename, 'rb')
         data = fd.read()
     return util.sha1(data).hexdigest()

More information about the Mercurial-devel mailing list