better handling of faulty symbol files. ethStrings comments fixed.

This commit is contained in:
Norayr Chilingarian 2025-07-19 05:13:09 +04:00
parent fa9e73f7af
commit 50b5a1438e
2 changed files with 41 additions and 29 deletions

View file

@ -811,6 +811,7 @@ BEGIN
conval^.intval := OPM.ConstNotAlloc
| NilTyp: conval^.intval := OPM.nilval
ELSE OPM.LogWStr("unhandled case in InConstant(), f = "); OPM.LogWNum(f, 0); OPM.LogWLn;
OPM.err(155) (* Symbol file corrupted *)
END
END InConstant;
@ -1045,7 +1046,13 @@ BEGIN
END;
(* Now tag should be a valid object tag *)
impCtxt.nextTag := tag;
(*impCtxt.nextTag := tag;*)
(* Additional validation for constants *)
IF (tag <= Pointer) & (tag = Undef) THEN
OPM.err(155); (* Symbol file error *)
RETURN NIL
END;
(* Validate tag value *)
IF (tag < 0) OR (tag > 50) THEN

View file

@ -9,14 +9,19 @@ MODULE ethStrings; (** portable *) (* ejz, *)
IMPORT Texts, Dates := ethDates, Reals := ethReals;
CONST
CR* = 0DX; (** the Oberon end of line character *)
Tab* = 09X; (** the horizontal tab character *)
LF* = 0AX; (** the UNIX end of line character *)
(** the Oberon end of line character *)
CR* = 0DX;
(** the horizontal tab character *)
Tab* = 09X;
(** the UNIX end of line character *)
LF* = 0AX;
VAR
isAlpha*: ARRAY 256 OF BOOLEAN; (** all letters in the oberon charset *)
ISOToOberon*, OberonToISO*: ARRAY 256 OF CHAR; (** Translation tables for iso-8859-1 to oberon ascii code. *)
CRLF*: ARRAY 4 OF CHAR; (** end of line "string" used by MS-DOS and most TCP protocols *)
(** all letters in the oberon charset *)
isAlpha*: ARRAY 256 OF BOOLEAN;
(** Translation tables for iso-8859-1 to oberon ascii code. *)
ISOToOberon*, OberonToISO*: ARRAY 256 OF CHAR;
(** end of line "string" used by MS-DOS and most TCP protocols *)
CRLF*: ARRAY 4 OF CHAR;
sDayName: ARRAY 7, 4 OF CHAR;
lDayName: ARRAY 7, 12 OF CHAR;
sMonthName: ARRAY 12, 4 OF CHAR;
@ -24,7 +29,7 @@ MODULE ethStrings; (** portable *) (* ejz, *)
dateform, timeform: ARRAY 32 OF CHAR;
(** Length of str. *)
PROCEDURE Length*(VAR str(** in *): ARRAY OF CHAR): LONGINT;
PROCEDURE Length*(VAR str(* in *): ARRAY OF CHAR): LONGINT;
VAR i, l: LONGINT;
BEGIN
l := LEN(str); i := 0;
@ -35,7 +40,7 @@ MODULE ethStrings; (** portable *) (* ejz, *)
END Length;
(** Append this to to. *)
PROCEDURE Append*(VAR to(** in/out *): ARRAY OF CHAR; this: ARRAY OF CHAR);
PROCEDURE Append*(VAR to(* in/out *): ARRAY OF CHAR; this: ARRAY OF CHAR);
VAR i, j, l: LONGINT;
BEGIN
i := 0;
@ -50,7 +55,7 @@ MODULE ethStrings; (** portable *) (* ejz, *)
END Append;
(** Append this to to. *)
PROCEDURE AppendCh*(VAR to(** in/out *): ARRAY OF CHAR; this: CHAR);
PROCEDURE AppendCh*(VAR to(* in/out *): ARRAY OF CHAR; this: CHAR);
VAR i: LONGINT;
BEGIN
i := 0;
@ -124,7 +129,7 @@ MODULE ethStrings; (** portable *) (* ejz, *)
END UpperCh;
(** Convert str to all lower-case letters. *)
PROCEDURE Lower*(VAR str(** in *), lstr(** out *): ARRAY OF CHAR);
PROCEDURE Lower*(VAR str(* in *), lstr(* out *): ARRAY OF CHAR);
VAR i: LONGINT;
BEGIN
i := 0;
@ -135,7 +140,7 @@ MODULE ethStrings; (** portable *) (* ejz, *)
END Lower;
(** Convert str to all upper-case letters. *)
PROCEDURE Upper*(VAR str(** in *), ustr(** out *): ARRAY OF CHAR);
PROCEDURE Upper*(VAR str(* in *), ustr(* out *): ARRAY OF CHAR);
VAR i: LONGINT;
BEGIN
i := 0;
@ -146,7 +151,7 @@ MODULE ethStrings; (** portable *) (* ejz, *)
END Upper;
(** Is str prefixed by pre? *)
PROCEDURE Prefix*(pre: ARRAY OF CHAR; VAR str(** in *): ARRAY OF CHAR): BOOLEAN;
PROCEDURE Prefix*(pre: ARRAY OF CHAR; VAR str(* in *): ARRAY OF CHAR): BOOLEAN;
VAR i: LONGINT;
BEGIN
i := 0;
@ -157,7 +162,7 @@ MODULE ethStrings; (** portable *) (* ejz, *)
END Prefix;
(** Checks if str is prefixed by pre. The case is ignored. *)
PROCEDURE CAPPrefix*(pre: ARRAY OF CHAR; VAR str(** in *): ARRAY OF CHAR): BOOLEAN;
PROCEDURE CAPPrefix*(pre: ARRAY OF CHAR; VAR str(* in *): ARRAY OF CHAR): BOOLEAN;
VAR i: LONGINT;
BEGIN
i := 0;
@ -168,7 +173,7 @@ MODULE ethStrings; (** portable *) (* ejz, *)
END CAPPrefix;
(** Compare str1 to str2. The case is ignored. *)
PROCEDURE CAPCompare*(VAR str1(** in *), str2(** in *): ARRAY OF CHAR): BOOLEAN;
PROCEDURE CAPCompare*(VAR str1(* in *), str2(* in *): ARRAY OF CHAR): BOOLEAN;
VAR i: LONGINT;
BEGIN
i := 0;
@ -179,7 +184,7 @@ MODULE ethStrings; (** portable *) (* ejz, *)
END CAPCompare;
(** Get the parameter-value on line. The parameter value is started behind the first colon character. *)
PROCEDURE GetPar*(VAR line(** in *), par(** out *): ARRAY OF CHAR);
PROCEDURE GetPar*(VAR line(* in *), par(* out *): ARRAY OF CHAR);
VAR i, j, l: LONGINT;
BEGIN
i := 0;
@ -200,7 +205,7 @@ MODULE ethStrings; (** portable *) (* ejz, *)
END GetPar;
(** Get the suffix of str. The suffix is started by the last dot in str. *)
PROCEDURE GetSuffix*(VAR str(** in *), suf(** out *): ARRAY OF CHAR);
PROCEDURE GetSuffix*(VAR str(* in *), suf(* out *): ARRAY OF CHAR);
VAR i, j, l, dot: LONGINT;
BEGIN
dot := -1; i := 0;
@ -223,7 +228,7 @@ MODULE ethStrings; (** portable *) (* ejz, *)
END GetSuffix;
(** Change the suffix of str to suf. *)
PROCEDURE ChangeSuffix*(VAR str(** in/out *): ARRAY OF CHAR; suf: ARRAY OF CHAR);
PROCEDURE ChangeSuffix*(VAR str(* in/out *): ARRAY OF CHAR; suf: ARRAY OF CHAR);
VAR i, j, l, dot: LONGINT;
BEGIN
dot := -1; i := 0;
@ -245,7 +250,7 @@ MODULE ethStrings; (** portable *) (* ejz, *)
END ChangeSuffix;
(** Search in src starting at pos for the next occurrence of pat. Returns pos=-1 if not found. *)
PROCEDURE Search*(pat: ARRAY OF CHAR; VAR src(** in *): ARRAY OF CHAR; VAR pos(** in/out *): LONGINT);
PROCEDURE Search*(pat: ARRAY OF CHAR; VAR src(* in *): ARRAY OF CHAR; VAR pos(** in/out *): LONGINT);
CONST MaxPat = 128;
VAR
buf: ARRAY MaxPat OF CHAR;
@ -306,7 +311,7 @@ MODULE ethStrings; (** portable *) (* ejz, *)
END Search;
(** Search in src starting at pos for the next occurrence of pat. *)
PROCEDURE CAPSearch*(pat: ARRAY OF CHAR; VAR src(** in *): ARRAY OF CHAR; VAR pos(** in/out *): LONGINT);
PROCEDURE CAPSearch*(pat: ARRAY OF CHAR; VAR src(* in *): ARRAY OF CHAR; VAR pos(* in/out *): LONGINT);
CONST MaxPat = 128;
VAR
buf: ARRAY MaxPat OF CHAR;