Support booting complete ISOs via HTTP #6
Loading…
Reference in New Issue
Block a user
No description provided.
Delete Branch "http-fulliso-boot"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
With this patch stage2 can be loaded from any HTTP mirror like this:
@ -500,0 +512,4 @@
log_message("%s: file is too big (>= %lu), refusing to download",
__func__, ULONG_MAX);
goto out_err;
} else if (*size == 0) {
В случае если реальный размер файла - 0 байт, то
*size == 0
иerrno == 0
, и ошибки нет. Файл, конечно, будет бесполезен, но сообщение об ошибке будет вводящим в заблуждение. Я думаю, если сначала проверитьerrno
, и выдать сообщение что не распознали Content-Length, то потом при*size == 0
можно смело писать в ошибке "файл нулевого размера для загрузки не подойдёт" или что-нибудь другое с подобным смыслом.К сожалению -- нет. Проверка:
Сообщение "файл слишком короткий" в таком случае скорее сбивает с толку, чем помогает.
glibc выдаёт только ERANGE:
Поэтому предлагаю так:
Подойдёт?
Подойдёт. Только
invalind
->invalid
.По поводу
errno
Вы правы. А для проверки, что там было не число, можно в коде примера выше заменитьif (errno != 0) {
наif ((errno != 0) || (ptr == argv[1])) {
.@ -500,0 +509,4 @@
* setting errno. On the other hand if the value is too big
* ERANGE is set (and value is truncated to ULONG_MAX)
*/
if (*endptr != '\0') {
А что если будет "Content-Length: 100500\r\n", т.е. будет перевод строки после числа? Тогда
*endptr == '\r'
. Лучше всё-таки проверять чтоendptr != buf + strlen(header_content_length)
, т.е. там не обнаружено числа.Будет плохо.
это не равносильно "не обнаружено числа".
Content-Length: xyz
-->*endptr == 'x'
Также (наверное) следует рассматривать как ошибочные заголовки вида:
Content-Length: 1xyz
И тут мне начинает казаться, что слишком много возни ради того, чтобы отличить файл нулевой длины (
Content-Length: 0
), от неправильного заголовка (Content-Length:
,Content-Length: xyz',
Content-Length: 12xyz', и т.п.). И хочется вернуть, как было.Грр. gitea съедает пробелы там, где они существенны.
Я хотел сказать, что при заголовке
Content-Length: \ xyz
endptr будет указывать на символ после второго пробела, и условиеendptr != buf + strlen(header_content_length)
выполнится, а числа в заголовке нет.Как насчёт такого кода?
Входные данные и результат:
-> endptr == buf + strlen(header_content_length)
10
-> good0
-> gooda10
-> endptr == buf + strlen(header_content_length)10a
-> !ok1 2 3
-> !okТест - это хорошо. Прошу добавить в спеке секцию %check и запуск тестов в этой секции.
LGTM