diff --git a/cmake/BuildICU.cmake b/cmake/BuildICU.cmake
index 28bb6428f28edfef15c70827e3e4c431e6b5ce68..68b94861c452ae7cbb1d67d959aa40f8622a2f17 100644
--- a/cmake/BuildICU.cmake
+++ b/cmake/BuildICU.cmake
@@ -42,10 +42,6 @@ ExternalProject_Add(bundled-icu-project
         ${CMAKE_COMMAND} -E touch <BINARY_DIR>/uconfig.h &&
         cat <BINARY_DIR>/uconfig.h.prepend <INSTALL_DIR>/include/unicode/uconfig.h >> <BINARY_DIR>/uconfig.h &&
         ${CMAKE_COMMAND} -E copy_if_different <BINARY_DIR>/uconfig.h <INSTALL_DIR>/include/unicode/uconfig.h
-    PATCH_COMMAND patch -d <SOURCE_DIR> -p1 -i "${ICU_PATCHES_DIR}/icu-tarantool-security-45.patch"
-    COMMAND       patch -d <SOURCE_DIR> -p1 -i "${ICU_PATCHES_DIR}/icu-tarantool-security-59.patch"
-    COMMAND       patch -d <SOURCE_DIR> -p1 -i "${ICU_PATCHES_DIR}/icu-tarantool-security-61.patch"
-    COMMAND       patch -d <SOURCE_DIR> -p1 -i "${ICU_PATCHES_DIR}/icu-tarantool-security-96.patch"
     BUILD_BYPRODUCTS ${ICU_I18N_LIBRARY} ${ICU_UC_LIBRARY} ${ICU_DATA_LIBRARY}
     DOWNLOAD_EXTRACT_TIMESTAMP TRUE
 )
diff --git a/cmake/BuildReadline.cmake b/cmake/BuildReadline.cmake
index 70738b3e336e8233af417c3bd7116736bd8b684d..41c821e95493d500c470c4f300a9d0844d71e690 100644
--- a/cmake/BuildReadline.cmake
+++ b/cmake/BuildReadline.cmake
@@ -89,8 +89,6 @@ ExternalProject_Add(bundled-readline-project
 
         --prefix=<INSTALL_DIR>
         --disable-shared
-    PATCH_COMMAND patch -d <SOURCE_DIR> -p0 -i "${READLINE_PATCHES_DIR}/readline80-001.patch"
-    COMMAND       patch -d <SOURCE_DIR> -p1 -i "${READLINE_PATCHES_DIR}/readline-tarantool-security-95.patch"
     BUILD_BYPRODUCTS ${READLINE_LIBRARY}
     DOWNLOAD_EXTRACT_TIMESTAMP TRUE
 )
