Anforderungen  |   Konzepte  |   Entwurf  |   Entwicklung  |   Qualitätssicherung  |   Lebenszyklus  |   Steuerung
 
 
 
 


Quelle  ubsan.patch   Sprache: unbekannt

 
--- configure
+++ configure
@@ -21506,7 +21468,7 @@
     char a;
     union { long long x; sem_t y; } b;
   };
-  exit((int)&((struct s*)0)->b);
+  exit((int)&((struct s*)1024)->b - 1024);
 }
 _ACEOF
 if ac_fn_c_try_run "$LINENO"; then :
@@ -21541,7 +21503,7 @@
     char a;
     double b;
   };
-  exit((int)&((struct s*)0)->b);
+  exit((int)&((struct s*)1024)->b - 1024);
 }
 _ACEOF
 if ac_fn_c_try_run "$LINENO"; then :
--- src/common/classes/array.h
+++ src/common/classes/array.h
@@ -149,7 +149,7 @@
  void copyFrom(const Array<T, Storage>& source)
  {
   ensureCapacity(source.count, false);
-  memcpy(data, source.data, sizeof(T) * source.count);
+  if (source.count != 0) memcpy(data, source.data, sizeof(T) * source.count);
   count = source.count;
  }
 
@@ -227,7 +227,7 @@
   fb_assert(count <= FB_MAX_SIZEOF - itemsCount);
   ensureCapacity(count + itemsCount);
   memmove(data + index + itemsCount, data + index, sizeof(T) * (count - index));
-  memcpy(data + index, items, sizeof(T) * itemsCount);
+  if (itemsCount != 0) memcpy(data + index, items, sizeof(T) * itemsCount);
   count += itemsCount;
  }
 
@@ -242,7 +242,7 @@
  {
   fb_assert(count <= FB_MAX_SIZEOF - itemsCount);
   ensureCapacity(count + itemsCount);
-  memcpy(data + count, items, sizeof(T) * itemsCount);
+  if (itemsCount != 0) memcpy(data + count, items, sizeof(T) * itemsCount);
   count += itemsCount;
  }
 
@@ -294,7 +294,7 @@
  {
   fb_assert(newCount >= count);
   ensureCapacity(newCount);
-  memset(data + count, 0, sizeof(T) * (newCount - count));
+  if (newCount != count) memset(data + count, 0, sizeof(T) * (newCount - count));
   count = newCount;
  }
 
@@ -328,7 +328,7 @@
  {
   fb_assert(count <= FB_MAX_SIZEOF - L.count);
   ensureCapacity(count + L.count);
-  memcpy(data + count, L.data, sizeof(T) * L.count);
+  if (L.count != 0) memcpy(data + count, L.data, sizeof(T) * L.count);
   count += L.count;
  }
 
@@ -462,7 +462,7 @@
 
    T* newdata = static_cast<T*>
     (this->getPool().allocate(sizeof(T) * newcapacity ALLOC_ARGS));
-   if (preserve)
+   if (preserve && count != 0)
     memcpy(newdata, data, sizeof(T) * count);
    freeData();
    data = newdata;
--- src/common/classes/fb_string.h
+++ src/common/classes/fb_string.h
@@ -674,7 +674,8 @@
   }
   StringType& assign(const void* s, size_type n)
   {
-   memcpy(baseAssign(n), s, n);
+   auto const p = baseAssign(n);
+   if (n != 0) memcpy(p, s, n);
    return *this;
   }
   StringType& assign(const_pointer s)
--- src/common/common.h
+++ src/common/common.h
@@ -1002,6 +1002,5 @@
 }
 
 #undef UCHAR_TYPE
-#define UCHAR_TYPE uint16_t
 
 #endif /* COMMON_COMMON_H */
--- src/common/unicode_util.cpp
+++ src/common/unicode_util.cpp
@@ -187,7 +187,7 @@
  Mutex ciAiTransCacheMutex;
  Array<UTransliterator*> ciAiTransCache;
 
- void (U_EXPORT2 *uVersionToString)(UVersionInfo versionArray, char* versionString);
+ void (U_EXPORT2 *uVersionToString)(UVersionInfo const versionArray, char* versionString);
 
  int32_t (U_EXPORT2 *ulocCountAvailable)();
  const char* (U_EXPORT2 *ulocGetAvailable)(int32_t n);
