@@ -207,7 +207,7 @@ static void filter_spec_append_urlencode(
207207 struct strbuf buf = STRBUF_INIT ;
208208 strbuf_addstr_urlencode (& buf , raw , allow_unencoded );
209209 trace_printf ("Add to combine filter-spec: %s\n" , buf .buf );
210- string_list_append (& filter -> filter_spec , strbuf_detach (& buf , NULL ));
210+ string_list_append_nodup (& filter -> filter_spec , strbuf_detach (& buf , NULL ));
211211}
212212
213213/*
@@ -226,12 +226,13 @@ static void transform_to_combine_type(
226226 xcalloc (initial_sub_alloc , sizeof (* sub_array ));
227227 sub_array [0 ] = * filter_options ;
228228 memset (filter_options , 0 , sizeof (* filter_options ));
229+ string_list_init_dup (& filter_options -> filter_spec );
229230 filter_options -> sub = sub_array ;
230231 filter_options -> sub_alloc = initial_sub_alloc ;
231232 }
232233 filter_options -> sub_nr = 1 ;
233234 filter_options -> choice = LOFC_COMBINE ;
234- string_list_append (& filter_options -> filter_spec , xstrdup ( "combine:" ) );
235+ string_list_append (& filter_options -> filter_spec , "combine:" );
235236 filter_spec_append_urlencode (
236237 filter_options ,
237238 list_objects_filter_spec (& filter_options -> sub [0 ]));
@@ -256,8 +257,14 @@ void parse_list_objects_filter(
256257 struct strbuf errbuf = STRBUF_INIT ;
257258 int parse_error ;
258259
260+ if (!filter_options -> filter_spec .strdup_strings ) {
261+ if (filter_options -> filter_spec .nr )
262+ BUG ("unexpected non-allocated string in filter_spec" );
263+ filter_options -> filter_spec .strdup_strings = 1 ;
264+ }
265+
259266 if (!filter_options -> choice ) {
260- string_list_append (& filter_options -> filter_spec , xstrdup ( arg ) );
267+ string_list_append (& filter_options -> filter_spec , arg );
261268
262269 parse_error = gently_parse_list_objects_filter (
263270 filter_options , arg , & errbuf );
@@ -268,7 +275,7 @@ void parse_list_objects_filter(
268275 */
269276 transform_to_combine_type (filter_options );
270277
271- string_list_append (& filter_options -> filter_spec , xstrdup ( "+" ) );
278+ string_list_append (& filter_options -> filter_spec , "+" );
272279 filter_spec_append_urlencode (filter_options , arg );
273280 ALLOC_GROW_BY (filter_options -> sub , filter_options -> sub_nr , 1 ,
274281 filter_options -> sub_alloc );
@@ -306,7 +313,7 @@ const char *list_objects_filter_spec(struct list_objects_filter_options *filter)
306313 strbuf_add_separated_string_list (
307314 & concatted , "" , & filter -> filter_spec );
308315 string_list_clear (& filter -> filter_spec , /*free_util=*/ 0 );
309- string_list_append (
316+ string_list_append_nodup (
310317 & filter -> filter_spec , strbuf_detach (& concatted , NULL ));
311318 }
312319
@@ -321,7 +328,7 @@ const char *expand_list_objects_filter_spec(
321328 strbuf_addf (& expanded_spec , "blob:limit=%lu" ,
322329 filter -> blob_limit_value );
323330 string_list_clear (& filter -> filter_spec , /*free_util=*/ 0 );
324- string_list_append (
331+ string_list_append_nodup (
325332 & filter -> filter_spec ,
326333 strbuf_detach (& expanded_spec , NULL ));
327334 }
@@ -418,6 +425,7 @@ void list_objects_filter_copy(
418425 string_list_init_dup (& dest -> filter_spec );
419426 for_each_string_list_item (item , & src -> filter_spec )
420427 string_list_append (& dest -> filter_spec , item -> string );
428+ dest -> sparse_oid_name = xstrdup_or_null (src -> sparse_oid_name );
421429
422430 ALLOC_ARRAY (dest -> sub , dest -> sub_alloc );
423431 for (i = 0 ; i < src -> sub_nr ; i ++ )
0 commit comments