Войти
ФлеймФорумПрограммирование

Летопись багов (13 стр)

Страницы: 19 10 11 12 13 14 Следующая »
#180
10:12, 16 мар. 2019

romanshuvalov
> в одном из мест была написана как "и" (0x438) + спецсимвол, рисующий завитушку
> (0x306)
Кто-то поиздеваться решил?


#181
10:37, 16 мар. 2019

Да, согласно, http://www.unicode.org/charts/beta/nameslist/n_0400.html у Й есть декомпозиция.
Соответственно U+0419 и U+0418 U+0306 нужно сравнивать как равные, с т. з. https://en.wikipedia.org/wiki/Unicode_equivalence .
Гм.

#182
11:14, 16 мар. 2019

Vlad2001_MFS
> Кто-то поиздеваться решил?
Нет, строка копировалась из разного софта. Сейчас уже трудно сказать, в какой момент родился такой символ.

#183
(Правка: 18:10) 18:08, 2 апр. 2019

Попался такой интересный (да и глупый) баг.

Приложение генерирует некий файл.
Есть требование чтобы имя файла было уникально, для конвретного инстанса приложения. (по сути временный файл).
По-этому имя файла генерировалось по функции GetTickCount()

В коде так же предусмотрен режим защити от сбоя.
Т.е. если приложение не закрылось успешно, то при следующем запуске такой временный файл (или файлы) будут собиратся и каким-то образом обрабатываться.

Но: внезапно произошёл сбой. Файл с именем:  2154343230.tmp
не прочитался, с мотивировкой: "файл 2147483647.tmp не существует"

вскрытие показало, что поведение atoi() соответствет документации:

If the converted value would be out of the range of representable values by an int, it causes undefined behavior.

(для генерации имён файлов использовался DWORD, а "чтение" имён файлов использвало "int". Почему имена файлов нужно конвертирать в int и обратно, связано с тем, что список файлов используется где-то ещё как "uint".)

а вообще uptime системы вызывает гордость!

#184
18:39, 2 апр. 2019

skalogryz
> имя файла было уникально
> GetTickCount()
А если два файла будут созданы в одну миллисекунду - не видать нам уникальности?
Чтобы не было таких проблем, аж в стандартную библиотеку добавили функцию tmpnam.

#185
(Правка: 18:56) 18:56, 2 апр. 2019

Panzerschrek[CN]
> А если два файла будут созданы в одну миллисекунду
эт врят ли... процесс такой, что файлы создаются в лучшем случае раз в 30 секунд.
и это не ограничение по софту, это физическое ограничение железом и мясом!

#186
13:07, 3 апр. 2019

Panzerschrek[CN]
> ж в стандартную библиотеку добавили функцию tmpnam.

Returns a string containing a file name different from the name of any existing file, and thus suitable to safely create a temporary file without risking to overwrite an existing file.
>char * tmpnam ( char * str );
Лол. Даже стандартная крестовая библиотека и документация вызывают ощущение, что ее проектировал какой-то тупой студент, вчера узнавший про программирование.

Не дает твоя функция сильно больше гарантий, чем GetTickCount(). Конкретно вот это - "without risking to overwrite an existing file" - вранье.

#187
13:25, 3 апр. 2019

9К720

Не кресты а сишка.
И не сишка, а ранний posix, так половина апи была через жопу задизайнена.

https://linux.die.net/man/3/tmpnam

Bugs
Never use this function

#188
13:33, 3 апр. 2019
Вот еще перл
http://pubs.opengroup.org/onlinepubs/007904875/functions/hcreate.html

больше одной хеш таблицы на приложение не выдаем

#189
13:44, 3 апр. 2019

9К720
> Не дает твоя функция сильно больше гарантий, чем GetTickCount()
не знаю как они делают, но по-моему не проблема выдать случайное имя подлиннее, чтоб время до первого совпадения оказалось длиннее срока жизни вселенной.

#190
14:15, 3 апр. 2019

После каждой перезагрузки системы счётчик сбрасывается и GetTickCount() снова начинает выдавать те значения, которые уже выдавал. Числа не будут уникальными.

#191
(Правка: 14:56) 14:55, 3 апр. 2019

kipar
> о по-моему не проблема выдать случайное имя
Изображение

> совпадения оказалось длиннее срока жизни вселенной.
Там написано "without risking to overwrite an existing file". Обрати внимание. "визаут рискинг". Это не "оддс оф оверрайтинг инфинители смолл". С gettickcount и то побольше уверенности

+ Показать
#192
20:20, 4 апр. 2019

9К720

> оддс оф оверрайтинг инфинители смолл
Если говорить не про атомарность, а про вероятности, то tmpnam в отдельно взятой реализации вполне может генерить какой-нибудь UUID (из /dev/urandom, например). И это как раз и будет «инфинители смолл».

#193
(Правка: 0:36) 0:33, 14 апр. 2019

Было:

store4i(ix[j],tri.ix+I);
store4i(iy[j],tri.iy+I);
Стало:
store4i(ix[j],tri.ix[j]+I);
store4i(iy[j],tri.iy[j]+I);
Структура содержит si32 ix[3][N],iy[3][N];.
Функция объявлена как void store4i(simd4i value,void *p). Ну и void* пофиг, принимать указатель на int32_t или на массив. Cоответственно - компилятор не ругается, даже ворнингом.
Больше часа.

#194
10:20, 14 апр. 2019

FordPerfect
> Ну и void* пофиг, принимать указатель на int32_t или на массив
> Cоответственно - компилятор не ругается, даже ворнингом.
а если заменить одну функцию с void* на несколько по соответствующим типам? (естественно, они просто вызовут с void*, но она будет скрыта )

Страницы: 19 10 11 12 13 14 Следующая »
ФлеймФорумПрограммирование