--- src/dsql/StmtNodes.cpp
+++ src/dsql/StmtNodes.cpp
@@ -6643,7 +6643,7 @@
 
 void StoreNode::genBlr(DsqlCompilerScratch* dsqlScratch)
 {
- const dsql_msg* message = dsqlGenDmlHeader(dsqlScratch, dsqlRse->as<RseNode>());
+ const dsql_msg* message = dsqlGenDmlHeader(dsqlScratch, dsqlRse == nullptr ? nullptr : dsqlRse->as<RseNode>());
 
  dsqlScratch->appendUChar(statement2 ? blr_store2 : blr_store);
  GEN_expr(dsqlScratch, dsqlRelation);
--- src/gpre/hsh.cpp
+++ src/gpre/hsh.cpp
@@ -232,7 +232,7 @@
 {
  SCHAR c;
 
- SLONG value = 0;
+ ULONG value = 0;
 
  while (c = *string++)
   value = (value << 1) + UPPER(c);
--- src/jrd/GlobalRWLock.cpp
+++ src/jrd/GlobalRWLock.cpp
@@ -78,7 +78,7 @@
 
  cachedLock = FB_NEW_RPT(getPool(), lockLen)
   Lock(tdbb, lockLen, lckType, this, lockCaching ? blocking_ast_cached_lock : NULL);
- memcpy(cachedLock->getKeyString(), lockStr, lockLen);
+ if (lockLen != 0) memcpy(cachedLock->getKeyString(), lockStr, lockLen);
 }
 
 GlobalRWLock::~GlobalRWLock()
--- src/jrd/Optimizer.cpp
+++ src/jrd/Optimizer.cpp
@@ -368,7 +368,7 @@
 
  // Allocate needed indexScratches
 
- index_desc* idx = csb_tail->csb_idx->items;
+ index_desc* idx = csb_tail->csb_idx == nullptr ? nullptr : csb_tail->csb_idx->items;
  for (int i = 0; i < csb_tail->csb_indices; ++i, ++idx)
   indexScratches.add(IndexScratch(p, tdbb, idx, csb_tail));
 }
--- src/jrd/blb.cpp
+++ src/jrd/blb.cpp
@@ -1786,7 +1786,7 @@
  arg.slice_base = array->arr_data;
 
  SLONG variables[64];
- memcpy(variables, param, MIN(sizeof(variables), param_length));
+ if (param_length != 0) memcpy(variables, param, MIN(sizeof(variables), param_length));
 
  if (SDL_walk(tdbb->tdbb_status_vector, sdl, array->arr_data, &array_desc->arr_desc,
      variables, slice_callback, &arg))
--- src/jrd/btn.cpp
+++ src/jrd/btn.cpp
@@ -387,7 +387,7 @@
 
  put_short(pagePointer, offset);
  pagePointer += sizeof(USHORT);
- memmove(pagePointer, data, length);
+ if (length != 0) memmove(pagePointer, data, length);
  pagePointer += length;
  return pagePointer;
 }
@@ -622,7 +622,7 @@
  }
 
  // Store data
