OberonCore
https://forum.oberoncore.ru/

HostFiles.Reader.ReadBytes при len = 0: несобл. постусл.
https://forum.oberoncore.ru/viewtopic.php?f=131&t=5203
Страница 1 из 1

Автор:  Евгений Темиргалеев [ Воскресенье, 24 Август, 2014 17:15 ]
Заголовок сообщения:  HostFiles.Reader.ReadBytes при len = 0: несобл. постусл.

Баг это ещё тот :) Но, так сказать, для порядку:

PROCEDURE (r: Reader) ReadBytes (VAR x: ARRAY OF BYTE; beg, len: INTEGER)
Код:
Pre
beg >= 0   20
len >= 0   21
beg + len <= LEN(x)   22

Post
r.Pos()' <= r.Base().Length() - len
   r.Pos() = r.Pos()' + len
   ~r.eof
   len bytes read after r.Pos()' and transferred into x
r.Pos()' > r.Base().Length() - len
   r.Pos() = r.Base().Length()
   r.eof
   r.Base().Length() - r.Pos()' bytes read after r.Pos()' and transferred into x
Вариант len = 0 проходит по "первой" ветке. Всегда должен давать ~r.eof.

Реализация в HostFiles при len = 0 не изменяет r.eof.
Код:
   PROCEDURE (r: Reader) ReadBytes (VAR x: ARRAY OF BYTE; beg, len: INTEGER);
      VAR from, to, count, restInBuf: INTEGER;
   BEGIN   (* portable *)
      ASSERT(beg >= 0, 21);
      IF len > 0 THEN
         ...
      ELSE ASSERT(len = 0, 22)
      END
   END ReadBytes;

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