From ad84b5b8fa2099734ddd760d14a5d759f68128e0 Mon Sep 17 00:00:00 2001
From: Wouter van Oortmerssen <wvo@google.com>
Date: Mon, 3 Aug 2015 17:39:47 -0700
Subject: [PATCH] Fixed AddFlatBuffer using wrong buffer length.

Also made the Xcode project link.

Tested: on OS X.
---
 .../FlatBuffers.xcodeproj/project.pbxproj     | 108 +++---------------
 src/reflection.cpp                            |   3 +-
 tests/test.cpp                                |   4 +-
 3 files changed, 18 insertions(+), 97 deletions(-)

diff --git a/build/Xcode/FlatBuffers.xcodeproj/project.pbxproj b/build/Xcode/FlatBuffers.xcodeproj/project.pbxproj
index b67ae95b..dfa2962c 100644
--- a/build/Xcode/FlatBuffers.xcodeproj/project.pbxproj
+++ b/build/Xcode/FlatBuffers.xcodeproj/project.pbxproj
@@ -12,8 +12,9 @@
 		61823BBC53544106B6DBC38E /* idl_parser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3709AC883348409592530AE6 /* idl_parser.cpp */; settings = {COMPILER_FLAGS = ""; }; };
 		61FF3C34FBEC4819A1C30F92 /* sample_text.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ECCEBFFA6977404F858F9739 /* sample_text.cpp */; settings = {COMPILER_FLAGS = ""; }; };
 		8C303C591975D6A700D7C1C5 /* idl_gen_go.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8C303C581975D6A700D7C1C5 /* idl_gen_go.cpp */; };
-		8C6905F819F835A900CB8866 /* idl_gen_fbs.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8C6905F119F835A900CB8866 /* idl_gen_fbs.cpp */; };
 		8C6905FD19F835B400CB8866 /* idl_gen_fbs.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8C6905EC19F8357300CB8866 /* idl_gen_fbs.cpp */; };
+		8C8774631B703D4800E693F5 /* reflection.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8C8774621B703D4800E693F5 /* reflection.cpp */; };
+		8C8774641B703E1200E693F5 /* idl_gen_fbs.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8C6905EC19F8357300CB8866 /* idl_gen_fbs.cpp */; };
 		8CA854B31B04244A00040A06 /* idl_gen_python.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CA854B21B04244A00040A06 /* idl_gen_python.cpp */; };
 		8CD8717B19CB937D0012A827 /* idl_gen_general.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CD8717A19CB937D0012A827 /* idl_gen_general.cpp */; };
 		A9C9A99F719A4ED58DC2D2FC /* idl_parser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3709AC883348409592530AE6 /* idl_parser.cpp */; settings = {COMPILER_FLAGS = ""; }; };
@@ -33,23 +34,15 @@
 		3709AC883348409592530AE6 /* idl_parser.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = idl_parser.cpp; path = src/idl_parser.cpp; sourceTree = SOURCE_ROOT; };
 		3863042BCEC64791BFB48625 /* flatsamplebinary */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; path = flatsamplebinary; sourceTree = BUILT_PRODUCTS_DIR; };
 		420E3BC724ED4A008D79297F /* flatsampletext */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; path = flatsampletext; sourceTree = BUILT_PRODUCTS_DIR; };
