5821 Commits

Author SHA1 Message Date
Roberto I
5b179eaf6a Details 2025-08-09 15:08:53 -03:00
Roberto Ierusalimschy
8fddca81e7 'onelua' can use the test library
Just add -DLUA_USER_H='"ltests.h"' when compiling it.
2025-07-29 14:35:04 -03:00
Roberto Ierusalimschy
c33bb08ffe Added some casts for 32-bit machines
When both 'int' and 'l_obj' have 32 bits, an unsigned int needs a
cast to be assigned to 'l_obj'. (As long as 'l_obj' can count the
total memory used by the system, these casts should be safe.)
2025-07-29 11:50:20 -03:00
Roberto Ierusalimschy
e3716ee161 Fix in string.rep
The cast of n (number of repetitions) to size_t may truncate its value,
causing a buffer overflow later. Better to check the buffer size
using lua_Integer, as all string lengths must fit in a lua_Integer and
n already is a lua_Integer. If everything fits in MAX_SIZE, then we can
safely convert n to size_t and compute the buffer size as a size_t.

As a corner case, n can be larger than size_t if the strings being
repeated have length zero, but in this case it will be multiplied by
zero, so an overflow in the cast is irrelevant.
2025-07-23 18:12:53 -03:00
Roberto Ierusalimschy
303f415559 Randomness added to table length computation
A bad actor could fill only a few entries in a table (power of twos in
decreasing order, see tests) and produce a small table with a huge
length. If your program builds a table with external data and iterates
over its length, this behavior could be an issue.
2025-07-18 16:18:30 -03:00
Roberto Ierusalimschy
ccb8b307f1 Correction in utf8.offset
Wrong utf-8 character may have no continuation bytes.
2025-07-18 16:10:28 -03:00
Roberto Ierusalimschy
60b6599e83 Short strings can be external, too
That complicates a little object equality (and therefore table access
for long strings), but the old behavior was somewhat weird. (Short
strings, a concept otherwise absent from the manual, could not be
external.)
2025-07-15 14:40:27 -03:00
Roberto Ierusalimschy
c612685d4b lua.c doesn't use function pointers with LUA_READLINE
Bugs in macOS prevent assigning 'add_history' to 'l_addhist' without
a warning.
2025-07-09 14:43:31 -03:00
Roberto Ierusalimschy
85a3c1699c New method to unload DLLs
External strings created by DLLs may need the DLL code to be
deallocated. This implies that a DLL can only be unloaded after all
its strings were deallocated, which happen only after the run of all
finalizers. To ensure that order, we create a 'library string' to
represent each DLL and keep it locked. When this string is deallocated
(after the deallocation of any string created by the DLL) it closes its
corresponding DLL.
2025-07-09 14:40:36 -03:00
Roberto Ierusalimschy
f65d1f9e02 lua option '--' may not be followed by script 2025-07-08 15:40:59 -03:00
Roberto Ierusalimschy
942c10a5e3 Optional initialization for global declarations 2025-07-08 13:33:57 -03:00
Roberto Ierusalimschy
8485687908 Correction in definition of CIST_FRESH
The cast must be made before the shift. If int has 16 bits, the shift
would zero the value and the cast would cast 0 to 0.
2025-07-07 15:03:45 -03:00
Roberto Ierusalimschy
03d672a95c Details (comments) 2025-07-07 15:02:09 -03:00
Roberto Ierusalimschy
03bf7fdd4f Added missing casts from lua_Unsigned to size_t
size_t can be smaller than lua_Usigned.
2025-07-01 16:07:03 -03:00
Roberto Ierusalimschy
59a1adf194 LUAI_MAXSTACK defined privately
LUAI_MAXSTACK is limited to INT_MAX/2, so can use INT_MAX/2 to define
pseudo-indices (LUA_REGISTRYINDEX) in 'lua.h'. A change in the maximum
stack size does not need to change the Lua-C ABI.
2025-07-01 10:57:02 -03:00
Roberto Ierusalimschy
cfce6f4b20 Warning in loslib.c (signed-unsigned comparison) v5.5-beta 2025-06-27 14:47:11 -03:00
Roberto Ierusalimschy
1da89da62f Manual updated to version 5.5 2025-06-27 14:46:41 -03:00
Roberto Ierusalimschy
f6c627af20 Cast added to 'add_history'
MacOS defines 'add_history' with a "wrong" type (it returns 'int'
instead of 'void').
2025-06-26 11:45:42 -03:00
Roberto Ierusalimschy
270a58c062 Application name for 'readline' is "lua", not "Lua" =list 2025-06-23 14:36:32 -03:00
Roberto Ierusalimschy
30531c291b Refactoring in the use of 'readline' by 'lua.c'
More common code for 'readline' loaded statically or dynamically (or
not loaded).
2025-06-23 14:00:21 -03:00
Roberto Ierusalimschy
07b009c371 No need to limit variable declarations to 250
Only local variables, which use registers, need this low limit.
2025-06-18 16:45:55 -03:00
Roberto Ierusalimschy
f711567448 Check string indices when loading binary chunk
Lua is not religious about that, but it tries to avoid crashes when
loading binary chunks.
2025-06-17 11:40:49 -03:00
Roberto Ierusalimschy
9386e49a31 New metatable in an all-weak table can fool the GC
All-weak tables are not being revisited after being visited during
propagation; if it gets a new metatable after that, the new metatable
may not be marked.
2025-06-16 16:29:32 -03:00
Roberto Ierusalimschy
8cd7ae7da0 Simpler code for 'traversetable'
Check the mode in a separate function (getmode), instead of using
comma expressions inside the 'if' condition.
2025-06-16 15:50:12 -03:00
Roberto Ierusalimschy
0cecf1ab6d Dump uses varints also for integer constants
Unlike sizes, these constants can be negative, so it encodes those
integers into unsigned integers in a way that keeps small numbers
small.
2025-06-13 14:14:50 -03:00
Roberto Ierusalimschy
e657a48ea5 The main thread cannot be closed
No thread started with pcall (instead of resume) can be closed,
because coroutine.close would not respect the expected number of
results from the protected call.
2025-06-13 14:08:38 -03:00
Roberto Ierusalimschy
fd897027f1 A coroutine can close itself
A call to close itself will close all its to-be-closed variables and
return to the resume that (re)started the coroutine.
2025-06-12 11:15:09 -03:00
Roberto Ierusalimschy
d05fe48bfd Loading a binary chunk should not break assertions
Although the execution of a bad binary chunk can crash the interpreter,
simply loading it should be safe.
2025-06-04 12:55:43 -03:00
Roberto Ierusalimschy
519c57d597 Removed uneeded check in parser
In a constructor, each field generates at least one opcode, and the
number of opcodes is limited by INT_MAX. Therefore, the counters for
number of fields cannot exceed this limit. (The current limit for
items in the hash part of a table has a limit smaller than INT_MAX.
However, as long as there are no overflows, the logic for table
resizing will handle that limit.)
2025-06-04 09:54:31 -03:00
Roberto Ierusalimschy
c15543b9af Bug: check for constructor overflow in [exp] fields
The check for constructor overflow was considering only fields with
explicit names, ignoring fields with syntax '[exp]=exp'.
2025-05-20 17:50:56 -03:00
Roberto Ierusalimschy
be05c44481 New way to control preambular declaration
Validity of the preambular global declaration in controled together
with all declarations, when checking variable names.
2025-05-20 17:36:05 -03:00
Roberto Ierusalimschy
6d53701c7a Proper error message when jumping into 'global *'
A goto cannot jump into the scope of any variable declaration,
including 'global *'. To report the error, it needs a "name" for
the scope it is entering.
2025-05-18 12:03:54 -03:00
Roberto Ierusalimschy
abbae57c78 Variable attributes can prefix name list
In this format, the attribute applies to all names in the list;
e.g. "global<const> print, require, math".
2025-05-18 11:43:43 -03:00
Roberto Ierusalimschy
f2c1531e6c Detail
Reports errors with "?:?:" (instead of "?👎") when there is no debug
information.
2025-05-16 15:20:32 -03:00
Roberto Ierusalimschy
ded2ad2d86 Slightly faster way to check for "global" 2025-05-16 14:51:07 -03:00
Roberto Ierusalimschy
3fb7a77731 Internalized string "break" kept by the parser
The parser uses "break" as fake label to compile "break" as "goto
break". To avoid producing this string at each use, it keeps it
available in its state.
2025-05-15 12:43:37 -03:00
Roberto Ierusalimschy
fded0b4a84 Remove compat code in parser when not needed 2025-05-13 11:50:43 -03:00
Roberto Ierusalimschy
3b9dd52be0 Collective declaration for globals ('global *') 2025-05-13 11:43:10 -03:00
Roberto Ierusalimschy
7dc6aae290 Correct line in error message for constant function 2025-05-12 11:42:45 -03:00
Roberto Ierusalimschy
5b1ab8efdc 'expdesc' doesn't depend on 'actvar' for var. info.
In preparation for 'global *', the structure 'expdesc' does not point
to 'actvar.arr' for information about global variables.
2025-05-11 11:51:58 -03:00
Roberto Ierusalimschy
7ade155762 Janitorial work on casts 2025-05-08 15:18:57 -03:00
Roberto Ierusalimschy
d827e96f33 Using 'l_uint32' for unicode codepoints in scanner
'l_uint32' is enough for unicode codepoints (versus unsigned long),
and the utf-8 library already uses that type.
2025-05-08 12:49:39 -03:00
Roberto Ierusalimschy
3f0ea90aa8 New syntax 'global function' 2025-05-08 11:08:03 -03:00
Roberto Ierusalimschy
4365a45d68 Checks for read-only globals 2025-05-06 15:54:05 -03:00
Roberto Ierusalimschy
be81209063 First implementation of global declarations 2025-05-05 16:24:59 -03:00
Roberto Ierusalimschy
e055905914 New macro 'pushvfstring'
Helps to ensure that 'luaO_pushvfstring' is being called correctly,
with an error check after closing the vararg list with 'va_end'.
2025-04-23 11:55:04 -03:00
Roberto Ierusalimschy
9b014d4bcd Details (typos in comments) 2025-04-23 11:36:09 -03:00
Roberto Ierusalimschy
50fd8d03c3 Function 'luaK_semerror' made vararg
All calls to 'luaK_semerror' were using 'luaO_pushfstring' to create
the error messages.
2025-04-17 14:58:55 -03:00
Roberto Ierusalimschy
3dbb1a4b89 In gen. GC, some gray objects stay in gray lists
In generational collection, objects marked as touched1 stay in gray
lists between collections. This commit fixes a bug introduced in
commit 808976bb59.
2025-04-15 17:00:30 -03:00
Roberto Ierusalimschy
3dd8ea54da Order change in 'pushfuncname'
'pushglobalfuncname' can be quite slow (as it traverses all globals and
all loaded modules), so try first to get a name from the code.
2025-04-03 15:31:22 -03:00