Как стать автором
Обновить

Комментарии 13

Да да, ожидал что тут просто лес будет. Но как было указано выше ребята видимо уже используют некоторый статический анализ.
не, видимо. остальные жуки гораздо веселее.
я хорошо помню, каких только крешей я не ловил на версии 0.8.
да и на 1.2 еще был тот еще.
ок, остальных, просто вылавливаемых современными методами статического анализа )
скорее всего проблемы были не в самом asterisk, а во-всяких библиотеках для sip, sccp, h.323 и прочего. Когда я занимался asterisk именно библиотеки (драйвера chan_* ) были источником проблем
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
Вот такое используют в 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); }
НЛО прилетело и опубликовало эту надпись здесь
Советую еще заглянуть сюда.
НЛО прилетело и опубликовало эту надпись здесь
Зарегистрируйтесь на Хабре, чтобы оставить комментарий