@@ -1298,17 +1298,35 @@ private CharSequence generateArrayProperty(
1298
1298
1299
1299
sb .append (String .format ("\n " +
1300
1300
indent + " #if __cplusplus >= 201703L\n " +
1301
- indent + " %1$s &put%2$s(std::string_view str) SBE_NOEXCEPT \n " +
1301
+ indent + " %1$s &put%2$s(std::string_view str)\n " +
1302
1302
indent + " {\n " +
1303
- indent + " size_t length = str.length() < %4$d ? str.length() : %4$d;\n " +
1303
+ indent + " const size_t srcLength = str.length();\n " +
1304
+ indent + " if (srcLength > %4$d)\n " +
1305
+ indent + " {\n " +
1306
+ indent + " throw std::runtime_error(\" string too large for put%2$s [E106]\" );\n " +
1307
+ indent + " }\n \n " +
1308
+ indent + " size_t length = srcLength < %4$d ? srcLength : %4$d;\n " +
1304
1309
indent + " std::memcpy(m_buffer + m_offset + %3$d, str.c_str(), length);\n " +
1310
+ indent + " for (size_t start = srcLength; start < length; ++start)\n " +
1311
+ indent + " {\n " +
1312
+ indent + " m_buffer[m_offset + %3$d + start] = 0;\n " +
1313
+ indent + " }\n \n " +
1305
1314
indent + " return *this;\n " +
1306
1315
indent + " }\n " +
1307
1316
indent + " #else\n " +
1308
- indent + " %1$s &put%2$s(const std::string& str) SBE_NOEXCEPT \n " +
1317
+ indent + " %1$s &put%2$s(const std::string& str)\n " +
1309
1318
indent + " {\n " +
1310
- indent + " size_t length = str.length() < %4$d ? str.length() : %4$d;\n " +
1319
+ indent + " const size_t srcLength = str.length();\n " +
1320
+ indent + " if (srcLength > %4$d)\n " +
1321
+ indent + " {\n " +
1322
+ indent + " throw std::runtime_error(\" string too large for put%2$s [E106]\" );\n " +
1323
+ indent + " }\n \n " +
1324
+ indent + " size_t length = srcLength < %4$d ? srcLength : %4$d;\n " +
1311
1325
indent + " std::memcpy(m_buffer + m_offset + %3$d, str.c_str(), length);\n " +
1326
+ indent + " for (size_t start = srcLength; start < length; ++start)\n " +
1327
+ indent + " {\n " +
1328
+ indent + " m_buffer[m_offset + %3$d + start] = 0;\n " +
1329
+ indent + " }\n \n " +
1312
1330
indent + " return *this;\n " +
1313
1331
indent + " }\n " +
1314
1332
indent + " #endif\n " ,
0 commit comments