[Request] [+ ] D9745: revlog: use size_t for nodetree capacity

quark (Jun Wu) phabricator at mercurial-scm.org
Tue Jan 12 22:51:29 UTC 2021


quark created this revision.
Herald added a reviewer: hg-reviewers.
Herald added a subscriber: mercurial-patches.

REVISION SUMMARY
  This allows handling revlog containing more than 33554432 (INT_MAX /
  sizeof(nodetreenode)) revisions on x64 platforms.

REPOSITORY
  rHG Mercurial

BRANCH
  default

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

AFFECTED FILES
  mercurial/cext/revlog.c

CHANGE DETAILS

diff --git a/mercurial/cext/revlog.c b/mercurial/cext/revlog.c
--- a/mercurial/cext/revlog.c
+++ b/mercurial/cext/revlog.c
@@ -13,6 +13,7 @@
 #include <ctype.h>
 #include <limits.h>
 #include <stddef.h>
+#include <stdint.h>
 #include <stdlib.h>
 #include <string.h>
 
@@ -55,10 +56,10 @@
 	indexObject *index;
 	nodetreenode *nodes;
 	Py_ssize_t nodelen;
-	unsigned length;   /* # nodes in use */
-	unsigned capacity; /* # nodes allocated */
-	int depth;         /* maximum depth of tree */
-	int splits;        /* # splits performed */
+	size_t length;   /* # nodes in use */
+	size_t capacity; /* # nodes allocated */
+	int depth;       /* maximum depth of tree */
+	int splits;      /* # splits performed */
 } nodetree;
 
 typedef struct {
@@ -1536,10 +1537,10 @@
 static int nt_new(nodetree *self)
 {
 	if (self->length == self->capacity) {
-		unsigned newcapacity;
+		size_t newcapacity;
 		nodetreenode *newnodes;
 		newcapacity = self->capacity * 2;
-		if (newcapacity >= INT_MAX / sizeof(nodetreenode)) {
+		if (newcapacity >= SIZE_MAX / sizeof(nodetreenode)) {
 			PyErr_SetString(PyExc_MemoryError,
 			                "overflow in nt_new");
 			return -1;
@@ -1643,7 +1644,7 @@
 	self->nodelen = index->nodelen;
 	self->depth = 0;
 	self->splits = 0;
-	if ((size_t)self->capacity > INT_MAX / sizeof(nodetreenode)) {
+	if (self->capacity > SIZE_MAX / sizeof(nodetreenode)) {
 		PyErr_SetString(PyExc_ValueError, "overflow in init_nt");
 		return -1;
 	}



To: quark, #hg-reviewers
Cc: mercurial-patches, mercurial-devel
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mercurial-scm.org/pipermail/mercurial-patches/attachments/20210112/fcaed0f5/attachment.html>


More information about the Mercurial-patches mailing list