OberonCore
https://forum.oberoncore.ru/

Некорректность реализации HostFiles.Register?
https://forum.oberoncore.ru/viewtopic.php?f=131&t=1921
Страница 1 из 1

Автор:  Евгений Темиргалеев [ Среда, 30 Сентябрь, 2009 20:52 ]
Заголовок сообщения:  Некорректность реализации HostFiles.Register?

Эффект проявился в Linux/wine где допустимы пути "/x/y/../z". Если в windows это не допустимо, то ошибки нет.

Файл должен появляться в той локации, где был создан New:
Цитата:
PROCEDURE (f: File) Register (name: Name; type: Type; ask: BOOLEAN; OUT res: INTEGER)
...

PROCEDURE (d: Directory) New (loc: Locator; ask: BOOLEAN): File
NEW, ABSTRACT
Returns a new file object (or NIL if this is not possible). This file is anonymous, i.e., not yet registered in the directory. (In host file systems where anonymous files are not directly supported, they may appear under temporary names in subdirectory loc.) If the file is registered later, it will appear in the subdirectory specified by loc.
Т.к. Register не проверят, что в name только имя, --- относит. путь + имя нивелирует "it will appear in the subdirectory specified by loc".
Код:
   PROCEDURE (f: File) Register (name: Files.Name; type: Files.Type; ask: BOOLEAN; OUT res: INTEGER);
      VAR b: INTEGER; fname: FullName;
   BEGIN
      ASSERT(f.state = new, 20); ASSERT(name # "", 21);
      Append(f.loc.path, name, type, f.loc.maxLen, fname);
      CheckDelete(fname, f.loc.path, ask, res);
      ASSERT(res # 87, 100);

Автор:  Иван Горячев [ Четверг, 01 Октябрь, 2009 01:41 ]
Заголовок сообщения:  Re: Некорректность реализации HostFiles.Register?

А каким должно быть поведение? Вышибать по ASSERTу, если в name передано имя с путём? Имя файла то может прийти откуда угодно, всё не проконтролируешь. Проще доку исправить

Автор:  Евгений Темиргалеев [ Четверг, 01 Октябрь, 2009 10:03 ]
Заголовок сообщения:  Re: Некорректность реализации HostFiles.Register?

Иван Горячев писал(а):
А каким должно быть поведение?
res = 1 invalid parameter (name or locator)

Хотя там и ASSERT указан
Pre
name is a file name 22

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/