From 3b898aa1b62fd7a94e44fff5312c255be32f15ed Mon Sep 17 00:00:00 2001 From: arvinzzz Date: Mon, 3 Apr 2023 23:18:45 +0800 Subject: [PATCH] Title: Fix hardcoded string length about ssp-buffer-size & ssp-ret-cookie-size Test: stack protector demo & llvmts Issue: https://gitee.com/openharmony/third_party_llvm-project/issues/I6S3ZU Signed-off-by: arvinzzz Change-Id: Ideb4e00003942df022684bda137ba9891a2164fa --- clang/lib/Driver/ToolChains/Clang.cpp | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/clang/lib/Driver/ToolChains/Clang.cpp b/clang/lib/Driver/ToolChains/Clang.cpp index d54dd6e1dfec..fe5cbba064d7 100644 --- a/clang/lib/Driver/ToolChains/Clang.cpp +++ b/clang/lib/Driver/ToolChains/Clang.cpp @@ -3291,10 +3291,11 @@ static void RenderSSPOptions(const Driver &D, const ToolChain &TC, for (const Arg *A : Args.filtered(options::OPT__param)) { StringRef Str(A->getValue()); if (Str.startswith("ssp-buffer-size=")) { + size_t size = sizeof("ssp-buffer-size="); if (StackProtectorLevel) { CmdArgs.push_back("-stack-protector-buffer-size"); // FIXME: Verify the argument is a valid integer. - CmdArgs.push_back(Args.MakeArgString(Str.drop_front(16))); + CmdArgs.push_back(Args.MakeArgString(Str.drop_front(size))); } A->claim(); } @@ -3307,15 +3308,16 @@ static void RenderSSPOptions(const Driver &D, const ToolChain &TC, << Str.take_front(19) << EffectiveTriple.getTriple(); continue; } + size_t size = sizeof("ssp-ret-cookie-size="); // The parameter must be greater than 0. - if (Str.drop_front(20).getAsInteger(10, SSPRetCookieSize) || !SSPRetCookieSize) { + if (Str.drop_front(size).getAsInteger(10, SSPRetCookieSize) || !SSPRetCookieSize) { D.Diag(diag::err_drv_invalid_int_value) - << Str.take_front(19) << Str.drop_front(20); + << Str.take_front(size - 1) << Str.drop_front(size); continue; } if (StackProtectorLevel) { CmdArgs.push_back("-stack-protector-ret-cookie-size"); - CmdArgs.push_back(Args.MakeArgString(Str.drop_front(20))); + CmdArgs.push_back(Args.MakeArgString(Str.drop_front(size))); } A->claim(); } -- Gitee