powered by simpleCommunicator - 2.0.35     © 2025 Programmizd 02
Форумы / SQLite [игнор отключен] [закрыт для гостей] / rand_s и win32 - падение базы
4 сообщений из 4, страница 1 из 1
rand_s и win32 - падение базы
    #39238788
Фотография PPA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет.
Кто хорошо разбирается в коде sqlite
и знает зачем sqlite при работе может понадобиться случайное число
у меня тут приложение у 4-х юзеров неизвестных упало по abort (Fatal Application Exit)
со странным стеком в момент запуска
у себя повторить под отладкой не могу.

https://drdump.com/DumpGroup.aspx?DumpGroupID=531264
https://drdump.com/DumpGroup.aspx?DumpGroupID=533631

flylinkdc!abort+0x38
flylinkdc!__acrt_RtlGenRandom+0x56
flylinkdc!rand_s+0x2c
flylinkdc!sqlite3_win32_mbcs_to_utf8+0x2e3c
flylinkdc!_Mtxunlock+0xc
flylinkdc!sqlite3_vfs_find+0x8d


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
static int winRandomness(sqlite3_vfs *pVfs, int nBuf, char *zBuf){
#if defined(SQLITE_TEST) || defined(SQLITE_OMIT_RANDOMNESS)
  UNUSED_PARAMETER(pVfs);
  memset(zBuf, 0, nBuf);
  return nBuf;
#else
  EntropyGatherer e;
  UNUSED_PARAMETER(pVfs);
  memset(zBuf, 0, nBuf);
#if defined(_MSC_VER) && _MSC_VER>=1400 && !SQLITE_OS_WINCE
  rand_s((unsigned int*)zBuf); /* rand_s() is not available with MinGW */
#endif /* defined(_MSC_VER) && _MSC_VER>=1400 */
  e.a = (unsigned char*)zBuf;
  e.na = nBuf;
  e.nXor = 0;
  e.i = 0;




Поставил на rand_s бреку - действительно туда заходит
и странно, что данный код включен только под виндой

зачем это используется в движке? я делаю простой insert:
insert into location_db.fly_p2pguard_ip (start_ip,stop_ip,note,type) values(?,?,?,?)

Стек другой и не падает

FlylinkDC_Debug_x64.exe!winRandomness(sqlite3_vfs * pVfs, int nBuf, char * zBuf) Line 42445 C
FlylinkDC_Debug_x64.exe!sqlite3OsRandomness(sqlite3_vfs * pVfs, int nByte, char * zBufOut) Line 19734 C
FlylinkDC_Debug_x64.exe!sqlite3_randomness(int N, void * pBuf) Line 26121 C
FlylinkDC_Debug_x64.exe!writeJournalHdr(Pager * pPager) Line 47320 C
FlylinkDC_Debug_x64.exe!pager_open_journal(Pager * pPager) Line 51487 C
FlylinkDC_Debug_x64.exe!pager_write(PgHdr * pPg) Line 51672 C
FlylinkDC_Debug_x64.exe!sqlite3PagerWrite(PgHdr * pPg) Line 51847 C
FlylinkDC_Debug_x64.exe!sqlite3BtreeDelete(BtCursor * pCur, unsigned char flags) Line 65928 C
FlylinkDC_Debug_x64.exe!sqlite3VdbeExec(Vdbe * p) Line 81718 C
FlylinkDC_Debug_x64.exe!sqlite3Step(Vdbe * p) Line 75139 C
FlylinkDC_Debug_x64.exe!sqlite3_step(sqlite3_stmt * pStmt) Line 75201 C
FlylinkDC_Debug_x64.exe!sqlite3x::sqlite3_reader::read() Line 61 C++
FlylinkDC_Debug_x64.exe!sqlite3x::sqlite3_command::executenonquery() Line 121 C++
> FlylinkDC_Debug_x64.exe!CFlylinkDBManager::save_p2p_guard(const std::vector<CFlyP2PGuardIP,std::allocator<CFlyP2PGuardIP> > & p_p2p_guard_ip, const std::basic_string<char,std::char_traits<char>,std::allocator<char> > & p_manual_marker, int p_type) Line 1747 C++
FlylinkDC_Debug_x64.exe!Util::loadP2PGuard() Line 505 C++

Падений в этом месте не много - всего 4 и все под Windows 7
может выкинуть этот вызов - раз он проблемный :-)

на гит-хабе нашел код

https://github.com/DinrusGroup/DinrusUcrtBased/blob/5ac78908caa4536c8e3a359744b204512e80af41/Binding/ucrt_src/internal/winapi_thunks.cpp#L719

но что такое try_get_SystemFunction036 неизвестно...



--
~PPA() {} //
...
Рейтинг: 0 / 0
rand_s и win32 - падение базы
    #39343748
Charles Weyland
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ещё актуально?
...
Рейтинг: 0 / 0
rand_s и win32 - падение базы
    #39343942
Фотография PPA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Charles Weyland,

Актуально.
в этом месте у меня и libtorrent падает на некоторых машинах
https://github.com/arvidn/libtorrent/issues/1262

Знаете как правильнее обойти?
в sqlite я просто пока убрал этот вызов.
...
Рейтинг: 0 / 0
rand_s и win32 - падение базы
    #39543428
Фотография PPA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
До разработчиков как то дошел этот баг.
стал вливать себе версию 3.21.0 - вылез конфликт
разработчики вырезали этот глючный кусок кода вообще!

#if defined(_MSC_VER) && _MSC_VER>=1400 && !SQLITE_OS_WINCE
rand_s((unsigned int*)zBuf); /* rand_s() is not available with MinGW */
#endif /* defined(_MSC_VER) && _MSC_VER>=1400 */

кто использует под виндой sqlite - обновляйтесь до 3.21.0!
ваши программы будут меньше падать 100% ;)
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / SQLite [игнор отключен] [закрыт для гостей] / rand_s и win32 - падение базы
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]