Comments 13
Так мало?
+1
Да да, ожидал что тут просто лес будет. Но как было указано выше ребята видимо уже используют некоторый статический анализ.
0
Видимо остальных жуков выловил Сoverity. В начале статьи есть отсылка.
+1
не, видимо. остальные жуки гораздо веселее.
я хорошо помню, каких только крешей я не ловил на версии 0.8.
да и на 1.2 еще был тот еще.
я хорошо помню, каких только крешей я не ловил на версии 0.8.
да и на 1.2 еще был тот еще.
0
UFO just landed and posted this here
Вот такое используют в libsodium:
Чтобы не заморачиваться, кроссплатформенный способ(часть того что выше):
Еще один я где-то тут уже предлагал(но не факт что будет работать везде):
#ifdef HAVE_WEAK_SYMBOLS
__attribute__((weak)) void
__sodium_dummy_symbol_to_prevent_lto(void * const pnt, const size_t len) { }
#endif
void
sodium_memzero(void * const pnt, const size_t len)
{
#ifdef HAVE_SECUREZEROMEMORY
SecureZeroMemory(pnt, len);
#elif defined(HAVE_MEMSET_S)
if (memset_s(pnt, (rsize_t) len, 0, (rsize_t) len) != 0) {
abort();
}
#elif defined(HAVE_EXPLICIT_BZERO)
explicit_bzero(pnt, len);
#elif HAVE_WEAK_SYMBOLS
memset(pnt, 0, len);
__sodium_dummy_symbol_to_prevent_lto(pnt, len);
#else
volatile unsigned char *pnt_ = (volatile unsigned char *) pnt;
size_t i = (size_t) 0U;
while (i < len) {
pnt_[i++] = 0U;
}
#endif
}
Чтобы не заморачиваться, кроссплатформенный способ(часть того что выше):
void memzero(void * const pnt, const size_t len) {
volatile unsigned char *pnt_ = (volatile unsigned char *) pnt;
size_t i = (size_t) 0U;
while (i < len) {
pnt_[i++] = 0U;
}
}
Еще один я где-то тут уже предлагал(но не факт что будет работать везде):
void * (*volatile vol_memset)(void *, int, size_t) = memset;
void safe_memclear(void *mem, size_t len) { vol_memset(mem, 0, len); }
+2
Статья о проверке FreeSWITCH: Алло! Это FreeSWITCH? Тогда мы проверим вас!
+1
Sign up to leave a comment.
Asterisk: PVS-Studio заинтересовался телефонией