Browse Source

fixed bug with many utf8 strings in neko.

Nicolas Cannasse 19 years ago
parent
commit
3cb3b60147
1 changed files with 8 additions and 2 deletions
  1. 8 2
      std/haxe/Unserializer.hx

+ 8 - 2
std/haxe/Unserializer.hx

@@ -40,11 +40,15 @@ class Unserializer {
  	var cache : Array<Dynamic>;
  	var cache : Array<Dynamic>;
  	var scache : Array<String>;
  	var scache : Array<String>;
  	var resolver : TypeResolver;
  	var resolver : TypeResolver;
+ 	#if neko
+ 	var upos : Int;
+ 	#end
 
 
  	public function new( buf : String ) {
  	public function new( buf : String ) {
  		this.buf = buf;
  		this.buf = buf;
  		length = buf.length;
  		length = buf.length;
  		pos = 0;
  		pos = 0;
+ 		upos = 0;
  		scache = new Array();
  		scache = new Array();
  		cache = new Array();
  		cache = new Array();
  		setResolver(DEFAULT_RESOLVER);
  		setResolver(DEFAULT_RESOLVER);
@@ -139,8 +143,9 @@ class Unserializer {
  			if( buf.charAt(pos++) != ":" || length - pos < len )
  			if( buf.charAt(pos++) != ":" || length - pos < len )
 				throw "Invalid string length";
 				throw "Invalid string length";
 			#if neko
 			#if neko
-			var s = neko.Utf8.sub(buf,pos,len);
+			var s = neko.Utf8.sub(buf,pos-upos,len);
 			pos += s.length;
 			pos += s.length;
+			upos += s.length - len;
 			#else true
 			#else true
  			var s = buf.substr(pos,len);
  			var s = buf.substr(pos,len);
  			pos += len;
  			pos += len;
@@ -154,8 +159,9 @@ class Unserializer {
  			#if neko
  			#if neko
 			if( length - pos < len )
 			if( length - pos < len )
 				throw "Invalid string length";
 				throw "Invalid string length";
- 			var s = neko.Utf8.sub(buf,pos,len);
+ 			var s = neko.Utf8.sub(buf,pos-upos,len);
  			pos += s.length;
  			pos += s.length;
+ 			upos += s.length - len;
  			#else true
  			#else true
  			var s = buf.substr(pos,len);
  			var s = buf.substr(pos,len);
  			pos += len;
  			pos += len;