Now gather round for a spooky story
Late one night... in the haunted office/castle the midnight candles were burning bright and we entered data for a user file....
(hindenbugs cackling in the background, dusty technical books line the dark shelves)
A simple 52MB gzipped datafile that we want to process in the browser. We unzip it, decode it, and ... we see an error!!! LIGHTNING CRACKS
But... our code is so simple (we of course abide by the religion of writing "simple code" you know)...what could be happening?
The code looks like this
We trace it back and run a console.log(str)
It looks empty. We try running console.log(str.length)
... it prints out 0
But if we look at console.log(buffer.length)
we get 546,483,710 bytes...
What could be happening?
We see in the TextDecoder
documentation that it has a note called "fatal". We
try
This doesn't change the results though
Then it dawns on us while the lightning hits and the thunderclap booms and the wind blows through the rattly windows
We have hit...the maximum string length in Chrome
BWAHAHAHAHA
The maximum string length!!! Nooooooo
It is 512MB on the dot... 536,870,888 bytes. We test this to be sure
This is correct, outputs 536,870,888
With anything, even one byte more, it fails and outputs 0
happy halloween!!
pumpkin photo source: http://mountainbikerak.blogspot.com/2010/11/google-chrome-pumpkin.html
chrome 95 tested
nodejs 15 - at 512MB+1 bytes it prints an error message
Error: Cannot create a string longer than 0x1fffffe8 characters
for
significantly greater than 512MB e.g. 600MB it actually prints a different
error
TypeError [ERR_ENCODING_INVALID_ENCODED_DATA]: The encoded data was not valid for encoding utf-8
)
firefox 93 - goes up to ~1GB but then gives Exception
{ name: "NS_ERROR_OUT_OF_MEMORY", message: "", result: 2147942414 }
midori 6 (safari-alike/webkit) - goes up to ~2GB fine! will have to test more