diff --git a/examples/6_buffer_failtest.cpp b/examples/6_buffer_failtest.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..a2b5784927b77d6e22ad67aabe262226c426f1e5
--- /dev/null
+++ b/examples/6_buffer_failtest.cpp
@@ -0,0 +1,72 @@
+
+#include <iostream>
+#include <sstream>
+#include <cassert>
+#include <tscpp.h>
+#include "types.h"
+
+using namespace std;
+using namespace tscpp;
+
+int main()
+{
+    //BufferTooSmall while serialize
+    {
+        Point3d p1(1,2,3);
+        char buffer[10];
+        assert(serialize(buffer,sizeof(buffer),p1)==BufferTooSmall);
+    }
+    
+    //BufferTooSmall while unserialize
+    {
+        Point3d p1(1,2,3);
+        char buffer[64];
+        int serializedSize=serialize(buffer,sizeof(buffer),p1);
+        assert(serializedSize>0);
+        
+        Point3d p2;
+        assert(unserialize(p2,buffer,serializedSize-1)==BufferTooSmall);
+        assert(p2.x==0 && p2.y==0 && p2.z==0);
+    }
+    
+    //WrongType while unserialize
+    {
+        Point3d p(1,2,3);
+        char buffer[64];
+        int serializedSize=serialize(buffer,sizeof(buffer),p);
+        assert(serializedSize>0);
+        
+        Point2d q;
+        assert(unserialize(q,buffer,serializedSize)==WrongType);
+        assert(q.x==0 && q.y==0);
+    }
+    
+    TypePool tp;
+    tp.registerType<Point2d>([&](Point2d& t) { assert(false); });
+    tp.registerType<Point3d>([&](Point3d& t) { assert(false); });
+
+    {
+        Point3d p(1,2,3);
+        char buffer[64];
+        int serializedSize=serialize(buffer,sizeof(buffer),p);
+        assert(serializedSize>0);
+
+        //BufferTooSmall while unserializeUnknown (name)
+        assert(unserializeUnknown(tp,buffer,1)==BufferTooSmall);
+        
+        //BufferTooSmall while unserializeUnknown (type)
+        assert(unserializeUnknown(tp,buffer,serializedSize-1)==BufferTooSmall);
+    }
+    
+    //UnknownType while unserializeUnknown
+    {
+        MiscData md;
+        char buffer[1024];
+        int serializedSize=serialize(buffer,sizeof(buffer),md);
+        assert(serializedSize>0);
+
+        assert(unserializeUnknown(tp,buffer,serializedSize)==UnknownType);
+    }
+    
+    cout<<"Test passed"<<endl;
+}
diff --git a/examples/Makefile b/examples/Makefile
index 2f227a461da343a7e73710e3d27c980eec665107..ab098d7dec963b3d71b3b03d91cf5b837a06c41f 100644
--- a/examples/Makefile
+++ b/examples/Makefile
@@ -1,6 +1,6 @@
 
 CXX = g++
-CXXFLAGS = -std=c++11 -O2 -Wall -I..
+CXXFLAGS = -std=c++11 -g -O0 -fsanitize=address -Wall -I..
 
 all:
 	$(CXX) $(CXXFLAGS) 1_stream_known.cpp    ../tscpp.cpp -o 1_stream_known
@@ -8,12 +8,14 @@ all:
 	$(CXX) $(CXXFLAGS) 3_buffer_known.cpp    ../tscpp.cpp -o 3_buffer_known
 	$(CXX) $(CXXFLAGS) 4_buffer_unknown.cpp  ../tscpp.cpp -o 4_buffer_unknown
 	$(CXX) $(CXXFLAGS) 5_stream_failtest.cpp ../tscpp.cpp -o 5_stream_failtest
+	$(CXX) $(CXXFLAGS) 6_buffer_failtest.cpp ../tscpp.cpp -o 6_buffer_failtest
 	./1_stream_known
 	./2_stream_unknown
 	./3_buffer_known
 	./4_buffer_unknown
 	./5_stream_failtest
+	./6_buffer_failtest
 
 clean:
 	rm -f 1_stream_known 2_stream_unknown 3_buffer_known 4_buffer_unknown \
-	      5_stream_failtest
+	      5_stream_failtest 6_buffer_failtest