Size: a a a

2020 April 24

VO

Vyacheslav Olkhovchenkov in pro.cxx
а ты сделай её известной.
источник

ЮП

Юрий Першин in pro.cxx
Vyacheslav Olkhovchenkov
а ты сделай её известной.
в этом и проблема - проект не маленький, но точно известно, что  по положительным веткам sscanf не следует лезть далеко - в примере это показано при помощи скобки
источник

VO

Vyacheslav Olkhovchenkov in pro.cxx
чего?
источник

ЮП

Юрий Першин in pro.cxx
но вообще идея хорошая - убрать strlen совсем, поставить взамен огромное число
источник

VO

Vyacheslav Olkhovchenkov in pro.cxx
тебе не надо огромное число. тебе нужен конец буфера.
источник

ЮП

Юрий Першин in pro.cxx
Vyacheslav Olkhovchenkov
тебе не надо огромное число. тебе нужен конец буфера.
а у меня её (длины) пока что нет, и в большом проекте взять (до рефакторинга) негде
источник

VO

Vyacheslav Olkhovchenkov in pro.cxx
это очень плохо и ты пытаешься менять шило на мыло.
источник

VO

Vyacheslav Olkhovchenkov in pro.cxx
на самом деле добавить его не сложно
источник

ЮП

Юрий Першин in pro.cxx
Vyacheslav Olkhovchenkov
это очень плохо и ты пытаешься менять шило на мыло.
это только для прогона AppVerifier нужно, не для работы потом
источник

ЮП

Юрий Першин in pro.cxx
Vyacheslav Olkhovchenkov
на самом деле добавить его не сложно
полмиллиона строк, каждая сотая - sscanf, буферы разные и с разным offset
источник

v

vehlwn in pro.cxx
Artöm Bakri Al-Sarmini
> or
Or включающий или исключающий?
источник

AB

Artöm Bakri Al-Sarmini in pro.cxx
Включающий
источник

AB

Artöm Bakri Al-Sarmini in pro.cxx
Не то написал. 0, nullptr и нулевой указатель не обязаны быть равны друг другу побитово
источник

AB

Artöm Bakri Al-Sarmini in pro.cxx
К nullptr вроде и нет требований по представлению
источник

v

vehlwn in pro.cxx
Artöm Bakri Al-Sarmini
К nullptr вроде и нет требований по представлению
Да. Там написано, что это отдельный тип, ни указатель, ни указатель на член.
источник

ЮП

Юрий Першин in pro.cxx
Vyacheslav Olkhovchenkov
int
vsscanf_l(const char * __restrict str, locale_t locale,
               const char * __restrict fmt, __va_list ap)
{
       FILE f = FAKE_FILE;
       FIX_LOCALE(locale);

       f._flags = __SRD;
       f._bf._base = f._p = (unsigned char *)str;
       f._bf._size = f._r = strlen(str);
       f._read = eofread;
       return (__svfscanf(&f, locale, fmt, ap));
}
Вот так это выглядит в моем тесте для msvc. И AppVerifier фиксирует обращение к буферу в диапазоне несуществующего 16..64 символа. Но идея была хороша...
int sscanf_my(char const* const _Buffer, _In_z_ _Scanf_s_format_string_ char const* const _Format, ...) {
   va_list va;
   va_start(va, _Format);
   int ret = __stdio_common_vsscanf(_CRT_INTERNAL_LOCAL_SCANF_OPTIONS | _CRT_INTERNAL_SCANF_SECURECRT,
       _Buffer, 64, _Format, _get_current_locale(), va);
   va_end(va);
   return ret;
}
int main()
{
   char *mem = new char[15];
   memcpy(mem, "01-01-15,00:00)", 15);
   uint16_t year, month, day, hour, minute;
   sscanf_my(mem, "%02hu%02hu%02hu%02hu%02hu)", &day, &month, &year, &hour, &minute);
   delete[] mem;
}
источник

VO

Vyacheslav Olkhovchenkov in pro.cxx
ну значит править все 5к sscanf
источник

ЮП

Юрий Першин in pro.cxx
Vyacheslav Olkhovchenkov
ну значит править все 5к sscanf
получив 10к потенциальных ошибок )))
буду искать альтернативную реализацию sscanf
источник

VO

Vyacheslav Olkhovchenkov in pro.cxx
мне кажется у тебя нет варианта кроме как тягать размер буфера.
источник

AB

Artöm Bakri Al-Sarmini in pro.cxx
Можно == (uintptr_t)(void*)0. Без такого каста вряд ли
источник