@@ -868,10 +868,8 @@ fn clonePayload(payload: Payload, allocator: Allocator) !Payload {
868868 var cloned_count : usize = 0 ;
869869 errdefer {
870870 // cleanup partial clones on error
871- var j : usize = cloned_count ;
872- while (j > 0 ) {
873- j -= 1 ;
874- new_arr [j ].free (allocator );
871+ for (new_arr [0.. cloned_count ]) | item | {
872+ item .free (allocator );
875873 }
876874 allocator .free (new_arr );
877875 }
@@ -889,13 +887,18 @@ fn clonePayload(payload: Payload, allocator: Allocator) !Payload {
889887 // Clone all entries
890888 var it = m .map .iterator ();
891889 while (it .next ()) | entry | {
892- const cloned_key = try clonePayload (entry .key_ptr .* , allocator );
893- errdefer cloned_key .free (allocator );
894- const cloned_value = try clonePayload (entry .value_ptr .* , allocator );
895- errdefer cloned_value .free (allocator );
890+ var cloned_key : ? Payload = null ;
891+ var cloned_value : ? Payload = null ;
892+ errdefer {
893+ if (cloned_value ) | v | v .free (allocator );
894+ if (cloned_key ) | k | k .free (allocator );
895+ }
896+
897+ cloned_key = try clonePayload (entry .key_ptr .* , allocator );
898+ cloned_value = try clonePayload (entry .value_ptr .* , allocator );
896899
897900 // Use putInternal to insert without additional cloning
898- try new_map .putInternal (cloned_key , cloned_value );
901+ try new_map .putInternal (cloned_key .? , cloned_value .? );
899902 }
900903 return Payload { .map = new_map };
901904 },
0 commit comments