diff --git a/src/common/DynamicStrings.cpp b/src/common/DynamicStrings.cpp index 72be2e07ae6..1e02df3e874 100644 --- a/src/common/DynamicStrings.cpp +++ b/src/common/DynamicStrings.cpp @@ -87,6 +87,8 @@ unsigned makeDynamicStrings(unsigned length, ISC_STATUS* const dst, const ISC_ST case isc_arg_cstring: fb_assert(string); *to++ = (ISC_STATUS)(IPTR) string; + if (!string) + break; memcpy(string, reinterpret_cast(from[1]), from[0]); string += *from++; *string++ = '\0'; @@ -97,6 +99,8 @@ unsigned makeDynamicStrings(unsigned length, ISC_STATUS* const dst, const ISC_ST case isc_arg_sql_state: fb_assert(string); *to++ = (ISC_STATUS)(IPTR) string; + if (!string) + break; strcpy(string, reinterpret_cast(*from)); string += strlen(string); string++; diff --git a/src/dsql/DdlNodes.epp b/src/dsql/DdlNodes.epp index 3af5163719b..584ab90fca2 100644 --- a/src/dsql/DdlNodes.epp +++ b/src/dsql/DdlNodes.epp @@ -345,7 +345,7 @@ void defineComputed(DsqlCompilerScratch* dsqlScratch, RelationSourceNode* relati // Save the size of the field if it is specified. dsc saveDesc; saveDesc.dsc_dtype = 0; - bool saveCharSetIdSpecified; + bool saveCharSetIdSpecified = false; if (field && field->dtype) { diff --git a/src/gpre/c_cxx.cpp b/src/gpre/c_cxx.cpp index e5a5025dddc..c3b10bf1e32 100644 --- a/src/gpre/c_cxx.cpp +++ b/src/gpre/c_cxx.cpp @@ -2668,6 +2668,8 @@ static void gen_put_segment( const act* action, int column) args.pat_ident1 = blob->blb_len_ident; args.pat_ident2 = blob->blb_buff_ident; args.pat_string1 = global_status_name; + args.pat_long1 = NULL; + args.pat_long2 = NULL; PATTERN_expand((USHORT) column, pattern1, &args); set_sqlcode(action, column); diff --git a/src/gpre/obj_cxx.cpp b/src/gpre/obj_cxx.cpp index b863f2cf3e6..aae53bdc94f 100644 --- a/src/gpre/obj_cxx.cpp +++ b/src/gpre/obj_cxx.cpp @@ -3368,7 +3368,8 @@ static void gen_t_start( const act* action, int column) if (trans->tra_db_count == 1) { - printa(column, "%s = %s->startTransaction(%s, %d, fb_tpb_%d);", + if (trans->tra_tpb) + printa(column, "%s = %s->startTransaction(%s, %d, fb_tpb_%d);", trans->tra_handle ? trans->tra_handle : gpreGlob.transaction_name, trans->tra_tpb->tpb_database->dbb_name->sym_string, vector, trans->tra_tpb->tpb_length, trans->tra_tpb->tpb_ident); diff --git a/src/gpre/pat.cpp b/src/gpre/pat.cpp index 817ae409765..e8b43e99adb 100644 --- a/src/gpre/pat.cpp +++ b/src/gpre/pat.cpp @@ -364,12 +364,14 @@ void PATTERN_expand( USHORT column, const TEXT* pattern, PAT* args) break; case L1: - long_value = args->pat_long1; + if (args && args->pat_long1) + long_value = args->pat_long1; long_flag = true; break; case L2: - long_value = args->pat_long2; + if (args && args->pat_long2) + long_value = args->pat_long2; long_flag = true; break; diff --git a/src/jrd/IntlManager.cpp b/src/jrd/IntlManager.cpp index 0c5a29048c6..716ec37941d 100644 --- a/src/jrd/IntlManager.cpp +++ b/src/jrd/IntlManager.cpp @@ -458,11 +458,11 @@ bool IntlManager::initialize() string configInfo; const ConfigFile::Parameter* module = ch->sub->findParameter("intl_module"); - const ConfigFile::Parameter* objModule; + const ConfigFile::Parameter* objModule = NULL; if (module && (objModule = configFile.findParameter("intl_module", module->value.c_str()))) { - if (!objModule->sub) + if (!objModule || !objModule->sub) fatal_exception::raiseFmt("Missing parameters for intl_module %s\n", module->value.c_str()); const ConfigFile::Parameter* fname = objModule->sub->findParameter("filename"); diff --git a/src/jrd/cvt2.cpp b/src/jrd/cvt2.cpp index 60be2939844..e61c5d8d07a 100644 --- a/src/jrd/cvt2.cpp +++ b/src/jrd/cvt2.cpp @@ -767,7 +767,7 @@ int CVT2_blob_compare(const dsc* arg1, const dsc* arg2, DecimalStatus decSt) * **************************************/ - SLONG l1, l2; + SLONG l1 = NULL, l2 = NULL; USHORT ttype2; int ret_val = 0; diff --git a/src/jrd/lck.cpp b/src/jrd/lck.cpp index 8a3baf6bf8d..89f30736a78 100644 --- a/src/jrd/lck.cpp +++ b/src/jrd/lck.cpp @@ -1049,6 +1049,9 @@ static Lock* hash_get_lock(Lock* lock, USHORT* hash_slot, Lock*** prior) // if no collisions found, we're done + if (!att->att_compatibility_table) + return NULL; + Lock* match = (*att->att_compatibility_table)[hash_value]; if (!match) return NULL; @@ -1333,6 +1336,9 @@ static USHORT internal_downgrade(thread_db* tdbb, CheckStatusWrapper* statusVect // if we can convert to that level, set all identical locks as having that level + if (!first || !first->lck_physical) + return NULL; + if (level < first->lck_physical) { if (dbb->lockManager()->convert(tdbb, statusVector, first->lck_id, level, LCK_NO_WAIT, diff --git a/src/jrd/replication/Applier.cpp b/src/jrd/replication/Applier.cpp index c9e9f39419a..6a47bba47bd 100644 --- a/src/jrd/replication/Applier.cpp +++ b/src/jrd/replication/Applier.cpp @@ -998,10 +998,12 @@ void Applier::storeBlob(thread_db* tdbb, TraNumber traNum, bid* blobId, fb_assert(blob->blb_flags & BLB_temporary); fb_assert(!(blob->blb_flags & BLB_closed)); - if (length) - blob->BLB_put_segment(tdbb, data, length); - else - blob->BLB_close(tdbb); + if (blob){ + if (length) + blob->BLB_put_segment(tdbb, data, length); + else + blob->BLB_close(tdbb); + } } void Applier::executeSql(thread_db* tdbb, diff --git a/src/remote/server/server.cpp b/src/remote/server/server.cpp index 6cea42401fa..c107d23b3c5 100644 --- a/src/remote/server/server.cpp +++ b/src/remote/server/server.cpp @@ -6129,10 +6129,10 @@ bool rem_port::sendInlineBlob(PACKET* sendL, Rtr* rtr, SQUAD blobId, ULONG maxSi if (status.getState() & IStatus::STATE_ERRORS) return false; - bool segmented; + bool segmented = false; ULONG num_segments; ULONG max_segment; - FB_UINT64 total_length; + FB_UINT64 total_length = 0u; ClumpletReader p(ClumpletReader::InfoResponse, info, sizeof(info)); for (; !p.isEof(); p.moveNext())