Гость
Форумы / C++ [игнор отключен] [закрыт для гостей] / Переполнение буфера при записи / 18 сообщений из 18, страница 1 из 1
01.09.2021, 09:15
    #40094242
kasper_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переполнение буфера при записи
Почему выходит предупреждение о переполнении буфера при записи в "password":
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
void password_generator(int length_password)
{
    password = new char[length_password];

    for (int i = 0; i < number_of_numeral; ++i) {
        password[i] = char(rand() % 10 + 48);
    }

    for (int i = number_of_numeral; i < number_of_numeral + number_of_big_chars; ++i) {
        password[i] = char(rand() % 26 + 65);
    }

    for (int i = number_of_numeral + number_of_big_chars; i < length_password; ++i) {
        password[i] = char(rand() % 26 + 97);
    }

    random_shuffle(password, password + length_password);
}
...
Рейтинг: 0 / 0
01.09.2021, 09:19
    #40094245
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переполнение буфера при записи
Ты уверен что это условие всегда выполняется?
Код: plaintext
1.
number_of_numeral + number_of_big_chars <= length_password
...
Рейтинг: 0 / 0
01.09.2021, 09:21
    #40094246
kasper_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переполнение буфера при записи
Dima T,

Да, спасибо.
Придумаю что-нибудь другое
...
Рейтинг: 0 / 0
01.09.2021, 09:22
    #40094247
kasper_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переполнение буфера при записи
Dima T,

хотя:
Код: plaintext
1.
2.
3.
4.
    number_of_small_chars = rand() % length_password;
    int balance_rand = length_password - number_of_small_chars;
    number_of_big_chars = rand() % balance_rand;
    number_of_numeral = length_password - number_of_small_chars - number_of_big_chars;
...
Рейтинг: 0 / 0
01.09.2021, 09:23
    #40094249
kasper_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переполнение буфера при записи
Dima T,

получается, что выполняется
...
Рейтинг: 0 / 0
01.09.2021, 09:35
    #40094252
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переполнение буфера при записи
Значит компилятор это не понял.

Добавь
Код: plaintext
1.
ASSERT(number_of_numeral + number_of_big_chars <= length_password);



И отключи это предупреждение в этом коде.
...
Рейтинг: 0 / 0
01.09.2021, 10:22
    #40094267
kasper_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переполнение буфера при записи
Dima T,

Благодарю.
...
Рейтинг: 0 / 0
01.09.2021, 12:54
    #40094351
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переполнение буфера при записи
Какой тип у этих number_of_XXX?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
01.09.2021, 14:22
    #40094402
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переполнение буфера при записи
Кажется парочку циклов можно было бы визуально упростить. Тут идет обогащение одного символьного
массива последовательно слева направо.
...
Рейтинг: 0 / 0
01.09.2021, 14:30
    #40094406
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переполнение буфера при записи
Этот код не упрощать надо, а полностью переделывать, ибо бредовый. Не
гарантирует сложности от слова "совсем" ибо с вероятность 1/длина весь пароль
будет состоять из цифр.

PS: И самое главное: проверь, что для меню не задан шрифт.
...
Рейтинг: 0 / 0
01.09.2021, 16:49
    #40094487
kasper_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переполнение буфера при записи
Dimitry Sibiryakov,
тип переменных - int

Забавно, но работает
...
Рейтинг: 0 / 0
01.09.2021, 16:52
    #40094489
kasper_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переполнение буфера при записи
mayton,
там в разных циклах случайно добавляются разные символы
...
Рейтинг: 0 / 0
01.09.2021, 16:54
    #40094492
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переполнение буфера при записи
kasper_
mayton,
там в разных циклах случайно добавляются разные символы

Так что? Нельзя упростить?
...
Рейтинг: 0 / 0
01.09.2021, 17:34
    #40094508
ну я
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переполнение буфера при записи
kasper_, навскидку:

- password = new char[length_password];
+ password = new char[length_password+1];

- for (int i = 0; i < number_of_numeral; ++i)
+ for (int i = 0; i < min(number_of_numeral, length_password); ++i)
...
Рейтинг: 0 / 0
01.09.2021, 17:41
    #40094509
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переполнение буфера при записи
kasper_Почему выходит предупреждение о переполнении буфера при записи в "password"

А у меня не выходит:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
#include <stdlib.h>
#include <new>

void password_generator(int length_password)
{
     int number_of_small_chars = rand() % length_password;
     int balance_rand = length_password - number_of_small_chars;
     int number_of_big_chars = rand() % balance_rand;
     int number_of_numeral = length_password - number_of_small_chars - 
number_of_big_chars;
     char* password = new char[length_password];

     for (int i = 0; i < number_of_numeral; ++i) {
         password[i] = char(rand() % 10 + 48);
     }

     for (int i = number_of_numeral; i < number_of_numeral + 
number_of_big_chars; ++i) {
         password[i] = char(rand() % 26 + 65);
     }

     for (int i = number_of_numeral + number_of_big_chars; i < length_password; 
++i) {
         password[i] = char(rand() % 26 + 97);
     }
}

int main()
{
	password_generator(10);
}


Компилируется с ключами -Wall -Wextra -Wpedantic без единого сообщения.
ЧЯДНТ?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
04.09.2021, 16:37
    #40095276
Переполнение буфера при записи
Dimitry Sibiryakov
Этот код не упрощать надо, а полностью переделывать, ибо бредовый. Не
гарантирует сложности от слова "совсем" ибо с вероятность 1/длина весь пароль
будет состоять из цифр.

PS: И самое главное: проверь, что для меню не задан шрифт.

вполне годные пароли выдаёт
если так беспокоит шанс 1:100500 триллионам, то можно и проверку прикрутить
(причём одноразовую, бо 2 раза такое не выпадет)
...
Рейтинг: 0 / 0
04.09.2021, 16:49
    #40095277
Переполнение буфера при записи
а вот у тебя почему-то выдаёт 2+ цифры впереди постоянно
а в конце 2+ lower case

кстати, надо добавить srand(time(NULL));

мой генератор по примерно такому же алгоритму выдаёт полный рандом из: -_,.:;!#0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
...
Рейтинг: 0 / 0
04.09.2021, 22:21
    #40095303
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переполнение буфера при записи
Скруль растет подобно библиотеке Борхеса.

https://www.sql.ru/forum/1126611/tyapnichnyy-pwdgen

Автор посмотри тут.
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Переполнение буфера при записи / 18 сообщений из 18, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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