From 7ef62df1f44e87656ab517af00c5ec8dbcea8f5f Mon Sep 17 00:00:00 2001 From: cmasone-attic Date: Mon, 2 May 2016 11:44:53 -0700 Subject: [PATCH] Switch to network-byte-order in DataStore wire format (#1386) * Switch to network-byte-order in DataStore wire format Fixes #1370 --- chunks/chunk_serializer.go | 4 ++-- datas/serialize_hints.go | 8 ++++---- js/src/chunk-serializer.js | 6 +++--- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/chunks/chunk_serializer.go b/chunks/chunk_serializer.go index cf6698c924..c8c8618945 100644 --- a/chunks/chunk_serializer.go +++ b/chunks/chunk_serializer.go @@ -43,7 +43,7 @@ func NewSerializer(writer io.Writer) ChunkSink { // Because of chunking at higher levels, no chunk should never be more than 4GB chunkSize := uint32(len(chunk.Data())) - err = binary.Write(s.writer, binary.LittleEndian, chunkSize) + err = binary.Write(s.writer, binary.BigEndian, chunkSize) d.Chk.NoError(err) n, err = io.Copy(s.writer, bytes.NewReader(chunk.Data())) @@ -129,7 +129,7 @@ func deserializeChunk(reader io.Reader) Chunk { r := ref.New(digest) chunkSize := uint32(0) - err = binary.Read(reader, binary.LittleEndian, &chunkSize) + err = binary.Read(reader, binary.BigEndian, &chunkSize) d.Chk.NoError(err) w := NewChunkWriter() diff --git a/datas/serialize_hints.go b/datas/serialize_hints.go index 2788cf753e..80299ff2c3 100644 --- a/datas/serialize_hints.go +++ b/datas/serialize_hints.go @@ -12,7 +12,7 @@ import ( ) func serializeHints(w io.Writer, hints types.Hints) { - err := binary.Write(w, binary.LittleEndian, uint32(len(hints))) // 4 billion hints is probably absurd. Maybe this should be smaller? + err := binary.Write(w, binary.BigEndian, uint32(len(hints))) // 4 billion hints is probably absurd. Maybe this should be smaller? d.Chk.NoError(err) for r := range hints { serializeHash(w, r) @@ -20,7 +20,7 @@ func serializeHints(w io.Writer, hints types.Hints) { } func serializeHashes(w io.Writer, hashes ref.RefSlice) { - err := binary.Write(w, binary.LittleEndian, uint32(len(hashes))) // 4 billion hashes is probably absurd. Maybe this should be smaller? + err := binary.Write(w, binary.BigEndian, uint32(len(hashes))) // 4 billion hashes is probably absurd. Maybe this should be smaller? d.Chk.NoError(err) for _, r := range hashes { serializeHash(w, r) @@ -36,7 +36,7 @@ func serializeHash(w io.Writer, hash ref.Ref) { func deserializeHints(reader io.Reader) types.Hints { numRefs := uint32(0) - err := binary.Read(reader, binary.LittleEndian, &numRefs) + err := binary.Read(reader, binary.BigEndian, &numRefs) d.Chk.NoError(err) hints := make(types.Hints, numRefs) @@ -48,7 +48,7 @@ func deserializeHints(reader io.Reader) types.Hints { func deserializeHashes(reader io.Reader) ref.RefSlice { numRefs := uint32(0) - err := binary.Read(reader, binary.LittleEndian, &numRefs) + err := binary.Read(reader, binary.BigEndian, &numRefs) d.Chk.NoError(err) hashes := make(ref.RefSlice, numRefs) diff --git a/js/src/chunk-serializer.js b/js/src/chunk-serializer.js index e81df16cc4..eec4f97c05 100644 --- a/js/src/chunk-serializer.js +++ b/js/src/chunk-serializer.js @@ -5,7 +5,7 @@ import Ref from './ref.js'; import {invariant} from './assert.js'; const headerSize = 4; // uint32 -const littleEndian = true; +const bigEndian = false; // Passing false to DataView methods makes them use big-endian byte order. const sha1Size = 20; const chunkLengthSize = 4; // uint32 const chunkHeaderSize = sha1Size + chunkLengthSize; @@ -44,7 +44,7 @@ export function serialize(hints: Set, chunks: Array): ArrayBuffer { function serializeHints(hints: Set, buffer: ArrayBuffer): number { let offset = 0; const view = new DataView(buffer, offset, headerSize); - view.setUint32(offset, hints.size | 0, littleEndian); // Coerce number to uint32 + view.setUint32(offset, hints.size | 0, bigEndian); // Coerce number to uint32 offset += headerSize; hints.forEach(ref => { @@ -78,7 +78,7 @@ function deserializeHints(buffer: ArrayBuffer): {hints: Array, offset: numb let offset = 0; const view = new DataView(buffer, 0, headerSize); - const numHints = view.getUint32(0, littleEndian); + const numHints = view.getUint32(0, bigEndian); offset += headerSize; const totalLength = headerSize + (numHints * sha1Size);