@@ -47,7 +47,7 @@ impl Node {
4747
4848 /// Write value from LuaValue
4949 #[ inline( always) ]
50- fn set_value ( & mut self , v : LuaValue ) {
50+ fn set_value ( & mut self , v : & LuaValue ) {
5151 self . val_data = v. value ;
5252 self . val_tt = v. tt ;
5353 }
@@ -66,7 +66,7 @@ impl Node {
6666
6767 /// Write key from LuaValue
6868 #[ inline( always) ]
69- fn set_key ( & mut self , k : LuaValue ) {
69+ fn set_key ( & mut self , k : & LuaValue ) {
7070 self . key_data = k. value ;
7171 self . key_tt = k. tt ;
7272 }
@@ -348,7 +348,7 @@ impl NativeTable {
348348 && short_string_ptr_eq ( ( * node) . key_string_ptr ( ) , key_ptr)
349349 {
350350 if ( * node) . val_tt != LUA_VNIL {
351- ( * node) . set_value ( value) ;
351+ ( * node) . set_value ( & value) ;
352352 return true ;
353353 }
354354 return false ;
@@ -395,7 +395,7 @@ impl NativeTable {
395395 loop {
396396 if ( * node) . key_tt == LUA_VNUMINT && ( * node) . key_data . i == key {
397397 if ( * node) . val_tt != LUA_VNIL {
398- ( * node) . set_value ( value) ;
398+ ( * node) . set_value ( & value) ;
399399 return true ;
400400 }
401401 return false ;
@@ -483,7 +483,7 @@ impl NativeTable {
483483 }
484484
485485 if ( * mp) . key_tt == LUA_VNIL {
486- ( * mp) . set_key ( * key) ;
486+ ( * mp) . set_key ( key) ;
487487 ( * mp) . set_value_parts ( value, tt) ;
488488 ( * mp) . next = 0 ;
489489 return ShortStrSetResult :: Done {
@@ -511,7 +511,7 @@ impl NativeTable {
511511 if ( * free_node) . next != 0 {
512512 ( * free_node) . next += Self :: node_offset ( free_node, mp) ;
513513 }
514- ( * mp) . set_key ( * key) ;
514+ ( * mp) . set_key ( & key) ;
515515 ( * mp) . set_value_parts ( value, tt) ;
516516 ( * mp) . next = 0 ;
517517 return ShortStrSetResult :: Done {
@@ -523,7 +523,7 @@ impl NativeTable {
523523 }
524524
525525 if let Some ( free_node) = self . getfreepos ( ) {
526- ( * free_node) . set_key ( * key) ;
526+ ( * free_node) . set_key ( key) ;
527527 ( * free_node) . set_value_parts ( value, tt) ;
528528 if ( * mp) . next != 0 {
529529 ( * free_node) . next =
@@ -562,7 +562,7 @@ impl NativeTable {
562562 } => {
563563 unsafe {
564564 let node = self . node . add ( node_index) ;
565- ( * node) . set_key ( * key) ;
565+ ( * node) . set_key ( key) ;
566566 ( * node) . set_value_parts ( value. value , value. tt ) ;
567567 }
568568 ( new_key, 0 )
@@ -598,14 +598,14 @@ impl NativeTable {
598598 let mp = self . mainposition_string ( key) ;
599599
600600 if ( * mp) . key_tt == LUA_VNIL {
601- ( * mp) . set_key ( * key) ;
601+ ( * mp) . set_key ( key) ;
602602 ( * mp) . set_value_parts ( value. value , value. tt ) ;
603603 ( * mp) . next = 0 ;
604604 return true ;
605605 }
606606
607607 if ( * mp) . val_tt == LUA_VNIL {
608- ( * mp) . set_key ( * key) ;
608+ ( * mp) . set_key ( key) ;
609609 ( * mp) . set_value_parts ( value. value , value. tt ) ;
610610 return true ;
611611 }
@@ -622,7 +622,7 @@ impl NativeTable {
622622 if ( * free_node) . next != 0 {
623623 ( * free_node) . next += Self :: node_offset ( free_node, mp) ;
624624 }
625- ( * mp) . set_key ( * key) ;
625+ ( * mp) . set_key ( key) ;
626626 ( * mp) . set_value_parts ( value. value , value. tt ) ;
627627 ( * mp) . next = 0 ;
628628 return true ;
@@ -631,7 +631,7 @@ impl NativeTable {
631631 }
632632
633633 if let Some ( free_node) = self . getfreepos ( ) {
634- ( * free_node) . set_key ( * key) ;
634+ ( * free_node) . set_key ( key) ;
635635 ( * free_node) . set_value_parts ( value. value , value. tt ) ;
636636 if ( * mp) . next != 0 {
637637 ( * free_node) . next =
@@ -1483,7 +1483,7 @@ impl NativeTable {
14831483 loop {
14841484 // Skip dead keys (value nil) - avoid UAF on freed strings
14851485 if ( * node) . val_tt != LUA_VNIL && ( * node) . key ( ) == key {
1486- ( * node) . set_value ( LuaValue :: nil ( ) ) ;
1486+ ( * node) . set_value ( & LuaValue :: nil ( ) ) ;
14871487 return ( false , 0 ) ;
14881488 }
14891489 let next = ( * node) . next ;
@@ -1501,8 +1501,8 @@ impl NativeTable {
15011501 // Fall through to insert below — hash is now allocated
15021502 let mp = self . mainposition ( & key) ;
15031503 unsafe {
1504- ( * mp) . set_key ( key) ;
1505- ( * mp) . set_value ( value) ;
1504+ ( * mp) . set_key ( & key) ;
1505+ ( * mp) . set_value ( & value) ;
15061506 ( * mp) . next = 0 ;
15071507 }
15081508 return ( true , delta) ;
@@ -1518,8 +1518,8 @@ impl NativeTable {
15181518 // When reusing a dead key's slot, preserve the `next` link so that
15191519 // any chain passing through this slot remains intact.
15201520 if ( * mp) . key_tt == LUA_VNIL {
1521- ( * mp) . set_key ( key) ;
1522- ( * mp) . set_value ( value) ;
1521+ ( * mp) . set_key ( & key) ;
1522+ ( * mp) . set_value ( & value) ;
15231523 ( * mp) . next = 0 ;
15241524 return ( true , 0 ) ;
15251525 }
@@ -1537,13 +1537,13 @@ impl NativeTable {
15371537 scan = scan. offset ( next_off as isize ) ;
15381538 if ( * scan) . val_tt != LUA_VNIL && ( * scan) . key ( ) == key {
15391539 // Key exists alive in chain — just update value
1540- ( * scan) . set_value ( value) ;
1540+ ( * scan) . set_value ( & value) ;
15411541 return ( false , 0 ) ;
15421542 }
15431543 }
15441544 // Key not found in chain — safe to reuse this dead slot
1545- ( * mp) . set_key ( key) ;
1546- ( * mp) . set_value ( value) ;
1545+ ( * mp) . set_key ( & key) ;
1546+ ( * mp) . set_value ( & value) ;
15471547 // Keep (*mp).next as-is — other chains may pass through here
15481548 return ( true , 0 ) ;
15491549 }
@@ -1572,8 +1572,8 @@ impl NativeTable {
15721572 ( * free_node) . next += Self :: node_offset ( free_node, mp) ;
15731573 }
15741574 // Now mp is free for the new key
1575- ( * mp) . set_key ( key) ;
1576- ( * mp) . set_value ( value) ;
1575+ ( * mp) . set_key ( & key) ;
1576+ ( * mp) . set_value ( & value) ;
15771577 ( * mp) . next = 0 ;
15781578 return ( true , 0 ) ;
15791579 }
@@ -1587,7 +1587,7 @@ impl NativeTable {
15871587 loop {
15881588 // Skip dead keys (value nil) to avoid UAF on freed strings
15891589 if ( * node) . val_tt != LUA_VNIL && ( * node) . key ( ) == key {
1590- ( * node) . set_value ( value) ;
1590+ ( * node) . set_value ( & value) ;
15911591 return ( false , 0 ) ;
15921592 }
15931593 let next = ( * node) . next ;
@@ -1599,8 +1599,8 @@ impl NativeTable {
15991599
16001600 // Key not found - insert at a free position
16011601 if let Some ( free_node) = self . getfreepos ( ) {
1602- ( * free_node) . set_key ( key) ;
1603- ( * free_node) . set_value ( value) ;
1602+ ( * free_node) . set_key ( & key) ;
1603+ ( * free_node) . set_value ( & value) ;
16041604 // Link new node at the HEAD of the chain (right after mp),
16051605 // matching C Lua 5.5 behavior: gnext(f) = mp+gnext(mp) - f
16061606 if ( * mp) . next != 0 {
0 commit comments