Browse Source

try to fix #194 with larger array

Tao Wen 8 years ago
parent
commit
9fddff05f0
3 changed files with 5 additions and 6 deletions
  1. 1 0
      .gitignore
  2. 1 1
      feature_iter.go
  3. 3 5
      feature_reflect_slice.go

+ 1 - 0
.gitignore

@@ -1,3 +1,4 @@
 .idea
 /coverage.txt
 /profile.out
+/bug_test.go

+ 1 - 1
feature_iter.go

@@ -168,7 +168,7 @@ func (iter *Iterator) isObjectEnd() bool {
 	if c == '}' {
 		return true
 	}
-	iter.ReportError("isObjectEnd", "object ended prematurely")
+	iter.ReportError("isObjectEnd", "object ended prematurely, unexpected char " + string([]byte{c}))
 	return true
 }
 

+ 3 - 5
feature_reflect_slice.go

@@ -128,11 +128,9 @@ func growOne(slice *sliceHeader, sliceType reflect.Type, elementType reflect.Typ
 	dst := unsafe.Pointer(newVal.Pointer())
 	// copy old array into new array
 	originalBytesCount := uintptr(slice.Len) * elementType.Size()
-	srcPtr := (*[1 << 30]byte)(slice.Data)
-	dstPtr := (*[1 << 30]byte)(dst)
-	for i := uintptr(0); i < originalBytesCount; i++ {
-		dstPtr[i] = srcPtr[i]
-	}
+	srcPtr := (*[1 << 49]byte)(slice.Data)
+	dstPtr := (*[1 << 49]byte)(dst)
+	copy(dstPtr[:originalBytesCount], srcPtr[:originalBytesCount])
 	slice.Data = dst
 	slice.Len = newLen
 	slice.Cap = newCap