You've already forked json-iterator
							
							
				mirror of
				https://github.com/json-iterator/go.git
				synced 2025-10-31 00:07:40 +02:00 
			
		
		
		
	fix #286 calcHash should use byte not rune to calc hash
This commit is contained in:
		| @@ -2,7 +2,7 @@ package jsoniter | ||||
|  | ||||
| import ( | ||||
| 	"fmt" | ||||
| 	"unicode" | ||||
| 	"strings" | ||||
| ) | ||||
|  | ||||
| // ReadObject read one field from object. | ||||
| @@ -96,13 +96,12 @@ func (iter *Iterator) readFieldHash() int64 { | ||||
| } | ||||
|  | ||||
| func calcHash(str string, caseSensitive bool) int64 { | ||||
| 	if !caseSensitive { | ||||
| 		str = strings.ToLower(str) | ||||
| 	} | ||||
| 	hash := int64(0x811c9dc5) | ||||
| 	for _, b := range str { | ||||
| 		if caseSensitive { | ||||
| 			hash ^= int64(b) | ||||
| 		} else { | ||||
| 			hash ^= int64(unicode.ToLower(b)) | ||||
| 		} | ||||
| 	for _, b := range []byte(str) { | ||||
| 		hash ^= int64(b) | ||||
| 		hash *= 0x1000193 | ||||
| 	} | ||||
| 	return int64(hash) | ||||
|   | ||||
| @@ -145,6 +145,9 @@ func init() { | ||||
| 		(*struct { | ||||
| 			Field bool `json:",omitempty,string"` | ||||
| 		})(nil), | ||||
| 		(*struct { | ||||
| 			Field bool `json:"中文"` | ||||
| 		})(nil), | ||||
| 	) | ||||
| } | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user