From b0d6b7088630f6a280b14954e7a5ec24055c818f Mon Sep 17 00:00:00 2001 From: Johnny Willemsen Date: Thu, 12 Jun 2025 11:28:17 +0200 Subject: [PATCH 1/2] Removed usage of variable length arrays, these are a gcc/clang extension * ACE/ace/Svc_Conf_Lexer.cpp: --- ACE/ace/Svc_Conf_Lexer.cpp | 26 ++++---------------------- 1 file changed, 4 insertions(+), 22 deletions(-) diff --git a/ACE/ace/Svc_Conf_Lexer.cpp b/ACE/ace/Svc_Conf_Lexer.cpp index de59d493fee22..859333b868154 100644 --- a/ACE/ace/Svc_Conf_Lexer.cpp +++ b/ACE/ace/Svc_Conf_Lexer.cpp @@ -27,23 +27,6 @@ ACE_BEGIN_VERSIONED_NAMESPACE_DECL #define ACE_MAX_BYTES_PER_CHAR 4 #define ACE_YY_CONVERSION_SPACE ACE_YY_BUF_SIZE * ACE_MAX_BYTES_PER_CHAR -#if defined (__GNUG__) -# define ACE_TEMPORARY_STRING(X,SIZE) \ - __extension__ char X[SIZE] -#else -# define ACE_TEMPORARY_STRING(X,SIZE) \ - char* X = 0; \ - char X ## buf[ACE_YY_BUF_SIZE]; \ - std::unique_ptr X ## bufp (nullptr); \ - if (SIZE > ACE_YY_BUF_SIZE) { \ - X ## bufp.reset (new char[SIZE]); \ - X = X ## bufp.get (); \ - } \ - else { \ - X = X ## buf; \ - } -#endif /* __GNUG__ */ - // These are states not covered by the tokens in Svc_Conf_Tokens.h #define ACE_NO_STATE -1 #define ACE_COMMENT 0 @@ -426,13 +409,12 @@ ACE_Svc_Conf_Lexer::scan (ACE_YYSTYPE* ace_yylval, } // String from buffer->index_ to current (inclusive) - size_t size = (current - buffer->index_) + 1; - ACE_TEMPORARY_STRING (str, size); - ACE_OS::strncpy (str, buffer->input_ + buffer->index_, - size - 1); + size_t const size = (current - buffer->index_) + 1; + std::unique_ptr str_bufp = std::make_unique(size); + char* str = str_bufp.get (); + ACE_OS::strncpy (str, buffer->input_ + buffer->index_, size - 1); str[size - 1] = '\0'; - if (ACE_OS::strcmp (str, "dynamic") == 0) { buffer->index_ = current; From 37a6d5f1332b059db328c3c7a1256dd27bae6b26 Mon Sep 17 00:00:00 2001 From: Johnny Willemsen Date: Thu, 12 Jun 2025 12:17:13 +0200 Subject: [PATCH 2/2] Add back small buffer optimization * ACE/ace/Svc_Conf_Lexer.cpp: --- ACE/ace/Svc_Conf_Lexer.cpp | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/ACE/ace/Svc_Conf_Lexer.cpp b/ACE/ace/Svc_Conf_Lexer.cpp index 859333b868154..dcfa5fbf258e6 100644 --- a/ACE/ace/Svc_Conf_Lexer.cpp +++ b/ACE/ace/Svc_Conf_Lexer.cpp @@ -410,8 +410,18 @@ ACE_Svc_Conf_Lexer::scan (ACE_YYSTYPE* ace_yylval, // String from buffer->index_ to current (inclusive) size_t const size = (current - buffer->index_) + 1; - std::unique_ptr str_bufp = std::make_unique(size); - char* str = str_bufp.get (); + char* str {}; + char str_buf[ACE_YY_BUF_SIZE]; + std::unique_ptr str_bufp {}; + if (size > ACE_YY_BUF_SIZE) + { + str_bufp = std::make_unique(size); + str = str_bufp.get (); + } + else + { + str = str_buf; + } ACE_OS::strncpy (str, buffer->input_ + buffer->index_, size - 1); str[size - 1] = '\0';