Skip to content

Commit

Permalink
fix: single allergen infinite loop (#9757)
Browse files Browse the repository at this point in the history

fixes #9755
  • Loading branch information
stephanegigandet committed Feb 6, 2024
1 parent a14d4d2 commit 50fc596
Show file tree
Hide file tree
Showing 4 changed files with 227 additions and 2 deletions.
2 changes: 1 addition & 1 deletion lib/ProductOpener/Ingredients.pm
Original file line number Diff line number Diff line change
Expand Up @@ -2165,7 +2165,7 @@ sub parse_ingredients_text_service ($product_ref, $updated_product_fields_ref) {
}
# try to remove the allergens and store them as allergens
# in Japanese allergens are not separated from the ingredients list, instead they are in parenthesis.
if ($between =~ /\s*(?:>allergens<:)\s?:?\s?\b(.*)$/i) {
if ($between =~ /\s*(?:>allergens<:)(.*)$/i) {
$log->debug("parse_ingredients_text - sub-ingredients: contains allergens in $between")
if $log->is_debug();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -104,7 +104,7 @@
"origins_of_ingredients" : {
"aggregated_origins" : [
{
"epi_score" : 0,
"epi_score" : "0",
"origin" : "en:unknown",
"percent" : 100,
"transportation_score" : null
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,216 @@
{
"allergens" : "en:milk",
"ingredients" : [
{
"ciqual_proxy_food_code" : "31016",
"id" : "en:sugar",
"percent_estimate" : 50,
"text" : "Sucre",
"vegan" : "yes",
"vegetarian" : "yes"
},
{
"ciqual_food_code" : "19021",
"id" : "en:whole-milk-powder",
"percent" : 25,
"percent_estimate" : 25,
"text" : "LAIT* entier en poudre",
"vegan" : "no",
"vegetarian" : "yes"
},
{
"ciqual_proxy_food_code" : "16129",
"from_palm_oil" : "yes",
"id" : "en:palm-fat",
"percent_estimate" : 12.5,
"text" : "graisse végétale de palme",
"vegan" : "yes",
"vegetarian" : "yes"
},
{
"from_palm_oil" : "yes",
"id" : "en:palm-kernel-fat",
"percent_estimate" : 6.25,
"text" : "graisse végétale de palmiste",
"vegan" : "yes",
"vegetarian" : "yes"
},
{
"id" : "fr:beurre-de-cacao1",
"percent_estimate" : 3.125,
"text" : "beurre de cacao1"
},
{
"id" : "fr:pate-de-cacao1",
"percent_estimate" : 1.5625,
"text" : "pâte de cacao1"
},
{
"ciqual_food_code" : "19054",
"id" : "en:skimmed-milk-powder",
"percent" : 3,
"percent_estimate" : 1.5625,
"text" : "LAIT* écrémé en poudre",
"vegan" : "no",
"vegetarian" : "yes"
},
{
"ciqual_food_code" : "17440",
"from_palm_oil" : "no",
"id" : "en:sunflower-oil",
"percent_estimate" : 0,
"text" : "huile de tournesol",
"vegan" : "yes",
"vegetarian" : "yes"
},
{
"id" : "en:emulsifier",
"ingredients" : [
{
"id" : "en:e322",
"percent_estimate" : 0,
"text" : "lécithines",
"vegan" : "maybe",
"vegetarian" : "maybe"
}
],
"percent_estimate" : 0,
"text" : "émulsifiant"
},
{
"id" : "en:vanilla-flavouring",
"percent_estimate" : 0,
"text" : "arômes de vanille",
"vegan" : "maybe",
"vegetarian" : "maybe"
},
{
"ciqual_proxy_food_code" : "18100",
"id" : "en:cocoa",
"percent" : 30,
"percent_estimate" : 0,
"text" : "Cacao",
"vegan" : "yes",
"vegetarian" : "yes"
}
],
"ingredients_analysis" : {
"en:non-vegan" : [
"en:whole-milk-powder",
"en:skimmed-milk-powder"
],
"en:palm-oil" : [
"en:palm-fat",
"en:palm-kernel-fat"
],
"en:vegan-status-unknown" : [
"fr:beurre-de-cacao1",
"fr:pate-de-cacao1"
],
"en:vegetarian-status-unknown" : [
"fr:beurre-de-cacao1",
"fr:pate-de-cacao1"
]
},
"ingredients_analysis_tags" : [
"en:palm-oil",
"en:non-vegan",
"en:vegetarian-status-unknown"
],
"ingredients_hierarchy" : [
"en:sugar",
"en:added-sugar",
"en:disaccharide",
"en:whole-milk-powder",
"en:dairy",
"en:milk-powder",
"en:palm-fat",
"en:oil-and-fat",
"en:vegetable-oil-and-fat",
"en:palm-oil-and-fat",
"en:palm-kernel-fat",
"en:palm-kernel-oil-and-fat",
"fr:beurre-de-cacao1",
"fr:pate-de-cacao1",
"en:skimmed-milk-powder",
"en:sunflower-oil",
"en:vegetable-oil",
"en:emulsifier",
"en:vanilla-flavouring",
"en:flavouring",
"en:cocoa",
"en:plant",
"en:e322"
],
"ingredients_n" : 12,
"ingredients_n_tags" : [
"12",
"11-20"
],
"ingredients_original_tags" : [
"en:sugar",
"en:whole-milk-powder",
"en:palm-fat",
"en:palm-kernel-fat",
"fr:beurre-de-cacao1",
"fr:pate-de-cacao1",
"en:skimmed-milk-powder",
"en:sunflower-oil",
"en:emulsifier",
"en:vanilla-flavouring",
"en:cocoa",
"en:e322"
],
"ingredients_percent_analysis" : -1,
"ingredients_tags" : [
"en:sugar",
"en:added-sugar",
"en:disaccharide",
"en:whole-milk-powder",
"en:dairy",
"en:milk-powder",
"en:palm-fat",
"en:oil-and-fat",
"en:vegetable-oil-and-fat",
"en:palm-oil-and-fat",
"en:palm-kernel-fat",
"en:palm-kernel-oil-and-fat",
"fr:beurre-de-cacao1",
"fr:pate-de-cacao1",
"en:skimmed-milk-powder",
"en:sunflower-oil",
"en:vegetable-oil",
"en:emulsifier",
"en:vanilla-flavouring",
"en:flavouring",
"en:cocoa",
"en:plant",
"en:e322"
],
"ingredients_text" : "Sucre, LAIT* entier en poudre 25%, graisse végétale (palme, palmiste), beurre de cacao1, pâte de cacao1, LAIT* écrémé en poudre 3%, huile de tournesol, émulsifiant: lécithines, arômes de vanille. Traces éventuelles de fruits à coque et de céréales contenant du gluten. Cacao: 30% minimum dans le chocolat au lait. *Lait: origine UE et/ou non UE (Royaume-Uni)",
"ingredients_with_specified_percent_n" : 3,
"ingredients_with_specified_percent_sum" : 58,
"ingredients_with_unspecified_percent_n" : 8,
"ingredients_with_unspecified_percent_sum" : 73.4375,
"ingredients_without_ciqual_codes" : [
"en:e322",
"en:emulsifier",
"en:palm-kernel-fat",
"en:vanilla-flavouring",
"fr:beurre-de-cacao1",
"fr:pate-de-cacao1"
],
"ingredients_without_ciqual_codes_n" : 6,
"known_ingredients_n" : 21,
"lc" : "fr",
"misc_tags" : [
"en:some-ingredients-with-specified-percent"
],
"nutriments" : {
"fruits-vegetables-legumes-estimate-from-ingredients_100g" : 0,
"fruits-vegetables-legumes-estimate-from-ingredients_serving" : 0,
"fruits-vegetables-nuts-estimate-from-ingredients_100g" : 0,
"fruits-vegetables-nuts-estimate-from-ingredients_serving" : 0
},
"unknown_ingredients_n" : 2
}
9 changes: 9 additions & 0 deletions tests/unit/ingredients.t
Original file line number Diff line number Diff line change
Expand Up @@ -835,6 +835,15 @@ puffed orange and caramelized unknown_fruit4.",
ingredients_text => "beurre (lait), fromage (parmesan)",
}
],
# Infinite loop https://github.com/openfoodfacts/openfoodfacts-server/issues/9755
[
"fr-infinite-loop-allergens",
{
lc => "fr",
ingredients_text =>
"Sucre, LAIT* entier en poudre 25%, graisse végétale (palme, palmiste), beurre de cacao1, pâte de cacao1, LAIT* écrémé en poudre 3%, huile de tournesol, émulsifiant: lécithines, arômes de vanille. Traces éventuelles de fruits à coque et de céréales contenant du gluten. Cacao: 30% minimum dans le chocolat au lait. *Lait: origine UE et/ou non UE (Royaume-Uni)",
}
],
);

foreach my $test_ref (@tests) {
Expand Down

0 comments on commit 50fc596

Please sign in to comment.