Forum: Ruby max_multipart_length

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
9630ff9880eab934f14f7aa68930e060?d=identicon&s=25 Andras Horvath (log69)
on 2017-04-22 16:14
Hi,

In lib/ruby/2.4.0/cgi/core.rb in line 646 there is this:

@@max_multipart_length= 128 * 1024 * 1024

And this seems to be the limit of my file upload to server side. I can
upload a 120 MB file, but cannot upload of a 130 MB size. I've got an
error:

/usr/local/lib/ruby/2.4.0/cgi/core.rb:646:in `initialize_query': too
large multipart data. (StandardError)
        from /usr/local/lib/ruby/2.4.0/cgi/core.rb:852:in `initialize'

My environment is:
OS: Ubuntu Linux 16.04 LTS (64 bit)
Ruby: 2.4.1p111
Web server: Apache 2.4.18-2

I have no other security stuff (modsecurity, evasive etc), but plain
Apache.

Any idea how I can increase this limit? Thanks.

Andras
0fa73332c8e4a3b06ea439fd3f034322?d=identicon&s=25 Ronald Fischer (rovf)
on 2017-04-24 13:15
Not tested, but maybe this is worth a try:

First, find out which class the variable is defined in. If I'm not
mistaken, this is in module QueryExtension.

Then, after loading (requiring) the module, but before actually using
its methods, do a

    QueryExtension.class_variable_set(:@@max_multipart_length,
your_value_goes_here)

Note that this approach is not without risk and we can smell the hack.
For instance, if the module has another variable which depends on the
one you are going to change, i.e. something like

    @@my_funny_valentine = @@max_multipart_lenght * 2

this connection is broken, as the other variable, naturally, is not
being updated accordingly.

Another (safer) possibility would be to make your own, local,
installation of Ruby, and update the value there inside core.rb. This
again has the drawback that this has to be done on every installation of
a new Ruby method.

So, no solution is really nice, but I can't offer anything better.
9630ff9880eab934f14f7aa68930e060?d=identicon&s=25 Andras Horvath (log69)
on 2017-04-24 13:18
Hi, I just got the answer now from the IRC channel of Ruby-lang:

https://ruby-doc.org/stdlib-2.4.1/libdoc/cgi/rdoc/...

mycgi = CGI.new(:max_multipart_length => 4 * 1024 * 1024 * 1024)
0fa73332c8e4a3b06ea439fd3f034322?d=identicon&s=25 Ronald Fischer (rovf)
on 2017-04-24 13:29
That's much nicer indeed.....
9630ff9880eab934f14f7aa68930e060?d=identicon&s=25 Andras Horvath (log69)
on 2017-04-24 13:29
Thanks anyway.
This topic is locked and can not be replied to.