Revision: 6694
http://winmerge.svn.sourceforge.net/winmerge/?rev=6694&view=rev
Author: kimmov
Date: 2009-04-23 14:14:28 +0000 (Thu, 23 Apr 2009)
Log Message:
-----------
BUG: [ 2774677 ] Large Files crash WinMerge...
Limit linebuffer growth speed.
Modified Paths:
--------------
trunk/Src/DiffTextBuffer.cpp
Modified: trunk/Src/DiffTextBuffer.cpp
===================================================================
--- trunk/Src/DiffTextBuffer.cpp 2009-04-23 13:20:28 UTC (rev 6693)
+++ trunk/Src/DiffTextBuffer.cpp 2009-04-23 14:14:28 UTC (rev 6694)
@@ -404,10 +404,16 @@
break;
// but if last line had eol, we add an extra (empty) line to buffer
- // Manually grow line array exponentially
+ // Grow line array
if (lineno == arraysize)
{
- arraysize *= 2;
+ // For smaller sizes use exponential growth, but for larger
+ // sizes grow by constant ratio. Unlimited exponential growth
+ // easily runs out of memory.
+ if (arraysize < 100 * 1024)
+ arraysize *= 2;
+ else
+ arraysize += 100 * 1024;
m_aLines.SetSize(arraysize);
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|