comparison vamp-client/CapnpRRClient.h @ 147:96488e9e9096

Report messages < 1 word as incomplete, and messages with crazily large estimated sizes as invalid
author Chris Cannam <c.cannam@qmul.ac.uk>
date Thu, 19 Jan 2017 10:48:45 +0000
parents c4f841ccb208
children 590b1a1fd955
comparison
equal deleted inserted replaced
146:c4f841ccb208 147:96488e9e9096
75 75
76 class CompletenessChecker : public MessageCompletenessChecker { 76 class CompletenessChecker : public MessageCompletenessChecker {
77 public: 77 public:
78 State check(const std::vector<char> &message) const override { 78 State check(const std::vector<char> &message) const override {
79 79
80 if (message.size() < sizeof(capnp::word)) {
81 return Incomplete;
82 }
83
80 auto karr = toKJArray(message); 84 auto karr = toKJArray(message);
81 size_t words = karr.size(); 85 size_t words = karr.size();
82 size_t expected = capnp::expectedSizeInWordsFromPrefix(karr); 86 size_t expected = capnp::expectedSizeInWordsFromPrefix(karr);
83 87
84 // Lacking a way to definitively check whether a message 88 // Lacking a way to definitively check whether a message
101 << expected << ")" << std::endl; 105 << expected << ")" << std::endl;
102 return Complete; 106 return Complete;
103 } else if (words == expected) { 107 } else if (words == expected) {
104 return Complete; 108 return Complete;
105 } else if (expected > limit) { 109 } else if (expected > limit) {
110 std::cerr << "WARNING: apparently invalid message prefix: have "
111 << words << " words in prefix, projected message size is "
112 << expected << " against limit of " << limit << std::endl;
106 return Invalid; 113 return Invalid;
107 } else { 114 } else {
108 return Incomplete; 115 return Incomplete;
109 } 116 }
110 } 117 }