expat: add patch for CVE-2022-23990

authored by Robert Scott and committed by Jonathan Ringer 4bff2f94 73bcaf52

+42
+41
pkgs/development/libraries/expat/CVE-2022-23990.patch
··· 1 + From ede41d1e186ed2aba88a06e84cac839b770af3a1 Mon Sep 17 00:00:00 2001 2 + From: Sebastian Pipping <sebastian@pipping.org> 3 + Date: Wed, 26 Jan 2022 02:36:43 +0100 4 + Subject: [PATCH] lib: Prevent integer overflow in doProlog (CVE-2022-23990) 5 + 6 + The change from "int nameLen" to "size_t nameLen" 7 + addresses the overflow on "nameLen++" in code 8 + "for (; name[nameLen++];)" right above the second 9 + change in the patch. 10 + --- 11 + expat/lib/xmlparse.c | 10 ++++++++-- 12 + 1 file changed, 8 insertions(+), 2 deletions(-) 13 + 14 + diff --git a/expat/lib/xmlparse.c b/expat/lib/xmlparse.c 15 + index 5ce31402..d1d17005 100644 16 + --- a/expat/lib/xmlparse.c 17 + +++ b/expat/lib/xmlparse.c 18 + @@ -5372,7 +5372,7 @@ doProlog(XML_Parser parser, const ENCODING *enc, const char *s, const char *end, 19 + if (dtd->in_eldecl) { 20 + ELEMENT_TYPE *el; 21 + const XML_Char *name; 22 + - int nameLen; 23 + + size_t nameLen; 24 + const char *nxt 25 + = (quant == XML_CQUANT_NONE ? next : next - enc->minBytesPerChar); 26 + int myindex = nextScaffoldPart(parser); 27 + @@ -5388,7 +5388,13 @@ doProlog(XML_Parser parser, const ENCODING *enc, const char *s, const char *end, 28 + nameLen = 0; 29 + for (; name[nameLen++];) 30 + ; 31 + - dtd->contentStringLen += nameLen; 32 + + 33 + + /* Detect and prevent integer overflow */ 34 + + if (nameLen > UINT_MAX - dtd->contentStringLen) { 35 + + return XML_ERROR_NO_MEMORY; 36 + + } 37 + + 38 + + dtd->contentStringLen += (unsigned)nameLen; 39 + if (parser->m_elementDeclHandler) 40 + handleDefault = XML_FALSE; 41 + }
+1
pkgs/development/libraries/expat/default.nix
··· 17 17 patches = [ 18 18 ./CVE-2022-23852-fix.patch 19 19 ./CVE-2022-23852-test.patch 20 + ./CVE-2022-23990.patch 20 21 ]; 21 22 patchFlags = "-p2"; 22 23