-		423CA92401AE442B91546E63 /* CMakeLists.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = CMakeLists.txt; path = /Users/wvo/flatbuffers_snapshot9/CMakeLists.txt; sourceTree = "<absolute>"; };
 		5EE44BFFAF8E43F485859145 /* sample_binary.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = sample_binary.cpp; path = samples/sample_binary.cpp; sourceTree = SOURCE_ROOT; };
 		6AD24EEB3D024825A37741FF /* test.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = test.cpp; path = tests/test.cpp; sourceTree = SOURCE_ROOT; };
 		8C303C581975D6A700D7C1C5 /* idl_gen_go.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = idl_gen_go.cpp; path = src/idl_gen_go.cpp; sourceTree = "<group>"; };
 		8C6905EC19F8357300CB8866 /* idl_gen_fbs.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = idl_gen_fbs.cpp; path = src/idl_gen_fbs.cpp; sourceTree = "<group>"; };
-		8C6905EF19F835A900CB8866 /* flatc.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = flatc.cpp; sourceTree = "<group>"; };
-		8C6905F019F835A900CB8866 /* idl_gen_cpp.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = idl_gen_cpp.cpp; sourceTree = "<group>"; };
-		8C6905F119F835A900CB8866 /* idl_gen_fbs.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = idl_gen_fbs.cpp; sourceTree = "<group>"; };
-		8C6905F219F835A900CB8866 /* idl_gen_general.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = idl_gen_general.cpp; sourceTree = "<group>"; };
-		8C6905F319F835A900CB8866 /* idl_gen_go.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = idl_gen_go.cpp; sourceTree = "<group>"; };
-		8C6905F419F835A900CB8866 /* idl_gen_text.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = idl_gen_text.cpp; sourceTree = "<group>"; };
-		8C6905F519F835A900CB8866 /* idl_parser.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = idl_parser.cpp; sourceTree = "<group>"; };
+		8C8774621B703D4800E693F5 /* reflection.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = reflection.cpp; path = src/reflection.cpp; sourceTree = "<group>"; };
 		8CA854B21B04244A00040A06 /* idl_gen_python.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = idl_gen_python.cpp; path = src/idl_gen_python.cpp; sourceTree = "<group>"; };
 		8CD8717A19CB937D0012A827 /* idl_gen_general.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = idl_gen_general.cpp; path = src/idl_gen_general.cpp; sourceTree = "<group>"; };
 		A13F25CDAD23435DA293690D /* flattests */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; path = flattests; sourceTree = BUILT_PRODUCTS_DIR; };
 		AB70F1FBA50E4120BCF37C8D /* monster_test_generated.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = monster_test_generated.h; path = tests/monster_test_generated.h; sourceTree = SOURCE_ROOT; };
-		AD3682C6E1DD4EABB822C0CC /* monster_generated.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = monster_generated.h; path = samples/monster_generated.h; sourceTree = SOURCE_ROOT; };
 		C0E7B66C3FF849A0AD9A7168 /* util.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = util.h; path = include/flatbuffers/util.h; sourceTree = SOURCE_ROOT; };
 		CD90A7F6B2BE4D0384294DD1 /* idl_gen_cpp.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = idl_gen_cpp.cpp; path = src/idl_gen_cpp.cpp; sourceTree = SOURCE_ROOT; };
 		DD8B353D4756412195777FBA /* flatbuffers.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = flatbuffers.h; path = include/flatbuffers/flatbuffers.h; sourceTree = SOURCE_ROOT; };
@@ -58,13 +51,6 @@
 /* End PBXFileReference section */
 
 /* Begin PBXGroup section */
