From e471d95efc11fb48200803b2ace2e94092cadba9 Mon Sep 17 00:00:00 2001 From: Qrox Date: Wed, 15 Apr 2020 00:42:42 +0800 Subject: [PATCH] Fix a crash in item::use_amount --- src/item.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/item.cpp b/src/item.cpp index de95a9cb848ec..0800eac1c9d30 100644 --- a/src/item.cpp +++ b/src/item.cpp @@ -8002,6 +8002,7 @@ bool item::use_amount( const itype_id &it, int &quantity, std::list &used, { // Remember quantity so that we can unseal self int old_quantity = quantity; + std::vector removed_items; // First, check contents visit_items( [&]( item * a ) { @@ -8010,12 +8011,16 @@ bool item::use_amount( const itype_id &it, int &quantity, std::list &used, return VisitResponse::NEXT; } if( a->use_amount_internal( it, quantity, used, filter ) ) { - this->remove_item( *a ); + removed_items.emplace_back( a ); return VisitResponse::SKIP; } return VisitResponse::NEXT; } ); + for( item *remove : removed_items ) { + remove_item( *remove ); + } + if( quantity != old_quantity ) { on_contents_changed(); }