From 7f9dc84219f4d04f3d0fd7c3f670afecc8e0b5f8 Mon Sep 17 00:00:00 2001 From: Cho Moon Date: Wed, 11 Dec 2024 06:36:25 +0000 Subject: [PATCH 1/4] fix for rsz string overflow Signed-off-by: Cho Moon --- src/rsz/src/Resizer.cc | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/src/rsz/src/Resizer.cc b/src/rsz/src/Resizer.cc index 91064aed56a..7230963bacd 100644 --- a/src/rsz/src/Resizer.cc +++ b/src/rsz/src/Resizer.cc @@ -122,7 +122,6 @@ using sta::LoadPinIndexMap; using sta::PinConnectedPinIterator; using sta::Sdc; using sta::SearchPredNonReg2; -using sta::stringPrint; using sta::VertexIterator; using sta::VertexOutEdgeIterator; @@ -2370,7 +2369,8 @@ string Resizer::makeUniqueNetName() string node_name; Instance* top_inst = network_->topInstance(); do { - stringPrint(node_name, "net%d", unique_net_index_++); + // sta::stringPrint can lead to string overflow and crash + node_name = fmt::format("net{}", unique_net_index_++); } while (network_->findNet(top_inst, node_name.c_str())); return node_name; } @@ -2391,10 +2391,9 @@ string Resizer::makeUniqueInstName(const char* base_name, bool underscore) { string inst_name; do { - stringPrint(inst_name, - underscore ? "%s_%d" : "%s%d", - base_name, - unique_inst_index_++); + // sta::stringPrint can lead to string overflow and crash + inst_name = fmt::format( + underscore ? "{}_{}" : "{}{}", base_name, unique_inst_index_++); } while (network_->findInstance(inst_name.c_str())); return inst_name; } From 945ffb6383940b624b5a63dabdbc6492e84b6bdb Mon Sep 17 00:00:00 2001 From: Cho Moon Date: Wed, 11 Dec 2024 19:18:17 +0000 Subject: [PATCH 2/4] removed fmt::format due to C++ 20 build issues Signed-off-by: Cho Moon --- src/rsz/src/Resizer.cc | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/rsz/src/Resizer.cc b/src/rsz/src/Resizer.cc index 7230963bacd..ca9906a5953 100644 --- a/src/rsz/src/Resizer.cc +++ b/src/rsz/src/Resizer.cc @@ -2369,8 +2369,8 @@ string Resizer::makeUniqueNetName() string node_name; Instance* top_inst = network_->topInstance(); do { - // sta::stringPrint can lead to string overflow and crash - node_name = fmt::format("net{}", unique_net_index_++); + // sta::stringPrint can lead to string overflow and fatal + node_name = std::string("net") + std::to_string(unique_net_index_++); } while (network_->findNet(top_inst, node_name.c_str())); return node_name; } @@ -2391,9 +2391,12 @@ string Resizer::makeUniqueInstName(const char* base_name, bool underscore) { string inst_name; do { - // sta::stringPrint can lead to string overflow and crash - inst_name = fmt::format( - underscore ? "{}_{}" : "{}{}", base_name, unique_inst_index_++); + // sta::stringPrint can lead to string overflow and fatal + if (underscore) { + inst_name = std::string(base_name) + std::string("_") + std::to_string(unique_inst_index_++); + } else { + inst_name = std::string(base_name) + std::to_string(unique_inst_index_++); + } } while (network_->findInstance(inst_name.c_str())); return inst_name; } From 872843faf41d45029bd1c4779995e570419241c8 Mon Sep 17 00:00:00 2001 From: Cho Moon Date: Wed, 11 Dec 2024 20:25:00 +0000 Subject: [PATCH 3/4] clang-format fix Signed-off-by: Cho Moon --- src/rsz/src/Resizer.cc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/rsz/src/Resizer.cc b/src/rsz/src/Resizer.cc index 53d2c3531c1..87849c9ee2f 100644 --- a/src/rsz/src/Resizer.cc +++ b/src/rsz/src/Resizer.cc @@ -2445,7 +2445,8 @@ string Resizer::makeUniqueInstName(const char* base_name, bool underscore) do { // sta::stringPrint can lead to string overflow and fatal if (underscore) { - inst_name = std::string(base_name) + std::string("_") + std::to_string(unique_inst_index_++); + inst_name = std::string(base_name) + std::string("_") + + std::to_string(unique_inst_index_++); } else { inst_name = std::string(base_name) + std::to_string(unique_inst_index_++); } From 702b98f4df8052edf5b03d4dcae78ebf16a68e47 Mon Sep 17 00:00:00 2001 From: Cho Moon Date: Wed, 11 Dec 2024 22:17:47 +0000 Subject: [PATCH 4/4] use fmt::format Signed-off-by: Cho Moon --- src/rsz/src/Resizer.cc | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/rsz/src/Resizer.cc b/src/rsz/src/Resizer.cc index 87849c9ee2f..a217fe3cb2e 100644 --- a/src/rsz/src/Resizer.cc +++ b/src/rsz/src/Resizer.cc @@ -2422,7 +2422,7 @@ string Resizer::makeUniqueNetName() Instance* top_inst = network_->topInstance(); do { // sta::stringPrint can lead to string overflow and fatal - node_name = std::string("net") + std::to_string(unique_net_index_++); + node_name = fmt::format("net{}", unique_net_index_++); } while (network_->findNet(top_inst, node_name.c_str())); return node_name; } @@ -2445,10 +2445,9 @@ string Resizer::makeUniqueInstName(const char* base_name, bool underscore) do { // sta::stringPrint can lead to string overflow and fatal if (underscore) { - inst_name = std::string(base_name) + std::string("_") - + std::to_string(unique_inst_index_++); + inst_name = fmt::format("{}_{}", base_name, unique_inst_index_++); } else { - inst_name = std::string(base_name) + std::to_string(unique_inst_index_++); + inst_name = fmt::format("{}{}", base_name, unique_inst_index_++); } } while (network_->findInstance(inst_name.c_str())); return inst_name;