From fd6857cf8782d9daaa511a48c9fe9ccd705f4582 Mon Sep 17 00:00:00 2001 From: Andrey Date: Fri, 29 Aug 2025 11:58:46 +0300 Subject: [PATCH 01/17] fix: initializing a variable of type FB_UINT64 with a null value --- src/remote/client/interface.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/remote/client/interface.cpp b/src/remote/client/interface.cpp index 6c2d7b6067b..eb58847501d 100644 --- a/src/remote/client/interface.cpp +++ b/src/remote/client/interface.cpp @@ -2011,7 +2011,7 @@ unsigned char* Attachment::getLocalInfo(UCharBuffer& info, unsigned int buffer_l break; } - FB_UINT64 value; + FB_UINT64 value = 0; bool skip = false; switch (*item) From a6988a48d63e1c94571787f37905ed6de6f927ba Mon Sep 17 00:00:00 2001 From: Andrey Date: Fri, 29 Aug 2025 12:39:36 +0300 Subject: [PATCH 02/17] initializing a variable of type SINT64 with a null value --- src/jrd/os/posix/unix.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/jrd/os/posix/unix.cpp b/src/jrd/os/posix/unix.cpp index f92600461e5..1f096aeae7a 100644 --- a/src/jrd/os/posix/unix.cpp +++ b/src/jrd/os/posix/unix.cpp @@ -522,7 +522,7 @@ bool PIO_header(thread_db* tdbb, UCHAR* address, unsigned length) const auto dbb = tdbb->getDatabase(); unsigned i; - SINT64 bytes; + SINT64 bytes = 0; PageSpace* const pageSpace = dbb->dbb_page_manager.findPageSpace(DB_PAGE_SPACE); jrd_file* const file = pageSpace->file; From 4e97b5c562c89a6383ebd35d1bab101fce9c9bd4 Mon Sep 17 00:00:00 2001 From: Andrey Date: Mon, 1 Sep 2025 08:06:55 +0300 Subject: [PATCH 03/17] changed the .ebb file, but the warning didn't go away --- src/burp/restore.epp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/burp/restore.epp b/src/burp/restore.epp index 1aecf4f1cb0..12dfcd14fe1 100644 --- a/src/burp/restore.epp +++ b/src/burp/restore.epp @@ -1596,7 +1596,7 @@ bool get_acl(BurpGlobals* tdgbl, const TEXT* owner_nm, ISC_QUAD* blob_id, ISC_QU ULONG length = 0; UCHAR item; - USHORT max_segment; + USHORT max_segment = 0; ULONG num_segments; const UCHAR* p = blob_info; @@ -1837,7 +1837,7 @@ void get_array(BurpGlobals* tdgbl, burp_rel* relation, UCHAR* record_buffer) SLONG last_element_dim[MAX_DIMENSION]; if (return_length != slice_length) { - int upper, lower; + int upper = 0, lower = 0; // // Ugh! The full array wasn't returned and versions of gbak prior to // V3.2I don't explicitly signal this. We must recompute the top From 7ec3f4b5dd4da1bbd647fe297ab863c407fec641 Mon Sep 17 00:00:00 2001 From: Andrey Date: Mon, 1 Sep 2025 08:51:22 +0300 Subject: [PATCH 04/17] initializing a variable of type USHORT with a null value --- skipfile.txt | 14 ++++++++++++++ src/jrd/cvt2.cpp | 2 +- 2 files changed, 15 insertions(+), 1 deletion(-) create mode 100644 skipfile.txt diff --git a/skipfile.txt b/skipfile.txt new file mode 100644 index 00000000000..a8c92e6a5e0 --- /dev/null +++ b/skipfile.txt @@ -0,0 +1,14 @@ +- /*android*/ +- /*builds*/ +- /*doc*/ +- /*examples*/ +- /*extern*/ +- /*gen*/ +- /*m4*/ +- /*report_html*/ +- /*reports*/ ++ /*src*/ +- /*temp*/ +- /*vcpkg*/ +- /*vcpkg-custom*/ +- /*src/remote/client/interface.cpp*/ diff --git a/src/jrd/cvt2.cpp b/src/jrd/cvt2.cpp index 60be2939844..6a70b1f446c 100644 --- a/src/jrd/cvt2.cpp +++ b/src/jrd/cvt2.cpp @@ -974,7 +974,7 @@ USHORT CVT2_make_string2(const dsc* desc, USHORT to_interp, UCHAR** address, Mov **************************************/ UCHAR* from_buf; USHORT from_len; - USHORT from_interp; + USHORT from_interp = 0; fb_assert(desc != NULL); fb_assert(address != NULL); From a6db65e82c9da047f800f62657d2b0231a5742d1 Mon Sep 17 00:00:00 2001 From: Andrey Date: Mon, 1 Sep 2025 09:16:20 +0300 Subject: [PATCH 05/17] initializing a pointer of type SLONG* nullptr --- src/burp/restore.epp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/burp/restore.epp b/src/burp/restore.epp index 12dfcd14fe1..bc421315970 100644 --- a/src/burp/restore.epp +++ b/src/burp/restore.epp @@ -1771,7 +1771,7 @@ void get_array(BurpGlobals* tdgbl, burp_rel* relation, UCHAR* record_buffer) SLONG fld_ranges[2 * MAX_DIMENSION]; SLONG slice_length = 0; SLONG *range; - const SLONG* end_ranges; + const SLONG* end_ranges = nullptr; scan_attr_t scan_next_attr; skip_init(&scan_next_attr); att_type attribute; From 0fe320316cfaa63b0b9684fc9aa32d5fbe8c3e0e Mon Sep 17 00:00:00 2001 From: Andrey Date: Mon, 1 Sep 2025 09:21:31 +0300 Subject: [PATCH 06/17] initializing a pointer of type UCHAR* nullptr --- src/burp/restore.epp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/burp/restore.epp b/src/burp/restore.epp index bc421315970..1f1ddda5640 100644 --- a/src/burp/restore.epp +++ b/src/burp/restore.epp @@ -3369,7 +3369,7 @@ void get_data(BurpGlobals* tdgbl, burp_rel* relation, WriteRelationReq* req) } } - UCHAR* p; + UCHAR* p = nullptr; if (tdgbl->gbl_sw_transportable) { if (get(tdgbl) != att_xdr_length) From 533aab55b627fb713c080aa0a8c9141635c066c8 Mon Sep 17 00:00:00 2001 From: Andrey Date: Mon, 1 Sep 2025 09:39:27 +0300 Subject: [PATCH 07/17] initializing variables with zero and default value --- src/burp/restore.epp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/burp/restore.epp b/src/burp/restore.epp index 1f1ddda5640..4a02a4a4bf1 100644 --- a/src/burp/restore.epp +++ b/src/burp/restore.epp @@ -9066,7 +9066,7 @@ bool get_db_creator(BurpGlobals* tdgbl) att_type attribute; scan_attr_t scan_next_attr; TEXT usr[GDS_NAME_LEN]; - SSHORT uType; + SSHORT uType = 0; bool userSet, typeSet; userSet = typeSet = false; @@ -9389,7 +9389,7 @@ bool get_trigger_old (BurpGlobals* tdgbl, burp_rel* relation) * Get a trigger definition for a relation. * **************************************/ - enum trig_t type; + enum trig_t type = trig_pre_store; att_type attribute; TEXT name[GDS_NAME_LEN]; scan_attr_t scan_next_attr; From 64963c8be6a87da87db272de0d51f0762bdb0cae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=90=D0=BD=D0=B4=D1=80=D0=B5=D0=B9=20=D0=9D=D0=B8=D0=BA?= =?UTF-8?q?=D0=BE=D0=BB=D0=B0=D0=B5=D0=B2?= <117023363+3qupo@users.noreply.github.com> Date: Thu, 4 Sep 2025 14:22:59 +0300 Subject: [PATCH 08/17] Delete skipfile.txt --- skipfile.txt | 14 -------------- 1 file changed, 14 deletions(-) delete mode 100644 skipfile.txt diff --git a/skipfile.txt b/skipfile.txt deleted file mode 100644 index a8c92e6a5e0..00000000000 --- a/skipfile.txt +++ /dev/null @@ -1,14 +0,0 @@ -- /*android*/ -- /*builds*/ -- /*doc*/ -- /*examples*/ -- /*extern*/ -- /*gen*/ -- /*m4*/ -- /*report_html*/ -- /*reports*/ -+ /*src*/ -- /*temp*/ -- /*vcpkg*/ -- /*vcpkg-custom*/ -- /*src/remote/client/interface.cpp*/ From bfa093b37911d2e9939df78e3f754da5098a4928 Mon Sep 17 00:00:00 2001 From: Andrey Date: Sat, 13 Dec 2025 14:01:47 +0300 Subject: [PATCH 09/17] the default value for trig_t has been added and initialized --- src/burp/burp.h | 1 + src/burp/restore.epp | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/burp/burp.h b/src/burp/burp.h index d21317e0b18..3929ef325cc 100644 --- a/src/burp/burp.h +++ b/src/burp/burp.h @@ -707,6 +707,7 @@ enum att_type { // Trigger types enum trig_t { + trig_none = 0, trig_pre_store = 1, // default trig_pre_modify, // default trig_post_erase // default diff --git a/src/burp/restore.epp b/src/burp/restore.epp index 4a02a4a4bf1..bfa3c941ba6 100644 --- a/src/burp/restore.epp +++ b/src/burp/restore.epp @@ -9389,7 +9389,7 @@ bool get_trigger_old (BurpGlobals* tdgbl, burp_rel* relation) * Get a trigger definition for a relation. * **************************************/ - enum trig_t type = trig_pre_store; + enum trig_t type = trig_none; att_type attribute; TEXT name[GDS_NAME_LEN]; scan_attr_t scan_next_attr; From f335f7c0a35cdd003ae041da7f201b494526c321 Mon Sep 17 00:00:00 2001 From: Andrey Date: Sat, 13 Dec 2025 17:04:57 +0300 Subject: [PATCH 10/17] the default value is 0 as there will be a recalculation --- src/dsql/DdlNodes.epp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/dsql/DdlNodes.epp b/src/dsql/DdlNodes.epp index 3af5163719b..355e558e2bf 100644 --- a/src/dsql/DdlNodes.epp +++ b/src/dsql/DdlNodes.epp @@ -184,7 +184,8 @@ static void checkForeignKeyTempScope(thread_db* tdbb, jrd_tra* transaction, { AutoCacheRequest request(tdbb, drq_l_rel_info, DYN_REQUESTS); QualifiedName masterRelName; - rel_t masterType, childType; + rel_t masterType = rel_persistent; + rel_t childType = rel_persistent; FOR(REQUEST_HANDLE request TRANSACTION_HANDLE transaction) RLC_M IN RDB$RELATION_CONSTRAINTS CROSS From d84f8db2f563d00d01021a82981836f7f8bc67ec Mon Sep 17 00:00:00 2001 From: Andrei Date: Sun, 5 Apr 2026 10:26:07 +0300 Subject: [PATCH 11/17] fix: initialize max_segment to USHRT_MAX for safe default --- src/burp/restore.epp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/burp/restore.epp b/src/burp/restore.epp index 8c5dcd3948c..3f442295d67 100644 --- a/src/burp/restore.epp +++ b/src/burp/restore.epp @@ -31,6 +31,7 @@ #include #include #include +#include #ifdef HAVE_CTYPE_H #include #endif @@ -1608,7 +1609,7 @@ bool get_acl(BurpGlobals* tdgbl, const TEXT* owner_nm, ISC_QUAD* blob_id, ISC_QU ULONG length = 0; UCHAR item; - USHORT max_segment = 0; + USHORT max_segment = USHRT_MAX; ULONG num_segments; const UCHAR* p = blob_info; From a2e9f227e98cf3e7796598411b1dbc54898bbcf1 Mon Sep 17 00:00:00 2001 From: Andrei Date: Sun, 5 Apr 2026 10:33:06 +0300 Subject: [PATCH 12/17] fix: use fld_ranges as default for end_ranges initialization --- src/burp/restore.epp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/burp/restore.epp b/src/burp/restore.epp index 3f442295d67..b7ba1a2c8d6 100644 --- a/src/burp/restore.epp +++ b/src/burp/restore.epp @@ -1784,7 +1784,7 @@ void get_array(BurpGlobals* tdgbl, burp_rel* relation, UCHAR* record_buffer) SLONG fld_ranges[2 * MAX_DIMENSION]; SLONG slice_length = 0; SLONG *range; - const SLONG* end_ranges = nullptr; + const SLONG* end_ranges = fld_ranges; scan_attr_t scan_next_attr; skip_init(&scan_next_attr); att_type attribute; From cfcb213b2792916b0c4d90108374c530cef8bcbc Mon Sep 17 00:00:00 2001 From: Andrei Date: Sun, 5 Apr 2026 10:53:27 +0300 Subject: [PATCH 13/17] refactor: move upper/lower declarations outside loops to avoid reinitializing to zero each iteration --- src/burp/restore.epp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/burp/restore.epp b/src/burp/restore.epp index b7ba1a2c8d6..da4524651af 100644 --- a/src/burp/restore.epp +++ b/src/burp/restore.epp @@ -1852,7 +1852,6 @@ void get_array(BurpGlobals* tdgbl, burp_rel* relation, UCHAR* record_buffer) SLONG last_element_dim[MAX_DIMENSION]; if (return_length != slice_length) { - int upper = 0, lower = 0; // // Ugh! The full array wasn't returned and versions of gbak prior to // V3.2I don't explicitly signal this. We must recompute the top @@ -1975,6 +1974,8 @@ void get_array(BurpGlobals* tdgbl, burp_rel* relation, UCHAR* record_buffer) // dims were (1,2), we would just do a isc_put_slice(1..1, 1..2). // This is applied for any number of dimensions. // + + int upper = 0, lower = 0; for (range = field->fld_ranges, count = 0; range < end_ranges; range += 2, count++) { add_byte(blr, isc_sdl_do2); From f4c7ab2a46a159f3740c45eb0b3de98ce5a223a7 Mon Sep 17 00:00:00 2001 From: Andrei Date: Sun, 5 Apr 2026 11:01:02 +0300 Subject: [PATCH 14/17] fix: prevent undefined behavior by initializing usr, userSet and typeSet in get_db_creator --- src/burp/restore.epp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/burp/restore.epp b/src/burp/restore.epp index da4524651af..fa68cc935be 100644 --- a/src/burp/restore.epp +++ b/src/burp/restore.epp @@ -9098,9 +9098,10 @@ bool get_db_creator(BurpGlobals* tdgbl) **************************************/ att_type attribute; scan_attr_t scan_next_attr; - TEXT usr[GDS_NAME_LEN]; + TEXT usr[GDS_NAME_LEN] = {0}; SSHORT uType = 0; - bool userSet, typeSet; + bool userSet = false; + bool typeSet = false; userSet = typeSet = false; From 7f2329f79eb921d6a30c22bec1b608a155e72d04 Mon Sep 17 00:00:00 2001 From: Andrei Date: Sun, 5 Apr 2026 11:06:53 +0300 Subject: [PATCH 15/17] fix: add check that trigger type was assigned a meaningful value --- src/burp/restore.epp | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/burp/restore.epp b/src/burp/restore.epp index fa68cc935be..1e5a58f83e2 100644 --- a/src/burp/restore.epp +++ b/src/burp/restore.epp @@ -9429,6 +9429,7 @@ bool get_trigger_old (BurpGlobals* tdgbl, burp_rel* relation) att_type attribute; TEXT name[GDS_NAME_LEN]; scan_attr_t scan_next_attr; + bool type_found = false; STORE (REQUEST_HANDLE tdgbl->handles_get_trigger_old_req_handle1) X IN RDB$TRIGGERS @@ -9446,6 +9447,7 @@ bool get_trigger_old (BurpGlobals* tdgbl, burp_rel* relation) { case att_trig_type: type = (enum trig_t) get_int32(tdgbl); + type_found = true; break; case att_trig_blr: @@ -9470,6 +9472,12 @@ bool get_trigger_old (BurpGlobals* tdgbl, burp_rel* relation) } } + if(!type_found || type == trig_none) + { + BURP_error(136, true); + return false; + } + // fill in rest of attributes unique to new trigger format TEXT* p = X.RDB$TRIGGER_NAME; From 232b565ee77fc620f8afc6b44bb82a01ae116c0b Mon Sep 17 00:00:00 2001 From: Andrei Date: Sun, 5 Apr 2026 13:00:55 +0300 Subject: [PATCH 16/17] refactor: use proper TTypeId type for from_interp instead of generic USHORT with ttype_none as default --- src/jrd/cvt2.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/jrd/cvt2.cpp b/src/jrd/cvt2.cpp index bac5a02379a..94736deb039 100644 --- a/src/jrd/cvt2.cpp +++ b/src/jrd/cvt2.cpp @@ -973,7 +973,7 @@ USHORT CVT2_make_string2(const dsc* desc, TTypeId to_interp, UCHAR** address, Mo **************************************/ UCHAR* from_buf; USHORT from_len; - USHORT from_interp = 0; + TTypeId from_interp = ttype_none; fb_assert(desc != NULL); fb_assert(address != NULL); @@ -1004,7 +1004,7 @@ USHORT CVT2_make_string2(const dsc* desc, TTypeId to_interp, UCHAR** address, Mo if (desc->isText()) { - if (from_interp == to_interp || to_interp == ttype_none || to_interp == ttype_binary) + if (from_interp == ttype_none || from_interp == to_interp || to_interp == ttype_none || to_interp == ttype_binary) { *address = from_buf; return from_len; From d3d095217948da037cc16c862d6475e4231ef8fc Mon Sep 17 00:00:00 2001 From: Andrei Date: Sun, 5 Apr 2026 13:13:45 +0300 Subject: [PATCH 17/17] revert: remove redundant type_found check as trig_none is caught by switch default --- src/burp/restore.epp | 8 -------- 1 file changed, 8 deletions(-) diff --git a/src/burp/restore.epp b/src/burp/restore.epp index 1e5a58f83e2..fa68cc935be 100644 --- a/src/burp/restore.epp +++ b/src/burp/restore.epp @@ -9429,7 +9429,6 @@ bool get_trigger_old (BurpGlobals* tdgbl, burp_rel* relation) att_type attribute; TEXT name[GDS_NAME_LEN]; scan_attr_t scan_next_attr; - bool type_found = false; STORE (REQUEST_HANDLE tdgbl->handles_get_trigger_old_req_handle1) X IN RDB$TRIGGERS @@ -9447,7 +9446,6 @@ bool get_trigger_old (BurpGlobals* tdgbl, burp_rel* relation) { case att_trig_type: type = (enum trig_t) get_int32(tdgbl); - type_found = true; break; case att_trig_blr: @@ -9472,12 +9470,6 @@ bool get_trigger_old (BurpGlobals* tdgbl, burp_rel* relation) } } - if(!type_found || type == trig_none) - { - BURP_error(136, true); - return false; - } - // fill in rest of attributes unique to new trigger format TEXT* p = X.RDB$TRIGGER_NAME;