- if (withData) {
+ if (withData && length != 0) {
   memcpy(pagePointer, data, length);
  }
  pagePointer += length;
--- src/jrd/btr.cpp
+++ src/jrd/btr.cpp
@@ -5206,7 +5206,7 @@
    // Push node on end in list
    jumpNodes->add(jumpNode);
    // Store new data in jumpKey, so a new jump node can calculate prefix
-   memcpy(jumpData + jumpNode.prefix, jumpNode.data, jumpNode.length);
+   if (jumpNode.length != 0) memcpy(jumpData + jumpNode.prefix, jumpNode.data, jumpNode.length);
    jumpLength = jumpNode.length + jumpNode.prefix;
 
    // Check if this could be our split point (if we need to split)
@@ -5391,7 +5391,7 @@
  // First, store needed data for beforeInsertNode into tempData.
  HalfStaticArray<UCHAR, MAX_KEY> tempBuf;
  UCHAR* tempData = tempBuf.getBuffer(newLength);
- memcpy(tempData, beforeInsertNode.data + newPrefix - beforeInsertNode.prefix, newLength);
+ if (newLength != 0) memcpy(tempData, beforeInsertNode.data + newPrefix - beforeInsertNode.prefix, newLength);
 
  beforeInsertNode.prefix = newPrefix;
  beforeInsertNode.length = newLength;
@@ -5611,7 +5611,7 @@
    for (size_t i = 0; i < jumpNodes->getCount(); i++, index++)
    {
     UCHAR* q = new_key->key_data + walkJumpNode[i].prefix;
-    memcpy(q, walkJumpNode[i].data, walkJumpNode[i].length);
+    if (walkJumpNode[i].length != 0) memcpy(q, walkJumpNode[i].data, walkJumpNode[i].length);
     if (index == splitJumpNodeIndex)
     {
      jn = &walkJumpNode[i];
@@ -5636,7 +5636,7 @@
      const USHORT length = walkJumpNode[i].prefix + walkJumpNode[i].length;
      UCHAR* newData = FB_NEW_POOL(*tdbb->getDefaultPool()) UCHAR[length];
      memcpy(newData, new_key->key_data, walkJumpNode[i].prefix);
-     memcpy(newData + walkJumpNode[i].prefix, walkJumpNode[i].data,
+     if (walkJumpNode[i].length != 0) memcpy(newData + walkJumpNode[i].prefix, walkJumpNode[i].data,
       walkJumpNode[i].length);
      delete[] walkJumpNode[i].data;
      walkJumpNode[i].prefix = 0;
--- src/jrd/evl.cpp
+++ src/jrd/evl.cpp
@@ -415,7 +415,7 @@
  case dtype_real:
  case dtype_sql_time:
  case dtype_sql_date:
-  value->vlu_misc.vlu_long = *((SLONG*) from.dsc_address);
+  memcpy(&value->vlu_misc.vlu_long, from.dsc_address, sizeof (SLONG));
   return;
 
  case dtype_int64:
--- src/jrd/lck.cpp
+++ src/jrd/lck.cpp
@@ -488,7 +488,7 @@
   break;
  }
 
- dbb->dbb_lock_mgr->shutdownOwner(tdbb, owner_handle_ptr);
+ LockManager::shutdownOwner(dbb->dbb_lock_mgr, tdbb, owner_handle_ptr);
 }
 
 
--- src/lock/lock.cpp
+++ src/lock/lock.cpp
@@ -441,7 +441,7 @@
 }
 
 
-void LockManager::shutdownOwner(thread_db* tdbb, SRQ_PTR* owner_handle)
+void LockManager::shutdownOwner(LockManager* This, thread_db* tdbb, SRQ_PTR* owner_handle)
 {
 /**************************************
  *
@@ -460,8 +460,9 @@
  if (!owner_offset)
   return;
 
- LockTableGuard guard(this, FB_FUNCTION, owner_offset);
+ LockTableGuard guard(This, FB_FUNCTION, owner_offset);
 
+#define SRQ_BASE                    ((UCHAR*) This->m_sharedMemory->getHeader())
  own* owner = (own*) SRQ_ABS_PTR(owner_offset);
  if (!owner->own_count)
   return;
@@ -472,7 +473,7 @@
  while (owner->own_ast_count)
  {
   { // checkout scope
-   LockTableCheckout checkout(this, FB_FUNCTION);
+   LockTableCheckout checkout(This, FB_FUNCTION);
    EngineCheckout cout(tdbb, FB_FUNCTION, true);
    Thread::sleep(10);
   }
@@ -484,8 +485,9 @@
  // released before destroying the lock owner. This is not strictly required,
  // but it enforces the proper object lifetime discipline through the codebase.
  fb_assert(SRQ_EMPTY(owner->own_requests));
+#define SRQ_BASE                    ((UCHAR*) m_sharedMemory->getHeader())
 
- purge_owner(owner_offset, owner);
+ This->purge_owner(owner_offset, owner);
 
  *owner_handle = 0;
 }
--- src/lock/lock_proto.h
+++ src/lock/lock_proto.h
@@ -402,7 +402,7 @@
  static void destroy(LockManager*);
 
  bool initializeOwner(Firebird::CheckStatusWrapper*, LOCK_OWNER_T, UCHAR, SRQ_PTR*);
- void shutdownOwner(thread_db*, SRQ_PTR*);
+ static void shutdownOwner(LockManager* This, thread_db*, SRQ_PTR*);
 
  SRQ_PTR enqueue(thread_db*, Firebird::CheckStatusWrapper*, SRQ_PTR, const USHORT,
   const UCHAR*, const USHORT, UCHAR, lock_ast_t, void*, SINT64, SSHORT, SRQ_PTR);
--- src/yvalve/gds.cpp
+++ src/yvalve/gds.cpp
@@ -2561,7 +2561,7 @@
   value += ((SLONG) *ptr++) << shift;
   shift += 8;
  }
- value += ((SLONG)(SCHAR) *ptr) << shift;
+ value += ((ULONG)(SCHAR) *ptr) << shift;
 
  return value;
 }

[ Dauer der Verarbeitung: 0.28 Sekunden  (vorverarbeitet)  ]

                                                                                                                                                                                                                                                                                                                                                                                                     


Neuigkeiten

     Aktuelles
     Motto des Tages

Software

     Produkte
     Quellcodebibliothek

Aktivitäten

     Artikel über Sicherheit
     Anleitung zur Aktivierung von SSL

Muße

     Gedichte
     Musik
     Bilder

Jenseits des Üblichen ....
    

Besucherstatistik

Besucherstatistik

Monitoring

Montastic status badge