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/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/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..88a3a1d09e1 100644 --- a/src/jrd/replication/Applier.cpp +++ b/src/jrd/replication/Applier.cpp @@ -998,7 +998,7 @@ 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) + if (blob && length) blob->BLB_put_segment(tdbb, data, length); else blob->BLB_close(tdbb);