This is an automated email from the git hooks/post-receive script. odyx pushed a commit to branch debian/master in repository colobot.
commit 9ff978155c523a391f5f1b4ce2441d533e53f3fb Author: krzys-h <krzy...@interia.pl> Date: Sat Jan 23 21:07:19 2016 +0100 Fix crash with CBot string functions out of range (closes #704) --- src/CBot/stdlib/StringFunctions.cpp | 12 ++++++++++++ test/unit/CBot/CBot_test.cpp | 10 ++++++++++ 2 files changed, 22 insertions(+) diff --git a/src/CBot/stdlib/StringFunctions.cpp b/src/CBot/stdlib/StringFunctions.cpp index f4ac5e8..7b18057 100644 --- a/src/CBot/stdlib/StringFunctions.cpp +++ b/src/CBot/stdlib/StringFunctions.cpp @@ -70,6 +70,9 @@ bool rStrLeft( CBotVar* pVar, CBotVar* pResult, int& ex, void* pUser ) // retrieves this number int n = pVar->GetValInt(); + if (n > static_cast<int>(s.length())) n = s.length(); + if (n < 0) n = 0; + // no third parameter if ( pVar->GetNext() != nullptr ) { ex = CBotErrOverParam ; return true; } @@ -103,6 +106,9 @@ bool rStrRight( CBotVar* pVar, CBotVar* pResult, int& ex, void* pUser ) // retrieves this number int n = pVar->GetValInt(); + if (n > static_cast<int>(s.length())) n = s.length(); + if (n < 0) n = 0; + // no third parameter if ( pVar->GetNext() != nullptr ) { ex = CBotErrOverParam ; return true; } @@ -136,6 +142,9 @@ bool rStrMid( CBotVar* pVar, CBotVar* pResult, int& ex, void* pUser ) // retrieves this number int n = pVar->GetValInt(); + if (n > static_cast<int>(s.length())) n = s.length(); + if (n < 0) n = 0; + // third parameter optional if ( pVar->GetNext() != nullptr ) { @@ -147,6 +156,9 @@ bool rStrMid( CBotVar* pVar, CBotVar* pResult, int& ex, void* pUser ) // retrieves this number int l = pVar->GetValInt(); + if (l > static_cast<int>(s.length())) l = s.length(); + if (l < 0) l = 0; + // but no fourth parameter if ( pVar->GetNext() != nullptr ){ ex = CBotErrOverParam ; return true; } diff --git a/test/unit/CBot/CBot_test.cpp b/test/unit/CBot/CBot_test.cpp index f7b2539..ff75182 100644 --- a/test/unit/CBot/CBot_test.cpp +++ b/test/unit/CBot/CBot_test.cpp @@ -969,6 +969,16 @@ TEST_F(CBotUT, StringFunctions) " ASSERT(strfind(s, \"o\") == 1);\n" " ASSERT(strval(\"2.5\") == 2.5);\n" "}\n" + "extern void StringFunctionsOutOfRange()\n" + "{\n" + " ASSERT(strmid(\"asdf\", 5, 1) == \"\");\n" + " ASSERT(strmid(\"asdf\", 0, 100) == \"asdf\");\n" + " ASSERT(strmid(\"asdf\", -500, 100) == \"asdf\");\n" + " ASSERT(strleft(\"asdf\", 15) == \"asdf\");\n" + " ASSERT(strleft(\"asdf\", -15) == \"\");\n" + " ASSERT(strright(\"asdf\", 15) == \"asdf\");\n" + " ASSERT(strright(\"asdf\", -15) == \"\");\n" + "}\n" ); } -- Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-games/colobot.git _______________________________________________ Pkg-games-commits mailing list Pkg-games-commits@lists.alioth.debian.org http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/pkg-games-commits