瀏覽代碼

fix to prevent access to bytes outside bounds

Nicolas Cannasse 17 年之前
父節點
當前提交
fbb1f2028c
共有 1 個文件被更改,包括 4 次插入2 次删除
  1. 4 2
      std/haxe/BaseCode.hx

+ 4 - 2
std/haxe/BaseCode.hx

@@ -47,8 +47,8 @@ class BaseCode {
 		#else
 		var nbits = this.nbits;
 		var base = this.base;
-		var size = Std.int((b.length * 8 + nbits - 1) / nbits);
-		var out = haxe.io.Bytes.alloc(size);
+		var size = Std.int(b.length * 8 / nbits);
+		var out = haxe.io.Bytes.alloc(size + (((b.length * 8) % nbits == 0) ? 0 : 1) );
 		var buf = 0;
 		var curbits = 0;
 		var mask = (1 << nbits) - 1;
@@ -63,6 +63,8 @@ class BaseCode {
 			curbits -= nbits;
 			out.set(pout++,base.get((buf >> curbits) & mask));
 		}
+		if( curbits > 0 )
+			out.set(pout++,base.get((buf << (nbits - curbits)) & mask));
 		return out;
 		#end
 	}