-
Bug
-
Resolution: Unresolved
-
Minor
-
None
-
rhel-10.0
-
None
-
None
-
Important
-
rhel-sst-cs-software-management
-
ssg_core_services
-
None
-
False
-
-
No
-
Red Hat Enterprise Linux
-
None
-
None
-
None
-
Release Note Not Required
-
None
Findings from https://issues.redhat.com/browse/RHEL-34401
This seems like a true positive as per the C99 standard (page 82):
If the value being stored in an object is read from another object that overlaps in any way the storage of the first object, then the overlap shall be exact and the two objects shall have qualified or unqualified versions of a compatible type; otherwise, the behavior is undefined.
Error: OVERLAPPING_COPY: lua-5.4.4/src/lcode.c:779: offset: The address of "e->u.info" is 8 bytes off of "e". lua-5.4.4/src/lcode.c:779: offset: The address of "e->u.var.ridx" is 8 bytes off of "e". lua-5.4.4/src/lcode.c:779: overlapping_assignment: Assigning "e->u.var.ridx" to "e->u.info", which have overlapping memory locations and different types. lua-5.4.4/src/lcode.c:779: target_type: "e->u.info" has type "int". lua-5.4.4/src/lcode.c:779: source_type: "e->u.var.ridx" has type "unsigned char". # 777| } # 778| case VLOCAL: { /* already in a register */ # 779|-> e->u.info = e->u.var.ridx; # 780| e->k = VNONRELOC; /* becomes a non-relocatable value */ # 781| break;
Error: OVERLAPPING_COPY: lua-5.4.4/src/lcode.c:1286: offset: The address of "t->u.ind.t" is 10 bytes off of "t". lua-5.4.4/src/lcode.c:1286: offset: The address of "t->u.info" is 8 bytes off of "t". lua-5.4.4/src/lcode.c:1286: overlapping_assignment: Assigning "t->u.info" to "t->u.ind.t", which have overlapping memory locations. # 1284| luaK_exp2anyreg(fs, t); /* put it in a register */ # 1285| if (t->k == VUPVAL) { # 1286|-> t->u.ind.t = t->u.info; /* upvalue index */ # 1287| t->u.ind.idx = k->u.info; /* literal string */ # 1288| t->k = VINDEXUP;
For reference, this is the expdesc struct definition in src/lcode.c:
typedef struct expdesc { expkind k; union { lua_Integer ival; /* for VKINT */ lua_Number nval; /* for VKFLT */ TString *strval; /* for VKSTR */ int info; /* for generic use */ struct { /* for indexed variables */ short idx; /* index (R or "long" K) */ lu_byte t; /* table (register or upvalue) */ } ind; struct { /* for local variables */ lu_byte ridx; /* register holding the variable */ unsigned short vidx; /* compiler index (in 'actvar.arr') */ } var; } u; int t; /* patch list of 'exit when true' */ int f; /* patch list of 'exit when false' */ } expdesc;
- clones
-
RHEL-32366 Lua: Overlapping copy
- Planning