From 8dca74eb0879fe0e530c783d74a355747422aeec Mon Sep 17 00:00:00 2001 From: Tor Egge Date: Tue, 31 Jan 2023 12:46:10 +0100 Subject: Use snprintf instead of sprintf. --- .../src/tests/attribute/enumstore/enumstore_test.cpp | 4 ++-- .../attribute/stringattribute/stringattribute_test.cpp | 16 ++++++++-------- .../src/tests/memoryindex/datastore/word_store_test.cpp | 2 +- .../searchlib/predicate/predicate_range_term_expander.h | 15 +++++++++------ .../vespa/searchlib/transactionlog/translogserver.cpp | 2 +- 5 files changed, 21 insertions(+), 18 deletions(-) (limited to 'searchlib/src') diff --git a/searchlib/src/tests/attribute/enumstore/enumstore_test.cpp b/searchlib/src/tests/attribute/enumstore/enumstore_test.cpp index 4b35d0fcdf7..b3c7516777c 100644 --- a/searchlib/src/tests/attribute/enumstore/enumstore_test.cpp +++ b/searchlib/src/tests/attribute/enumstore/enumstore_test.cpp @@ -280,14 +280,14 @@ TEST(EnumStoreTest, test_hold_lists_and_generation) uniques.reserve(100); for (uint32_t i = 0; i < 100; ++i) { char tmp[16]; - sprintf(tmp, i < 10 ? "enum0%u" : "enum%u", i); + snprintf(tmp, sizeof(tmp), i < 10 ? "enum0%u" : "enum%u", i); uniques.emplace_back(tmp); } StringVector newUniques; newUniques.reserve(100); for (uint32_t i = 0; i < 100; ++i) { char tmp[16]; - sprintf(tmp, i < 10 ? "unique0%u" : "unique%u", i); + snprintf(tmp, sizeof(tmp), i < 10 ? "unique0%u" : "unique%u", i); newUniques.emplace_back(tmp); } uint32_t generation = 0; diff --git a/searchlib/src/tests/attribute/stringattribute/stringattribute_test.cpp b/searchlib/src/tests/attribute/stringattribute/stringattribute_test.cpp index 4bcba209c13..20373fbb3a9 100644 --- a/searchlib/src/tests/attribute/stringattribute/stringattribute_test.cpp +++ b/searchlib/src/tests/attribute/stringattribute/stringattribute_test.cpp @@ -80,7 +80,7 @@ testMultiValue(Attribute & attr, uint32_t numDocs) uniqueStrings.reserve(numDocs - 1); for (uint32_t i = 0; i < numDocs - 1; ++i) { char unique[16]; - sprintf(unique, i < 10 ? "enum0%u" : "enum%u", i); + snprintf(unique, sizeof(unique), i < 10 ? "enum0%u" : "enum%u", i); uniqueStrings.emplace_back(unique); } ASSERT_TRUE(std::is_sorted(uniqueStrings.begin(), uniqueStrings.end())); @@ -89,7 +89,7 @@ testMultiValue(Attribute & attr, uint32_t numDocs) newUniques.reserve(numDocs - 1); for (uint32_t i = 0; i < numDocs - 1; ++i) { char unique[16]; - sprintf(unique, i < 10 ? "unique0%u" : "unique%u", i); + snprintf(unique, sizeof(unique), i < 10 ? "unique0%u" : "unique%u", i); newUniques.emplace_back(unique); } @@ -330,14 +330,14 @@ testSingleValue(Attribute & svsa, Config &cfg) std::map enums; // 10 unique strings for (uint32_t i = 0; i < numDocs; ++i) { - sprintf(tmp, "enum%u", i % 10); + snprintf(tmp,sizeof(tmp), "enum%u", i % 10); EXPECT_TRUE( v.update(i, tmp) ); EXPECT_TRUE( v.getValueCount(i) == 1 ); EXPECT_TRUE( ! IEnumStore::Index(EntryRef(v.getEnum(i))).valid() ); if ((i % 10) == 9) { v.commit(); for (uint32_t j = i - 9; j <= i; ++j) { - sprintf(tmp, "enum%u", j % 10); + snprintf(tmp, sizeof(tmp), "enum%u", j % 10); EXPECT_TRUE( strcmp(t = v.get(j), tmp) == 0 ); e1 = v.getEnum(j); EXPECT_TRUE( v.findEnum(t, e2) ); @@ -354,15 +354,15 @@ testSingleValue(Attribute & svsa, Config &cfg) // 1000 unique strings for (uint32_t i = 0; i < numDocs; ++i) { - sprintf(tmp, "unique%u", i); + snprintf(tmp, sizeof(tmp), "unique%u", i); EXPECT_TRUE( v.update(i, tmp) ); - sprintf(tmp, "enum%u", i % 10); + snprintf(tmp, sizeof(tmp), "enum%u", i % 10); EXPECT_TRUE( strcmp(v.get(i), tmp) == 0 ); if ((i % 10) == 9) { //LOG(info, "commit: i = %u", i); v.commit(); for (uint32_t j = i - 9; j <= i; ++j) { - sprintf(tmp, "unique%u", j); + snprintf(tmp, sizeof(tmp), "unique%u", j); EXPECT_TRUE( strcmp(t = v.get(j), tmp) == 0 ); e1 = v.getEnum(j); EXPECT_TRUE( v.findEnum(t, e2) ); @@ -373,7 +373,7 @@ testSingleValue(Attribute & svsa, Config &cfg) // check that enumX strings are removed ( for (uint32_t i = 0; i < 10; ++i) { - sprintf(tmp, "enum%u", i); + snprintf(tmp, sizeof(tmp), "enum%u", i); EXPECT_TRUE( !v.findEnum(tmp, e1) ); } diff --git a/searchlib/src/tests/memoryindex/datastore/word_store_test.cpp b/searchlib/src/tests/memoryindex/datastore/word_store_test.cpp index 29c032664c0..1de7b4a3efd 100644 --- a/searchlib/src/tests/memoryindex/datastore/word_store_test.cpp +++ b/searchlib/src/tests/memoryindex/datastore/word_store_test.cpp @@ -43,7 +43,7 @@ TEST(WordStoreTest, add_word_triggers_change_of_buffer) uint32_t lastId = 0; char wordStr[10]; for (;;++word) { - sprintf(wordStr, "%6zu", word); + snprintf(wordStr, sizeof(wordStr), "%6zu", word); // all words uses 12 bytes (include padding) EntryRef r = ws.addWord(std::string(wordStr)); EXPECT_EQ(std::string(wordStr), ws.getWord(r)); diff --git a/searchlib/src/vespa/searchlib/predicate/predicate_range_term_expander.h b/searchlib/src/vespa/searchlib/predicate/predicate_range_term_expander.h index 90792912e64..42de8646091 100644 --- a/searchlib/src/vespa/searchlib/predicate/predicate_range_term_expander.h +++ b/searchlib/src/vespa/searchlib/predicate/predicate_range_term_expander.h @@ -48,9 +48,10 @@ void PredicateRangeTermExpander::expand(const vespalib::string &key, int64_t sig vespalib::Issue::report("predicate_range_term_expander: Search outside bounds should have been rejected by ValidatePredicateSearcher."); return; } - char buffer[21 * 2 + 3 + key.size()]; // 2 numbers + punctuation + key + size_t buffer_size = 21 * 2 + 3 + key.size(); // 2 numbers + punctuation + key + char buffer[buffer_size]; int size; - int prefix_size = sprintf(buffer, "%s=", key.c_str()); + int prefix_size = snprintf(buffer, buffer_size, "%s=", key.c_str()); bool negative = signed_value < 0; uint64_t value; int max_levels; @@ -64,7 +65,7 @@ void PredicateRangeTermExpander::expand(const vespalib::string &key, int64_t sig } int64_t edge_interval = (value / _arity) * _arity; - size = sprintf(buffer + prefix_size, "%" PRIu64, edge_interval); + size = snprintf(buffer + prefix_size, buffer_size - prefix_size, "%" PRIu64, edge_interval); handler.handleEdge(vespalib::stringref(buffer, prefix_size + size), value - edge_interval); @@ -75,13 +76,15 @@ void PredicateRangeTermExpander::expand(const vespalib::string &key, int64_t sig if (start + level_size - 1 > (uint64_t(0)-LLONG_MIN)) { break; } - size = sprintf(buffer + prefix_size, "%" PRIu64 "-%" PRIu64, - start + level_size - 1, start); + size = snprintf(buffer + prefix_size, buffer_size - prefix_size, + "%" PRIu64 "-%" PRIu64, + start + level_size - 1, start); } else { if (start + level_size - 1 > LLONG_MAX) { break; } - size = sprintf(buffer + prefix_size, "%" PRIu64 "-%" PRIu64, + size = snprintf(buffer + prefix_size, buffer_size - prefix_size, + "%" PRIu64 "-%" PRIu64, start, start + level_size - 1); } handler.handleRange(vespalib::stringref(buffer, prefix_size + size)); diff --git a/searchlib/src/vespa/searchlib/transactionlog/translogserver.cpp b/searchlib/src/vespa/searchlib/transactionlog/translogserver.cpp index c6ae9c00e49..98a9568e4e8 100644 --- a/searchlib/src/vespa/searchlib/transactionlog/translogserver.cpp +++ b/searchlib/src/vespa/searchlib/transactionlog/translogserver.cpp @@ -124,7 +124,7 @@ TransLogServer::TransLogServer(FNET_Transport & transport, const vespalib::strin } exportRPC(*_supervisor); char listenSpec[32]; - sprintf(listenSpec, "tcp/%d", listenPort); + snprintf(listenSpec, sizeof(listenSpec), "tcp/%d", listenPort); bool listenOk(false); for (int i(600); !listenOk && i; i--) { if (_supervisor->Listen(listenSpec)) { -- cgit v1.2.3