-		194905BCBB5C451DB092EB08 /* Resources */ = {
-			isa = PBXGroup;
-			children = (
-			);
-			name = Resources;
-			sourceTree = "<group>";
-		};
 		28237E300FE042DEADA302D3 /* Source Files */ = {
 			isa = PBXGroup;
 			children = (
@@ -72,19 +58,10 @@
 				8C6905EC19F8357300CB8866 /* idl_gen_fbs.cpp */,
 				8CD8717A19CB937D0012A827 /* idl_gen_general.cpp */,
 				8C303C581975D6A700D7C1C5 /* idl_gen_go.cpp */,
-				0DFD29781D8E490284B06504 /* flatc.cpp */,
-				CD90A7F6B2BE4D0384294DD1 /* idl_gen_cpp.cpp */,
-			);
-			name = "Source Files";
-			sourceTree = "<group>";
-		};
-		355DCA17961E4B2FB2C71403 /* Source Files */ = {
-			isa = PBXGroup;
-			children = (
-				8C6905EE19F835A900CB8866 /* src */,
 				F6C5D81DBF864365B12E269D /* idl_gen_text.cpp */,
 				3709AC883348409592530AE6 /* idl_parser.cpp */,
-				6AD24EEB3D024825A37741FF /* test.cpp */,
+				CD90A7F6B2BE4D0384294DD1 /* idl_gen_cpp.cpp */,
+				8C8774621B703D4800E693F5 /* reflection.cpp */,
 			);
 			name = "Source Files";
 			sourceTree = "<group>";
@@ -92,49 +69,17 @@
 		378446B9D5EF46EF92B35E21 /* flatc */ = {
 			isa = PBXGroup;
 			children = (
-				5FEA84E7D39645988300317C /* Header Files */,
-				28237E300FE042DEADA302D3 /* Source Files */,
+				0DFD29781D8E490284B06504 /* flatc.cpp */,
 			);
 			name = flatc;
 			sourceTree = "<group>";
 		};
-		40E30B8480BD493EA459E9B4 /* Header Files */ = {
-			isa = PBXGroup;
-			children = (
-				AD3682C6E1DD4EABB822C0CC /* monster_generated.h */,
-			);
-			name = "Header Files";
-			sourceTree = "<group>";
-		};
-		4D1151F6FE594E40A1C177FF /* Header Files */ = {
-			isa = PBXGroup;
-			children = (
-			);
-			name = "Header Files";
-			sourceTree = "<group>";
-		};
-		5235469653ED4BC88A6C504D /* Header Files */ = {
+		5FEA84E7D39645988300317C /* Header Files */ = {
 			isa = PBXGroup;
 			children = (
 				DD8B353D4756412195777FBA /* flatbuffers.h */,
 				00154BD8654B4B5B9FF45FA6 /* idl.h */,
 				C0E7B66C3FF849A0AD9A7168 /* util.h */,
-				AB70F1FBA50E4120BCF37C8D /* monster_test_generated.h */,
-			);
-			name = "Header Files";
-			sourceTree = "<group>";
-		};
-		5648A71028E14478841372D3 /* Source Files */ = {
-			isa = PBXGroup;
-			children = (
-				5EE44BFFAF8E43F485859145 /* sample_binary.cpp */,
-			);
-			name = "Source Files";
-			sourceTree = "<group>";
-		};
-		5FEA84E7D39645988300317C /* Header Files */ = {
-			isa = PBXGroup;
-			children = (
 			);
 			name = "Header Files";
 			sourceTree = "<group>";
@@ -142,6 +87,8 @@
 		866694F9F2F7451382D236B3 /* Sources */ = {
 			isa = PBXGroup;
 			children = (
+				28237E300FE042DEADA302D3 /* Source Files */,
+				5FEA84E7D39645988300317C /* Header Files */,
 				378446B9D5EF46EF92B35E21 /* flatc */,
 				DB9DE41C20F349F694A488F3 /* flatsamplebinary */,
 				8FA1F43C78914AE5AD04E24E /* flatsampletext */,
@@ -153,31 +100,16 @@
 		88421F5F87584EE3B67C979A /* flattests */ = {
 			isa = PBXGroup;
 			children = (
-				5235469653ED4BC88A6C504D /* Header Files */,
-				355DCA17961E4B2FB2C71403 /* Source Files */,
+				AB70F1FBA50E4120BCF37C8D /* monster_test_generated.h */,
+				6AD24EEB3D024825A37741FF /* test.cpp */,
 			);
 			name = flattests;
 			sourceTree = "<group>";
 		};
-		8C6905EE19F835A900CB8866 /* src */ = {
-			isa = PBXGroup;
-			children = (
-				8C6905EF19F835A900CB8866 /* flatc.cpp */,
-				8C6905F019F835A900CB8866 /* idl_gen_cpp.cpp */,
-				8C6905F119F835A900CB8866 /* idl_gen_fbs.cpp */,
-				8C6905F219F835A900CB8866 /* idl_gen_general.cpp */,
-				8C6905F319F835A900CB8866 /* idl_gen_go.cpp */,
-				8C6905F419F835A900CB8866 /* idl_gen_text.cpp */,
-				8C6905F519F835A900CB8866 /* idl_parser.cpp */,
-			);
-			path = src;
-			sourceTree = "<group>";
-		};
 		8F5E926B72104F4194B3BD5A = {
 			isa = PBXGroup;
 			children = (
 				866694F9F2F7451382D236B3 /* Sources */,
-				194905BCBB5C451DB092EB08 /* Resources */,
 				99CC11E382B8420AA79A8A14 /* Products */,
 			);
 			sourceTree = "<group>";
@@ -185,8 +117,7 @@
 		8FA1F43C78914AE5AD04E24E /* flatsampletext */ = {
 			isa = PBXGroup;
 			children = (
-				40E30B8480BD493EA459E9B4 /* Header Files */,
-				A1C826615F904FDE8F0CA154 /* Source Files */,
+				ECCEBFFA6977404F858F9739 /* sample_text.cpp */,
 			);
 			name = flatsampletext;
 			sourceTree = "<group>";
@@ -202,20 +133,10 @@
 			name = Products;
 			sourceTree = "<group>";
 		};
-		A1C826615F904FDE8F0CA154 /* Source Files */ = {
-			isa = PBXGroup;
-			children = (
-				ECCEBFFA6977404F858F9739 /* sample_text.cpp */,
-			);
-			name = "Source Files";
-			sourceTree = "<group>";
-		};
 		DB9DE41C20F349F694A488F3 /* flatsamplebinary */ = {
 			isa = PBXGroup;
 			children = (
-				4D1151F6FE594E40A1C177FF /* Header Files */,
-				5648A71028E14478841372D3 /* Source Files */,
-				423CA92401AE442B91546E63 /* CMakeLists.txt */,
+				5EE44BFFAF8E43F485859145 /* sample_binary.cpp */,
 			);
 			name = flatsamplebinary;
 			sourceTree = "<group>";
@@ -338,8 +259,8 @@
 				AA9BACF55EB3456BA2F633BB /* flatc.cpp in Sources */,
 				BE03D7B0C9584DD58B50ED34 /* idl_gen_cpp.cpp in Sources */,
 				AD71FEBEE4E846529002C1F0 /* idl_gen_text.cpp in Sources */,
+				8C8774641B703E1200E693F5 /* idl_gen_fbs.cpp in Sources */,
 				A9C9A99F719A4ED58DC2D2FC /* idl_parser.cpp in Sources */,
-				8C6905F819F835A900CB8866 /* idl_gen_fbs.cpp in Sources */,
 				8CA854B31B04244A00040A06 /* idl_gen_python.cpp in Sources */,
 				8CD8717B19CB937D0012A827 /* idl_gen_general.cpp in Sources */,
 			);
@@ -349,6 +270,7 @@
 			isa = PBXSourcesBuildPhase;
 			buildActionMask = 2147483647;
 			files = (
+				8C8774631B703D4800E693F5 /* reflection.cpp in Sources */,
 				5AC48C391ACA9A0A008132C5 /* idl_gen_general.cpp in Sources */,
 				8C6905FD19F835B400CB8866 /* idl_gen_fbs.cpp in Sources */,
 				E0680D6B5BFD484BA9D88EE8 /* idl_gen_text.cpp in Sources */,
diff --git a/src/reflection.cpp b/src/reflection.cpp
index aa1ffaf3..b0a80e45 100644
--- a/src/reflection.cpp
+++ b/src/reflection.cpp
@@ -334,8 +334,7 @@ const uint8_t *AddFlatBuffer(std::vector<uint8_t> &flatbuf,
   }
   auto insertion_point = static_cast<uoffset_t>(flatbuf.size());
   // Insert the entire FlatBuffer minus the root pointer.
-  flatbuf.insert(flatbuf.end(), newbuf + sizeof(uoffset_t),
-                 newbuf + newlen - sizeof(uoffset_t));
+  flatbuf.insert(flatbuf.end(), newbuf + sizeof(uoffset_t), newbuf + newlen);
   auto root_offset = ReadScalar<uoffset_t>(newbuf) - sizeof(uoffset_t);
   return flatbuf.data() + insertion_point + root_offset;
 }
diff --git a/tests/test.cpp b/tests/test.cpp
index 984e1c62..116068ed 100644
--- a/tests/test.cpp
+++ b/tests/test.cpp
@@ -393,8 +393,8 @@ void ReflectionTest(uint8_t *flatbuf, size_t length) {
   // We do this last, so the pointer doesn't get invalidated (since it is
   // at the end of the buffer):
   auto string_ptr = flatbuffers::AddFlatBuffer(resizingbuf,
-                                                  stringfbb.GetBufferPointer(),
-                                                  stringfbb.GetSize());
+                                               stringfbb.GetBufferPointer(),
+                                               stringfbb.GetSize());
   // Finally, set the new value in the vector.
   rtestarrayofstring->MutateOffset(2, string_ptr);
   TEST_EQ_STR(rtestarrayofstring->Get(0)->c_str(), "bob");
-- 
GitLab