1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109
|
From 57e712c98b285be4d286fd55a53984d4035fcb65 Mon Sep 17 00:00:00 2001
From: Dominique Martinet <asmadeus@codewreck.org>
Date: Fri, 14 Jul 2023 22:26:20 +0900
Subject: [PATCH] t/35huge_mode.t: fix test with libxml2 2.11
libxml 2.11 made improved parsing enough to not fail our test:
---
Protection against entity expansion attacks, also known as "billion
laughs" has been greatly improved. Malicious files should be detected
reliably now and false positives should be reduced. It is possible
though that large documents which make heavy use of entities are
rejected now.
---
Adjusts the test to have greater depth and fix exception message which
changed a bit; the new exception is as follow:
Entity: line 1: parser error : Maximum entity nesting depth exceeded
&ha8; &ha8;
Fixes: #79
Bug-Debian: https://bugs.debian.org/1072012
---
t/35huge_mode.t | 65 ++++++++++++++++++++++++++++++++++++++-----------
1 file changed, 51 insertions(+), 14 deletions(-)
--- a/t/35huge_mode.t
+++ b/t/35huge_mode.t
@@ -29,20 +29,57 @@
EOF
my $evil_xml = <<'EOF';
-<?xml version="1.0"?>
-<!DOCTYPE lolz [
- <!ENTITY lol "lol">
- <!ENTITY lol1 "&lol;&lol;">
- <!ENTITY lol2 "&lol1;&lol1;">
- <!ENTITY lol3 "&lol2;&lol2;">
- <!ENTITY lol4 "&lol3;&lol3;">
- <!ENTITY lol5 "&lol4;&lol4;">
- <!ENTITY lol6 "&lol5;&lol5;">
- <!ENTITY lol7 "&lol6;&lol6;">
- <!ENTITY lol8 "&lol7;&lol7;">
- <!ENTITY lol9 "&lol8;&lol8;">
+<!DOCTYPE root [
+ <!ENTITY ha "Ha !">
+ <!ENTITY ha2 "&ha; &ha;">
+ <!ENTITY ha3 "&ha2; &ha2;">
+ <!ENTITY ha4 "&ha3; &ha3;">
+ <!ENTITY ha5 "&ha4; &ha4;">
+ <!ENTITY ha6 "&ha5; &ha5;">
+ <!ENTITY ha7 "&ha6; &ha6;">
+ <!ENTITY ha8 "&ha7; &ha7;">
+ <!ENTITY ha9 "&ha8; &ha8;">
+ <!ENTITY ha10 "&ha9; &ha9;">
+ <!ENTITY ha11 "&ha10; &ha10;">
+ <!ENTITY ha12 "&ha11; &ha11;">
+ <!ENTITY ha13 "&ha12; &ha12;">
+ <!ENTITY ha14 "&ha13; &ha13;">
+ <!ENTITY ha15 "&ha14; &ha14;">
+ <!ENTITY ha16 "&ha15; &ha15;">
+ <!ENTITY ha17 "&ha16; &ha16;">
+ <!ENTITY ha18 "&ha17; &ha17;">
+ <!ENTITY ha19 "&ha18; &ha18;">
+ <!ENTITY ha20 "&ha19; &ha19;">
+ <!ENTITY ha21 "&ha20; &ha20;">
+ <!ENTITY ha22 "&ha21; &ha21;">
+ <!ENTITY ha23 "&ha22; &ha22;">
+ <!ENTITY ha24 "&ha23; &ha23;">
+ <!ENTITY ha25 "&ha24; &ha24;">
+ <!ENTITY ha26 "&ha25; &ha25;">
+ <!ENTITY ha27 "&ha26; &ha26;">
+ <!ENTITY ha28 "&ha27; &ha27;">
+ <!ENTITY ha29 "&ha28; &ha28;">
+ <!ENTITY ha30 "&ha29; &ha29;">
+ <!ENTITY ha31 "&ha30; &ha30;">
+ <!ENTITY ha32 "&ha31; &ha31;">
+ <!ENTITY ha33 "&ha32; &ha32;">
+ <!ENTITY ha34 "&ha33; &ha33;">
+ <!ENTITY ha35 "&ha34; &ha34;">
+ <!ENTITY ha36 "&ha35; &ha35;">
+ <!ENTITY ha37 "&ha36; &ha36;">
+ <!ENTITY ha38 "&ha37; &ha37;">
+ <!ENTITY ha39 "&ha38; &ha38;">
+ <!ENTITY ha40 "&ha39; &ha39;">
+ <!ENTITY ha41 "&ha40; &ha40;">
+ <!ENTITY ha42 "&ha41; &ha41;">
+ <!ENTITY ha43 "&ha42; &ha42;">
+ <!ENTITY ha44 "&ha43; &ha43;">
+ <!ENTITY ha45 "&ha44; &ha44;">
+ <!ENTITY ha46 "&ha45; &ha45;">
+ <!ENTITY ha47 "&ha46; &ha46;">
+ <!ENTITY ha48 "&ha47; &ha47;">
]>
-<lolz>&lol9;</lolz>
+<root>&ha48;</root>
EOF
my($parser, $doc);
@@ -54,7 +91,7 @@
$doc = eval { $parser->parse_string($evil_xml); };
isnt("$@", "", "exception thrown during parse");
-like($@, qr/entity.*loop/si, "exception refers to entity reference loop");
+like($@, qr/entity/si, "exception refers to entity maximum loop (libxml2 <= 2.10) or depth (>= 2.11)");
$parser = XML::LibXML->new;
|