diff -ru OR/crtmpserver-690/sources/thelib/include/protocols/rtmp/amftypes.h crtmpserver-690/sources/thelib/include/protocols/rtmp/amftypes.h
--- OR/crtmpserver-690/sources/thelib/include/protocols/rtmp/amftypes.h	2011-10-19 15:04:32.000000000 +0100
+++ crtmpserver-690/sources/thelib/include/protocols/rtmp/amftypes.h	2011-10-25 15:30:43.228315009 +0100
@@ -51,6 +51,7 @@
 #define AMF0_NULL           0x05
 #define AMF0_UNDEFINED      0x06
 #define AMF0_MIXED_ARRAY    0x08
+#define AMF0_END_OF_OBJECT  0x09
 #define AMF0_ARRAY          0x0a
 #define AMF0_TIMESTAMP      0x0b
 #define AMF0_LONG_STRING    0x0c
diff -ru OR/crtmpserver-690/sources/thelib/src/protocols/rtmp/amf0serializer.cpp crtmpserver-690/sources/thelib/src/protocols/rtmp/amf0serializer.cpp
--- OR/crtmpserver-690/sources/thelib/src/protocols/rtmp/amf0serializer.cpp	2011-10-19 15:04:33.000000000 +0100
+++ crtmpserver-690/sources/thelib/src/protocols/rtmp/amf0serializer.cpp	2011-10-25 15:36:56.128314999 +0100
@@ -323,6 +324,10 @@
 			return false;
 		}
 
+                // A "end of object" marker ends the list early
+                if (((VariantType)variant) == V_NULL)
+                  break;
+
 		if (isNumeric(key))
 			variant[(uint32_t) atoi(STR(key))] = value;
 		else
@@ -725,6 +731,11 @@
 		{
 			return ReadTimestamp(buffer, variant);
 		}
+		case AMF0_END_OF_OBJECT:
+		{
+                        variant.Reset();
+			return true;
+		}
 		default:
 		{
 			FATAL("Unable to de-serialize type %hhu; Buffer: %s",
