Empties the sharedString map on reset on go and csharp (#6187)
authormustiikhalil <mustii@mmk.one>
Mon, 26 Oct 2020 19:38:24 +0000 (22:38 +0300)
committerGitHub <noreply@github.com>
Mon, 26 Oct 2020 19:38:24 +0000 (12:38 -0700)
Fixes go tests

go/builder.go
net/FlatBuffers/FlatBufferBuilder.cs
tests/FlatBuffers.Test/FlatBufferBuilderTests.cs
tests/go_test.go

index 0e763d7..115da29 100644 (file)
@@ -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
index 6c8d3e4..ba38394 100644 (file)
@@ -90,6 +90,10 @@ namespace FlatBuffers
             _objectStart = 0;
             _numVtables = 0;
             _vectorNumElems = 0;
+            if (_sharedStringMap != null)
+            {
+                _sharedStringMap.Clear();
+            }
         }
 
         /// <summary>
index b7b3ff7..06bca0f 100644 (file)
@@ -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);
+        }
     }
 }
index 9b2ec96..96d3e49 100644 (file)
@@ -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)