inline typename V::MapType FBUnserializer<V>::unserializeMap() {
  p_ += CODE_SIZE;

  typename V::MapType ret = V::createMap();

  size_t code = nextCode();
  while (code != FB_SERIALIZE_STOP) {
    switch (code) {
      case FB_SERIALIZE_VARCHAR:
      case FB_SERIALIZE_STRING:
        {
          auto key = unserializeString();
          auto value = unserializeThing();
          V::mapSet(ret, std::move(key), std::move(value));
        }
        break;
      default:
        {
          auto key = unserializeInt64();
          auto value = unserializeThing();
          V::mapSet(ret, std::move(key), std::move(value));
        }
    }

    code = nextCode();
  }
  p_ += CODE_SIZE;

  return ret;
}
The product does not properly control the amount of recursion which takes place,  consuming excessive resources, such as allocated memory or the program stack.