diff --git a/patches/icu-tarantool-security-45.patch b/patches/icu-tarantool-security-45.patch
deleted file mode 100644
index 6aa44a903475aa2f6cb14866520074d20d4452d5..0000000000000000000000000000000000000000
--- a/patches/icu-tarantool-security-45.patch
+++ /dev/null
@@ -1,13 +0,0 @@
-diff --git a/source/i18n/reldtfmt.cpp b/source/i18n/reldtfmt.cpp
-index 5fdef1c..7f65fcd 100644
---- a/source/i18n/reldtfmt.cpp
-+++ b/source/i18n/reldtfmt.cpp
-@@ -495,7 +495,7 @@ struct RelDateFmtDataSink : public ResourceSink {
- 
-         // Put in the proper spot, but don't override existing data.
-         n = offset + UDAT_DIRECTION_THIS; // Converts to index in UDAT_R
--        if (n < fDatesLen && fDatesPtr[n].string == NULL) {
-+        if (0 <= n && n < fDatesLen && fDatesPtr[n].string == NULL) {
-           // Not found and n is an empty slot.
-           fDatesPtr[n].offset = offset;
-           fDatesPtr[n].string = value.getString(len, errorCode);
diff --git a/patches/icu-tarantool-security-59.patch b/patches/icu-tarantool-security-59.patch
deleted file mode 100644
index f41ec006adb0847931e92c5a274cff459a897e7c..0000000000000000000000000000000000000000
--- a/patches/icu-tarantool-security-59.patch
+++ /dev/null
@@ -1,21 +0,0 @@
-diff --git a/source/common/utrie2.cpp b/source/common/utrie2.cpp
-index 24ef578..359952a 100644
---- a/source/common/utrie2.cpp
-+++ b/source/common/utrie2.cpp
-@@ -574,7 +574,15 @@ enumEitherTrie(const UTrie2 *trie,
-                     c+=UTRIE2_DATA_BLOCK_LENGTH;
-                 } else {
-                     for(j=0; j<UTRIE2_DATA_BLOCK_LENGTH; ++j) {
--                        value=enumValue(context, data32!=NULL ? data32[block+j] : idx[block+j]);
-+                        if (data32!=NULL) {
-+                            value=enumValue(context, data32[block+j]);
-+                        } else if (idx!=NULL) {
-+                            value=enumValue(context, idx[block+j]);
-+                        } else {
-+                            /* data32 and idx are not supposed to be NULL at the same time */
-+                            U_ASSERT(false);
-+                            return;
-+                        }
-                         if(value!=prevValue) {
-                             if(prev<c && !enumRange(context, prev, c-1, prevValue)) {
-                                 return;
diff --git a/patches/icu-tarantool-security-61.patch b/patches/icu-tarantool-security-61.patch
deleted file mode 100644
index d9fce1906d15d2526022b63314879a847078e7dd..0000000000000000000000000000000000000000
--- a/patches/icu-tarantool-security-61.patch
+++ /dev/null
@@ -1,15 +0,0 @@
-diff --git a/source/i18n/unum.cpp b/source/i18n/unum.cpp
-index 7043f7a..0f70c5c 100644
---- a/source/i18n/unum.cpp
-+++ b/source/i18n/unum.cpp
-@@ -164,7 +164,9 @@ unum_clone(const UNumberFormat *fmt,
-     } else {
-         const RuleBasedNumberFormat* rbnf = dynamic_cast<const RuleBasedNumberFormat*>(nf);
-         U_ASSERT(rbnf != NULL);
--        res = rbnf->clone();
-+        if (rbnf != NULL) {
-+            res = rbnf->clone();
-+        }
-     }
- 
-     if(res == 0) {
diff --git a/patches/icu-tarantool-security-96.patch b/patches/icu-tarantool-security-96.patch
deleted file mode 100644
index 748b50566cb4f35799d4dece2c3645972d527e83..0000000000000000000000000000000000000000
--- a/patches/icu-tarantool-security-96.patch
+++ /dev/null
@@ -1,26 +0,0 @@
-diff --git a/source/i18n/dangical.cpp b/source/i18n/dangical.cpp
-index 234c44b..f5343d0 100644
---- a/source/i18n/dangical.cpp
-+++ b/source/i18n/dangical.cpp
-@@ -136,7 +136,7 @@ static void U_CALLCONV initDangiCalZoneAstroCalc(UErrorCode &status) {
-     ucln_i18n_registerCleanup(UCLN_I18N_DANGI_CALENDAR, calendar_dangi_cleanup);
- }
- 
--const TimeZone* DangiCalendar::getDangiCalZoneAstroCalc(UErrorCode &status) const {
-+const TimeZone* DangiCalendar::getDangiCalZoneAstroCalc(UErrorCode &status) {
-     umtx_initOnce(gDangiCalendarInitOnce, &initDangiCalZoneAstroCalc, status);
-     return gDangiCalendarZoneAstroCalc;
- }
-diff --git a/source/i18n/dangical.h b/source/i18n/dangical.h
-index 128f3af..e240272 100644
---- a/source/i18n/dangical.h
-+++ b/source/i18n/dangical.h
-@@ -74,7 +74,7 @@ class DangiCalendar : public ChineseCalendar {
- 
-  private:
- 
--  const TimeZone* getDangiCalZoneAstroCalc(UErrorCode &status) const;
-+  static const TimeZone* getDangiCalZoneAstroCalc(UErrorCode &status);
- 
-   // UObject stuff
-  public: 
diff --git a/patches/readline-tarantool-security-95.patch b/patches/readline-tarantool-security-95.patch
deleted file mode 100644
index c4fa559815a95c0ea2d2391b0eed4fd0213572c2..0000000000000000000000000000000000000000
--- a/patches/readline-tarantool-security-95.patch
+++ /dev/null
@@ -1,18 +0,0 @@
---- readline.old/histfile.c	2023-02-17 13:01:18.515248292 +0300
-+++ readline/histfile.c	2023-02-17 13:02:42.034252562 +0300
-@@ -492,6 +492,7 @@
-   tempname = 0;
-   file = filename ? open (filename, O_RDONLY|O_BINARY, 0666) : -1;
-   rv = exists = 0;
-+  orig_lines = lines;
- 
-   /* Don't try to truncate non-regular files. */
-   if (file == -1 || fstat (file, &finfo) == -1)
-@@ -547,7 +548,6 @@
-       goto truncate_exit;
-     }
- 
--  orig_lines = lines;
-   /* Count backwards from the end of buffer until we have passed
-      LINES lines.  bp1 is set funny initially.  But since bp[1] can't
-      be a comment character (since it's off the end) and *bp can't be
diff --git a/patches/readline80-001.patch b/patches/readline80-001.patch
deleted file mode 100644
index aa72a9dfa72774b9ce53fa37f1c2f13fc4dd3709..0000000000000000000000000000000000000000
--- a/patches/readline80-001.patch
+++ /dev/null
@@ -1,38 +0,0 @@
-			   READLINE PATCH REPORT
-			   =====================
-
-Readline-Release: 8.0
-Patch-ID: readline80-001
-
-Bug-Reported-by:	chet.ramey@case.edu
-Bug-Reference-ID:
-Bug-Reference-URL:
-
-Bug-Description:
-
-The history file reading code doesn't close the file descriptor open to
-the history file when it encounters a zero-length file.
-
-Patch (apply with `patch -p0'):
-
-*** ../readline-8.0-patched/histfile.c	2018-06-11 09:14:52.000000000 -0400
---- histfile.c	2019-05-16 15:55:57.000000000 -0400
-***************
-*** 306,309 ****
---- 312,316 ----
-      {
-        free (input);
-+       close (file);
-        return 0;	/* don't waste time if we don't have to */
-      }
-*** ../readline-8.0/patchlevel	2013-11-15 08:11:11.000000000 -0500
---- patchlevel	2014-03-21 08:28:40.000000000 -0400
-***************
-*** 1,3 ****
-  # Do not edit -- exists only for use by patch
-  
-! 0
---- 1,3 ----
-  # Do not edit -- exists only for use by patch
-  
-! 1
diff --git a/vendor/icu4c-71_1/source/common/utrie2.cpp b/vendor/icu4c-71_1/source/common/utrie2.cpp
index 24ef5782c90565c7567dac81e3758256bbdceeb5..359952a571656f10b0f5d9ea6127ddf2882e445a 100644
--- a/vendor/icu4c-71_1/source/common/utrie2.cpp
+++ b/vendor/icu4c-71_1/source/common/utrie2.cpp
@@ -574,7 +574,15 @@ enumEitherTrie(const UTrie2 *trie,
                     c+=UTRIE2_DATA_BLOCK_LENGTH;
                 } else {
                     for(j=0; j<UTRIE2_DATA_BLOCK_LENGTH; ++j) {
-                        value=enumValue(context, data32!=NULL ? data32[block+j] : idx[block+j]);
+                        if (data32!=NULL) {
+                            value=enumValue(context, data32[block+j]);
+                        } else if (idx!=NULL) {
+                            value=enumValue(context, idx[block+j]);
+                        } else {
+                            /* data32 and idx are not supposed to be NULL at the same time */
+                            U_ASSERT(false);
+                            return;
+                        }
                         if(value!=prevValue) {
                             if(prev<c && !enumRange(context, prev, c-1, prevValue)) {
                                 return;
diff --git a/vendor/icu4c-71_1/source/i18n/dangical.cpp b/vendor/icu4c-71_1/source/i18n/dangical.cpp
index 57fe80220b9ab67f5ecdf71033b1a7e4907db4c8..51e1af25130595a0ad680e876835f6dad9cb2055 100644
--- a/vendor/icu4c-71_1/source/i18n/dangical.cpp
+++ b/vendor/icu4c-71_1/source/i18n/dangical.cpp
@@ -136,7 +136,7 @@ static void U_CALLCONV initDangiCalZoneAstroCalc(UErrorCode &status) {
     ucln_i18n_registerCleanup(UCLN_I18N_DANGI_CALENDAR, calendar_dangi_cleanup);
 }
 
-const TimeZone* DangiCalendar::getDangiCalZoneAstroCalc(UErrorCode &status) const {
+const TimeZone* DangiCalendar::getDangiCalZoneAstroCalc(UErrorCode &status) {
     umtx_initOnce(gDangiCalendarInitOnce, &initDangiCalZoneAstroCalc, status);
     return gDangiCalendarZoneAstroCalc;
 }
diff --git a/vendor/icu4c-71_1/source/i18n/dangical.h b/vendor/icu4c-71_1/source/i18n/dangical.h
index 9d0437264ef175bdaa6edcf1193344b7065e92db..642fa6caccda74bb193ceaefa81bd3967b772907 100644
--- a/vendor/icu4c-71_1/source/i18n/dangical.h
+++ b/vendor/icu4c-71_1/source/i18n/dangical.h
@@ -74,7 +74,7 @@ class DangiCalendar : public ChineseCalendar {
 
  private:
 
-  const TimeZone* getDangiCalZoneAstroCalc(UErrorCode &status) const;
+  static const TimeZone* getDangiCalZoneAstroCalc(UErrorCode &status);
 
   // UObject stuff
  public: 
diff --git a/vendor/icu4c-71_1/source/i18n/reldtfmt.cpp b/vendor/icu4c-71_1/source/i18n/reldtfmt.cpp
index 5fdef1c0d676d4339990f37f589e55dac7d65cf6..7f65fcddb3befc0fcb5b2f30d6aecd3759967608 100644
--- a/vendor/icu4c-71_1/source/i18n/reldtfmt.cpp
+++ b/vendor/icu4c-71_1/source/i18n/reldtfmt.cpp
@@ -495,7 +495,7 @@ struct RelDateFmtDataSink : public ResourceSink {
 
         // Put in the proper spot, but don't override existing data.
         n = offset + UDAT_DIRECTION_THIS; // Converts to index in UDAT_R
-        if (n < fDatesLen && fDatesPtr[n].string == NULL) {
+        if (0 <= n && n < fDatesLen && fDatesPtr[n].string == NULL) {
           // Not found and n is an empty slot.
           fDatesPtr[n].offset = offset;
           fDatesPtr[n].string = value.getString(len, errorCode);
diff --git a/vendor/icu4c-71_1/source/i18n/unum.cpp b/vendor/icu4c-71_1/source/i18n/unum.cpp
index 7043f7adc12308cd8a34c012a52e08800e69d128..0f70c5cc34a3aa2ed9ce061776a5d7896e5404bc 100644
--- a/vendor/icu4c-71_1/source/i18n/unum.cpp
+++ b/vendor/icu4c-71_1/source/i18n/unum.cpp
@@ -164,7 +164,9 @@ unum_clone(const UNumberFormat *fmt,
     } else {
         const RuleBasedNumberFormat* rbnf = dynamic_cast<const RuleBasedNumberFormat*>(nf);
         U_ASSERT(rbnf != NULL);
-        res = rbnf->clone();
+        if (rbnf != NULL) {
+            res = rbnf->clone();
+        }
     }
 
     if(res == 0) {
diff --git a/vendor/openssl-3.2.3/ssl/statem/extensions_clnt.c b/vendor/openssl-3.2.3/ssl/statem/extensions_clnt.c
index 5bce30b584f01ffe5cebc70945be9d1a433ca49a..7d6454310b8e4fafb35596005cdc04769e8935c6 100644
--- a/vendor/openssl-3.2.3/ssl/statem/extensions_clnt.c
+++ b/vendor/openssl-3.2.3/ssl/statem/extensions_clnt.c
@@ -286,6 +286,7 @@ EXT_RETURN tls_construct_ctos_session_ticket(SSL_CONNECTION *s, WPACKET *pkt,
         return EXT_RETURN_NOT_SENT;
 
     if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_session_ticket)
+            || !s->session
             || !WPACKET_sub_memcpy_u16(pkt, s->session->ext.tick, ticklen)) {
         SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
         return EXT_RETURN_FAIL;
diff --git a/vendor/readline-8.0/histfile.c b/vendor/readline-8.0/histfile.c
index dc64bde1c5acf8c117080eb7c783a2cd3181311d..cfd6273cd37b234d8df60f83314dd9cfae848a41 100644
--- a/vendor/readline-8.0/histfile.c
+++ b/vendor/readline-8.0/histfile.c
@@ -491,6 +491,7 @@ history_truncate_file (const char *fname, int lines)
   tempname = 0;
   file = filename ? open (filename, O_RDONLY|O_BINARY, 0666) : -1;
   rv = exists = 0;
+  orig_lines = lines;
 
   /* Don't try to truncate non-regular files. */
   if (file == -1 || fstat (file, &finfo) == -1)
@@ -546,7 +547,6 @@ history_truncate_file (const char *fname, int lines)
       goto truncate_exit;
     }
 
-  orig_lines = lines;
   /* Count backwards from the end of buffer until we have passed
      LINES lines.  bp1 is set funny initially.  But since bp[1] can't
      be a comment character (since it's off the end) and *bp can't be