On Tue, Apr 25, 2023 at 02:21:07AM -0400, Jeff King wrote: > I think we _could_ do something like: > > for (i = nr; i < list->nr; i++) { > if (list->items[i].util) > BUG("truncated string list item has non-NULL util field"); > } > > though that is technically tighter than we need to be (it could be an > unowned util field, after all; we don't know what it means here). So I'm > inclined to leave your patch as-is. I think there are two ways to do it, either: - something like what you wrote above, perhaps with an additional `free_util` bit on the string_list itself (which might make it convenient to drop all of the `free_util` parameters that permeate its API) - have string_list_setlen() take a `free_util` argument itself, in which case your code would change to: if (free_util) { for (i = nr; i < list->nr; i++) free(list->items[i].util) } > This would all be easier if the string_list had a field for "we own the > util fields, too" just like it has strdup_strings. Or even a free-ing > function. But instead we have ad-hoc solutions like "free_util" and > string_list_clear_func(). But that's really outside the scope of your > series. </rant> :) ;-). Thanks, Taylor