diff --git a/remotefilelog/remotefilelog.py b/remotefilelog/remotefilelog.py --- a/remotefilelog/remotefilelog.py +++ b/remotefilelog/remotefilelog.py @@ -17,6 +17,10 @@ from mercurial import filelog, revlog, mdiff, ancestor, error from mercurial.i18n import _ +# corresponds to uncompressed length of revlog's indexformatng (2 gigs, 4-byte +# signed integer) +_maxentrysize = 0x7fffffff + class remotefilelognodemap(object): def __init__(self, filename, store): self._filename = filename @@ -118,6 +122,12 @@ meta, metaoffset = filelog.parsemeta(text) rawtext, validatehash = self._processflags(text, flags, 'write') + + if len(rawtext) > _maxentrysize: + raise revlog.RevlogError( + _("%s: size of %d bytes exceeds maximum size of 2GiB") + % (self.filename, len(rawtext))) + return self.addrawrevision(rawtext, transaction, linknode, p1, p2, node, flags, cachedelta, _metatuple=(meta, metaoffset))