ext/common/MessageReadersWriters.h in passenger-3.0.21 vs ext/common/MessageReadersWriters.h in passenger-3.9.1.beta

- old
+ new

@@ -499,9 +499,28 @@ Uint32Message::generate(headerBuf, data.size()); output[0] = StaticString(headerBuf, sizeof(uint32_t)); output[1] = data; } + + // output must be at least count + 1 in length + static void generate(const StaticString data[], unsigned int count, + char headerBuf[sizeof(uint32_t)], StaticString *output) + { + unsigned int i; + uint32_t totalSize = 0; + + for (i = 0; i < count; i++) { + if (OXT_UNLIKELY(data[i].size() > 0xFFFFFFFF)) { + throw ArgumentException("Data size exceeds maximum size for scalar messages."); + } + totalSize += data[i].size(); + output[i + 1] = data[i]; + } + + Uint32Message::generate(headerBuf, totalSize); + output[0] = StaticString(headerBuf, sizeof(uint32_t)); + } }; } // namespace Passenger #endif /* _PASSENGER_MESSAGE_READERS_WRITERS_H_ */