diff options
author | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2018-12-14 13:12:01 -0200 |
---|---|---|
committer | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2018-12-14 13:12:01 -0200 |
commit | 57f5b81da9f1f23380d20f164012e10c5f4fef94 (patch) | |
tree | f626d12697bfec8bba9290a0f11b29f71705eaab /bugs | |
parent | fdc25a1ebfe9968dcec390dd556375105aa0be40 (diff) | |
download | lua-57f5b81da9f1f23380d20f164012e10c5f4fef94.tar.gz lua-57f5b81da9f1f23380d20f164012e10c5f4fef94.tar.bz2 lua-57f5b81da9f1f23380d20f164012e10c5f4fef94.zip |
Bug: Long brackets with a huge number of '=' causes overflow
A long bracket with too many equal signs can overflow the 'int' used for
the counting and some arithmetic done on the value. Changing the counter
to 'size_t' avoids that. (Because what is counted goes to a buffer, an
overflow in the counter will first raise a buffer-overflow error.)
Diffstat (limited to 'bugs')
-rw-r--r-- | bugs | 19 |
1 files changed, 19 insertions, 0 deletions
@@ -4017,6 +4017,25 @@ patch = [[ | |||
4017 | 4017 | ||
4018 | 4018 | ||
4019 | 4019 | ||
4020 | --[=[ | ||
4021 | Bug{ | ||
4022 | what = [[Long brackets with a huge number of '=' overflow some | ||
4023 | internal buffer arithmetic]], | ||
4024 | report = [[Marco, 2018/12/12]], | ||
4025 | since = [[5.1]], | ||
4026 | fix = nil, | ||
4027 | example = [[ | ||
4028 | local eqs = string.rep("=", 0x3ffffffe) | ||
4029 | local code = "return [" .. eqs .. "[a]" .. eqs .. "]" | ||
4030 | print(#assert(load(code))()) | ||
4031 | ]], | ||
4032 | patch = [[ | ||
4033 | ]] | ||
4034 | } | ||
4035 | ]=] | ||
4036 | |||
4037 | |||
4038 | |||
4020 | 4039 | ||
4021 | --[=[ | 4040 | --[=[ |
4022 | Bug{ | 4041 | Bug{ |