Work around Rails flash bug

When redirected to another page, flash 
messages will not display if the query
string is longer than 10192 bytes. In
Instiki, certain rescue operations 
involve redirection, with the updated
content of the page passed as a query
parameter. Fall back to using the stored
content (ie, don't pass a query parameter)
if the content is too long.
master
Jacques Distler 2009-10-19 18:19:31 -05:00
parent 3372d78df3
commit 20c99df440
1 changed files with 8 additions and 3 deletions

View File

@ -273,7 +273,8 @@ class WikiController < ApplicationController
if @page
new_name = params['new_name'] ? params['new_name'].purify : @page_name
raise Instiki::ValidationError.new('Your new title cannot contain a "."') if new_name.include? '.'
raise Instiki::ValidationError.new('A page named "' + new_name.escapeHTML + '" already exists.') if @page_name != new_name && @web.has_page?(new_name)
raise Instiki::ValidationError.new('A page named "' + new_name.escapeHTML + '" already exists.') if
@page_name != new_name && @web.has_page?(new_name)
wiki.revise_page(@web_name, @page_name, new_name, the_content, Time.now,
Author.new(author_name, remote_ip), PageRenderer.new)
@page.unlock
@ -286,11 +287,15 @@ class WikiController < ApplicationController
rescue Instiki::ValidationError => e
flash[:error] = e.to_s
logger.error e
param_hash = {:web => @web_name, :id => @page_name}
# Work around Rails bug: flash will not display if query string is longer than 10192 bytes
param_hash.update( :content => the_content ) if the_content &&
CGI::escape(the_content).length < 10183 && the_content != @page.current_revision.content
if @page
@page.unlock
redirect_to :action => 'edit', :web => @web_name, :id => @page_name, :content => the_content
redirect_to param_hash.update( :action => 'edit' )
else
redirect_to :action => 'new', :web => @web_name, :id => @page_name, :content => the_content
redirect_to param_hash.update( :action => 'new' )
end
end
end