Merge branch 'bzr/golem' of /Users/distler/Sites/code/instiki
This commit is contained in:
commit
1376a01574
|
@ -270,7 +270,7 @@ class WikiController < ApplicationController
|
||||||
prev_content = ''
|
prev_content = ''
|
||||||
filter_spam(the_content)
|
filter_spam(the_content)
|
||||||
raise Instiki::ValidationError.new('Your name cannot contain a "."') if author_name.include? '.'
|
raise Instiki::ValidationError.new('Your name cannot contain a "."') if author_name.include? '.'
|
||||||
cookies['author'] = { :value => author_name, :expires => Time.utc(2030) }
|
cookies['author'] = { :value => author_name.dup.as_bytes, :expires => Time.utc(2030) }
|
||||||
if @page
|
if @page
|
||||||
new_name = params['new_name'] ? params['new_name'].purify : @page_name
|
new_name = params['new_name'] ? params['new_name'].purify : @page_name
|
||||||
prev_content = @page.current_revision.content
|
prev_content = @page.current_revision.content
|
||||||
|
|
|
@ -30,9 +30,9 @@ class String
|
||||||
# returns a valid utf-8 string, purged of any subsequences of illegal bytes.
|
# returns a valid utf-8 string, purged of any subsequences of illegal bytes.
|
||||||
#--
|
#--
|
||||||
def purify
|
def purify
|
||||||
text = check_ncrs
|
text = self.dup.check_ncrs.as_utf8
|
||||||
if text.respond_to?(:encoding)
|
if text.respond_to?(:force_encoding)
|
||||||
text.split(//).collect{|c| c.as_bytes}.grep(UTF8_REGEX).join.as_utf8
|
text.chars.collect{|c| c.as_bytes}.grep(UTF8_REGEX).join.as_utf8
|
||||||
else
|
else
|
||||||
text.split(//u).grep(UTF8_REGEX).join
|
text.split(//u).grep(UTF8_REGEX).join
|
||||||
end
|
end
|
||||||
|
|
12
test/functional/wiki_controller_test.rb
Executable file → Normal file
12
test/functional/wiki_controller_test.rb
Executable file → Normal file
|
@ -653,6 +653,18 @@ class WikiControllerTest < ActionController::TestCase
|
||||||
assert_equal 'AuthorOfNewPage', new_page.author
|
assert_equal 'AuthorOfNewPage', new_page.author
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_save_astral_plane_characters
|
||||||
|
r = process 'save', 'web' => 'wiki1', 'id' => 'NewPage', 'content' => "Double-struck A: \xF0\x9D\x94\xB8",
|
||||||
|
'author' => "\xF0\x9D\x94\xB8\xC3\xBCthorOfNewPage"
|
||||||
|
|
||||||
|
assert_redirected_to :web => 'wiki1', :controller => 'wiki', :action => 'show', :id => 'NewPage'
|
||||||
|
assert_match @eternity, r.headers["Set-Cookie"][0]
|
||||||
|
new_page = @wiki.read_page('wiki1', 'NewPage')
|
||||||
|
assert_equal "Double-struck A: \360\235\224\270", new_page.content
|
||||||
|
assert_equal "\360\235\224\270\303\274thorOfNewPage", new_page.author
|
||||||
|
assert_equal "\360\235\224\270\303\274thorOfNewPage", r.cookies['author']
|
||||||
|
end
|
||||||
|
|
||||||
def test_save_not_utf8
|
def test_save_not_utf8
|
||||||
r = process 'save', 'web' => 'wiki1', 'id' => 'NewPage', 'content' => "Cont\000ents of a new page\r\n\000",
|
r = process 'save', 'web' => 'wiki1', 'id' => 'NewPage', 'content' => "Cont\000ents of a new page\r\n\000",
|
||||||
'author' => 'AuthorOfNewPage'
|
'author' => 'AuthorOfNewPage'
|
||||||
|
|
Loading…
Reference in a new issue