From c7586e85aae55e7b364fd99b5e45b52f036a086c Mon Sep 17 00:00:00 2001 From: mustiikhalil Date: Mon, 26 Oct 2020 22:38:24 +0300 Subject: [PATCH] Empties the sharedString map on reset on go and csharp (#6187) Fixes go tests --- go/builder.go | 6 +++++ net/FlatBuffers/FlatBufferBuilder.cs | 4 ++++ .../FlatBufferBuilderTests.cs | 15 ++++++++++++ tests/go_test.go | 24 ++++++++++++++++++- 4 files changed, 48 insertions(+), 1 deletion(-) diff --git a/go/builder.go b/go/builder.go index 0e763d7ac..115da2996 100644 --- a/go/builder.go +++ b/go/builder.go @@ -53,6 +53,12 @@ func (b *Builder) Reset() { b.vtable = b.vtable[:0] } + if b.sharedStrings != nil { + for key := range b.sharedStrings { + delete(b.sharedStrings, key) + } + } + b.head = UOffsetT(len(b.Bytes)) b.minalign = 1 b.nested = false diff --git a/net/FlatBuffers/FlatBufferBuilder.cs b/net/FlatBuffers/FlatBufferBuilder.cs index 6c8d3e46b..ba3839488 100644 --- a/net/FlatBuffers/FlatBufferBuilder.cs +++ b/net/FlatBuffers/FlatBufferBuilder.cs @@ -90,6 +90,10 @@ namespace FlatBuffers _objectStart = 0; _numVtables = 0; _vectorNumElems = 0; + if (_sharedStringMap != null) + { + _sharedStringMap.Clear(); + } } /// diff --git a/tests/FlatBuffers.Test/FlatBufferBuilderTests.cs b/tests/FlatBuffers.Test/FlatBufferBuilderTests.cs index b7b3ff7cc..06bca0f39 100644 --- a/tests/FlatBuffers.Test/FlatBufferBuilderTests.cs +++ b/tests/FlatBuffers.Test/FlatBufferBuilderTests.cs @@ -359,5 +359,20 @@ namespace FlatBuffers.Test Assert.AreEqual(fbb.CreateSharedString(s).Value, 0); Assert.AreEqual(fbb.CreateString(s).Value, 0); } + + [FlatBuffersTestMethod] + public void FlatBufferBuilder_Empty_Builder() + { + var fbb = new FlatBufferBuilder(16); + var str = "Hello"; + var flatbuffer = "Flatbuffers!"; + var strOffset = fbb.CreateSharedString(str); + var flatbufferOffset = fbb.CreateSharedString(flatbuffer); + fbb.Clear(); + var flatbufferOffset2 = fbb.CreateSharedString(flatbuffer); + var strOffset2 = fbb.CreateSharedString(str); + Assert.IsFalse(strOffset.Value == strOffset2.Value); + Assert.IsFalse(flatbufferOffset.Value == flatbufferOffset2.Value); + } } } diff --git a/tests/go_test.go b/tests/go_test.go index 9b2ec964a..96d3e4977 100644 --- a/tests/go_test.go +++ b/tests/go_test.go @@ -79,7 +79,8 @@ func TestAll(t *testing.T) { CheckStructIsNotInlineError(t.Fatalf) CheckFinishedBytesError(t.Fatalf) CheckSharedStrings(t.Fatalf) - + CheckEmptiedBuilder(t.Fatalf) + // Verify that GetRootAs works for non-root tables CheckGetRootAsForNonRootTable(t.Fatalf) CheckTableAccessors(t.Fatalf) @@ -1377,6 +1378,27 @@ func CheckStringIsNestedError(fail func(string, ...interface{})) { b.CreateString("foo") } +func CheckEmptiedBuilder(fail func(string, ...interface{})) { + f := func(a, b string) bool { + if a == b { + return true + } + + builder := flatbuffers.NewBuilder(0) + + a1 := builder.CreateSharedString(a) + b1 := builder.CreateSharedString(b) + builder.Reset() + b2 := builder.CreateSharedString(b) + a2 := builder.CreateSharedString(a) + + return !(a1 == a2 || b1 == b2) + } + if err := quick.Check(f, nil); err != nil { + fail("expected different offset") + } +} + func CheckSharedStrings(fail func(string, ...interface{})) { f := func(strings []string) bool { b := flatbuffers.NewBuilder(0)