X-Git-Url: https://git.openstreetmap.org./rails.git/blobdiff_plain/d6c3fe575994b627eb4438cd49143f2017449169..f03c8637f7377f34d31f4b0bd88caa4a9e7a9570:/lib/potlatch.rb?ds=sidebyside diff --git a/lib/potlatch.rb b/lib/potlatch.rb index 43be2f8b4..359492fa7 100644 --- a/lib/potlatch.rb +++ b/lib/potlatch.rb @@ -8,18 +8,20 @@ module Potlatch # Return two-byte integer def self.getint(s) - s.getc*256+s.getc + s.getbyte*256+s.getbyte end # Return four-byte long def self.getlong(s) - ((s.getc*256+s.getc)*256+s.getc)*256+s.getc + ((s.getbyte*256+s.getbyte)*256+s.getbyte)*256+s.getbyte end # Return string with two-byte length def self.getstring(s) - len=s.getc*256+s.getc - s.read(len) + len=s.getbyte*256+s.getbyte + str=s.read(len) + str.force_encoding("UTF-8") if str.respond_to?("force_encoding") + str end # Return eight-byte double-precision float @@ -45,23 +47,23 @@ module Potlatch if (key=='') then break end arr[key]=getvalue(s) end - s.getc # skip the 9 'end of object' value + s.getbyte # skip the 9 'end of object' value arr end # Parse and get value def self.getvalue(s) - case s.getc + case s.getbyte when 0; return getdouble(s) # number - when 1; return s.getc # boolean + when 1; return s.getbyte # boolean when 2; return getstring(s) # string when 3; return getobject(s) # object/hash - when 5; return nil # null - when 6; return nil # undefined - when 8; s.read(4) # mixedArray - return getobject(s) # | - when 10;return getarray(s) # array - else; return nil # error + when 5; return nil # null + when 6; return nil # undefined + when 8; s.read(4) # mixedArray + return getobject(s) # | + when 10; return getarray(s) # array + else; return nil # error end end @@ -104,7 +106,8 @@ module Potlatch end # Encode string with two-byte length - def self.encodestring(n) + def self.encodestring(n) + n=n.dup.force_encoding("ASCII-8BIT") if n.respond_to?("force_encoding") a,b=n.size.divmod(256) a.chr+b.chr+n end @@ -134,7 +137,7 @@ module Potlatch # Skip headers AMF.getint(@request).times do # Read number of headers and loop AMF.getstring(@request) # | skip name - req.getc # | skip boolean + req.getbyte # | skip boolean AMF.getvalue(@request) # | skip value end