Maximum large object size should be limited by SSIZE_MAX not SIZE_MAX.
authorNeale Ferguson <neale@ubuntu-14-x64-01.devlab.sinenomine.net>
Fri, 12 Sep 2014 15:37:52 +0000 (11:37 -0400)
committerNeale Ferguson <neale@ubuntu-14-x64-01.devlab.sinenomine.net>
Fri, 12 Sep 2014 15:37:52 +0000 (11:37 -0400)
The latter appears to be a hangover from 32-bit systems.

mono/metadata/sgen-los.c

index 1e38006cac7e198d08b2b89bed5530f9ce236099..8e823b055377b046c0ae574e46f0edc5f3d19b56 100644 (file)
@@ -336,13 +336,13 @@ sgen_los_alloc_large_inner (MonoVTable *vtable, size_t size)
        g_assert ((size & 1) == 0);
 
        /*
-        * size + sizeof (LOSObject) <= SIZE_MAX - (mono_pagesize () - 1)
+        * size + sizeof (LOSObject) <= SSIZE_MAX - (mono_pagesize () - 1)
         *
         * therefore:
         *
-        * size <= SIZE_MAX - (mono_pagesize () - 1) - sizeof (LOSObject)
+        * size <= SSIZE_MAX - (mono_pagesize () - 1) - sizeof (LOSObject)
         */
-       if (size > SIZE_MAX - (mono_pagesize () - 1) - sizeof (LOSObject))
+       if (size > SSIZE_MAX - (mono_pagesize () - 1) - sizeof (LOSObject))
                return NULL;
 
 #ifdef LOS_DUMMY