Package: release.debian.org
Severity: normal
Tags: bookworm
X-Debbugs-Cc: p...@packages.debian.org
Control: affects -1 + src:poco
User: release.debian....@packages.debian.org
Usertags: pu

Fix for CVE-2023-52389 (which doesn't warrant a DSA),
debdiff below.

Cheers,
        Moritz

diff -Nru poco-1.11.0/debian/changelog poco-1.11.0/debian/changelog
--- poco-1.11.0/debian/changelog        2021-11-27 13:39:34.000000000 +0100
+++ poco-1.11.0/debian/changelog        2024-12-21 14:28:42.000000000 +0100
@@ -1,3 +1,9 @@
+poco (1.11.0-3+deb12u1) bookworm; urgency=medium
+
+  * CVE-2023-52389
+
+ -- Moritz Mühlenhoff <j...@debian.org>  Sat, 21 Dec 2024 14:28:42 +0100
+
 poco (1.11.0-3) unstable; urgency=medium
 
   * Fix cmake files (Closes: #1000656)
diff -Nru poco-1.11.0/debian/patches/CVE-2023-52389.patch 
poco-1.11.0/debian/patches/CVE-2023-52389.patch
--- poco-1.11.0/debian/patches/CVE-2023-52389.patch     1970-01-01 
01:00:00.000000000 +0100
+++ poco-1.11.0/debian/patches/CVE-2023-52389.patch     2024-12-21 
14:28:26.000000000 +0100
@@ -0,0 +1,109 @@
+From 62f875dfe1298041289f926a6a1a39cb765b13ee Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?G=C3=BCnter=20Obiltschnig?= <guenter.obiltsch...@appinf.com>
+Date: Mon, 4 Dec 2023 15:22:43 +0100
+Subject: [PATCH] #4320: Integer overflow in Poco::UTF32Encoding
+
+--- poco-1.11.0.orig/Foundation/include/Poco/UTF32Encoding.h
++++ poco-1.11.0/Foundation/include/Poco/UTF32Encoding.h
+@@ -68,6 +68,15 @@ public:
+       int convert(int ch, unsigned char* bytes, int length) const;
+       int queryConvert(const unsigned char* bytes, int length) const;
+       int sequenceLength(const unsigned char* bytes, int length) const;
++
++protected:
++      static int safeToInt(Poco::UInt32 value)
++      {
++              if (value <= 0x10FFFF)
++                      return static_cast<int>(value);
++              else
++                      return -1;
++      }
+       
+ private:
+       bool _flipBytes;
+--- poco-1.11.0.orig/Foundation/src/UTF32Encoding.cpp
++++ poco-1.11.0/Foundation/src/UTF32Encoding.cpp
+@@ -30,22 +30,22 @@ const char* UTF32Encoding::_names[] =
+ 
+ const TextEncoding::CharacterMap UTF32Encoding::_charMap =
+ {
+-      /* 00 */        -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, 
-2, -2,
+-      /* 10 */        -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, 
-2, -2,
+-      /* 20 */        -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, 
-2, -2,
+-      /* 30 */        -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, 
-2, -2,
+-      /* 40 */        -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, 
-2, -2,
+-      /* 50 */        -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, 
-2, -2,
+-      /* 60 */        -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, 
-2, -2,
+-      /* 70 */        -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, 
-2, -2,
+-      /* 80 */        -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, 
-2, -2,
+-      /* 90 */        -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, 
-2, -2,
+-      /* a0 */        -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, 
-2, -2,
+-      /* b0 */        -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, 
-2, -2,
+-      /* c0 */        -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, 
-2, -2,
+-      /* d0 */        -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, 
-2, -2,
+-      /* e0 */        -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, 
-2, -2,
+-      /* f0 */        -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, 
-2, -2,
++      /* 00 */        -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, 
-4, -4,
++      /* 10 */        -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, 
-4, -4,
++      /* 20 */        -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, 
-4, -4,
++      /* 30 */        -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, 
-4, -4,
++      /* 40 */        -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, 
-4, -4,
++      /* 50 */        -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, 
-4, -4,
++      /* 60 */        -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, 
-4, -4,
++      /* 70 */        -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, 
-4, -4,
++      /* 80 */        -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, 
-4, -4,
++      /* 90 */        -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, 
-4, -4,
++      /* a0 */        -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, 
-4, -4,
++      /* b0 */        -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, 
-4, -4,
++      /* c0 */        -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, 
-4, -4,
++      /* d0 */        -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, 
-4, -4,
++      /* e0 */        -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, 
-4, -4,
++      /* f0 */        -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, 
-4, -4,
+ };
+ 
+ 
+@@ -118,7 +118,7 @@ const TextEncoding::CharacterMap& UTF32E
+ int UTF32Encoding::convert(const unsigned char* bytes) const
+ {
+       UInt32 uc;
+-      unsigned char* p = (unsigned char*) &uc;
++      unsigned char* p = reinterpret_cast<unsigned char*>(&uc);
+       *p++ = *bytes++;
+       *p++ = *bytes++;
+       *p++ = *bytes++;
+@@ -129,7 +129,7 @@ int UTF32Encoding::convert(const unsigne
+               uc = ByteOrder::flipBytes(uc);
+       }
+ 
+-      return uc;
++      return safeToInt(uc);
+ }
+ 
+ 
+@@ -138,7 +138,7 @@ int UTF32Encoding::convert(int ch, unsig
+       if (bytes && length >= 4)
+       {
+               UInt32 ch1 = _flipBytes ? ByteOrder::flipBytes((UInt32) ch) : 
(UInt32) ch;
+-              unsigned char* p = (unsigned char*) &ch1;
++              unsigned char* p = reinterpret_cast<unsigned char*>(&ch1);
+               *bytes++ = *p++;
+               *bytes++ = *p++;
+               *bytes++ = *p++;
+@@ -155,7 +155,7 @@ int UTF32Encoding::queryConvert(const un
+       if (length >= 4)
+       {
+               UInt32 uc;
+-              unsigned char* p = (unsigned char*) &uc;
++              unsigned char* p = reinterpret_cast<unsigned char*>(&uc);
+               *p++ = *bytes++;
+               *p++ = *bytes++;
+               *p++ = *bytes++;
+@@ -164,7 +164,7 @@ int UTF32Encoding::queryConvert(const un
+               {
+                       uc = ByteOrder::flipBytes(uc);
+               }
+-              return uc;
++              ret = safeToInt(uc);
+       }
+ 
+       return ret;
diff -Nru poco-1.11.0/debian/patches/series poco-1.11.0/debian/patches/series
--- poco-1.11.0/debian/patches/series   2021-11-27 13:38:37.000000000 +0100
+++ poco-1.11.0/debian/patches/series   2024-12-21 14:27:51.000000000 +0100
@@ -8,3 +8,4 @@
 0011-Set-POCO_NO_FPENVIRONMENT-for-armel.patch
 0012-Disable-failing-tests.patch
 0010-fix-missing-expat-definition.patch
+CVE-2023-52389.patch

Reply via email to