https://gcc.gnu.org/bugzilla/show_bug.cgi?id=119914
Bug ID: 119914 Summary: Passing a constant to the unbounded array compiles and causes a.out to dump core Product: gcc Version: 15.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: modula2 Assignee: gaius at gcc dot gnu.org Reporter: gaius at gcc dot gnu.org Target Milestone: --- Forwarded from the gm2 mailing list: Passing an INTEGER or CARDINAL literal to one of the Sprintf* functions the program to dump core. How to reproduce: ============================ formatting.mod ===================== MODULE Hello; FROM Terminal IMPORT Write, WriteLn; FROM FormatStrings IMPORT Sprintf0, Sprintf1, Sprintf2; FROM DynamicStrings IMPORT String, InitString, Length, char; (* Like Terminal.WriteString, except that it takes a String, not an ARRAY OF CHAR. *) PROCEDURE WriteString (s: String); VAR l, i: CARDINAL; BEGIN l := Length(s); i := 0; WHILE i < l DO Write(char(s, i)); INC (i); END; END WriteString; VAR i:INTEGER; c:CARDINAL; BEGIN WriteString(InitString("Hello, world!")); WriteLn; WriteString(Sprintf0(InitString("abc\n"))); WriteLn; WriteString(Sprintf1(InitString("abc%%def\n"), "Foo")); WriteLn; WriteString(Sprintf1(InitString("abc%-0r\n"), "Foo")); (* => "abcr". Invalid directive silently ignored. *) WriteLn; WriteString(Sprintf1(InitString("abc%s\n"), InitString("Foo"))); WriteLn; WriteString(Sprintf1(InitString("abc%c\n"), CHR(42))); WriteLn; i := -42; WriteString(Sprintf1(InitString("abc%d\n"), i)); WriteLn; (* Dumps core: WriteString(Sprintf1(InitString("abc%d\n"), -42)); *) c := 42; WriteString(Sprintf1(InitString("abc%u\n"), c)); WriteLn; (* Dumps core: WriteString(Sprintf1(InitString("abc%u\n"), 42)); *) WriteString(Sprintf1(InitString("abc%x\n"), c)); WriteLn; (* Dumps core: WriteString(Sprintf1(InitString("abc%x\n"), 42)); *) END Hello. ================================================================== Enable one of the three WriteString lines that are commented out. $ gm2 formatting.mod && ./a.out RTExceptions.mod:650:35: In invalidloc RTExceptions.mod:650:35:invalid address referenced Hello, world! abc abc%def abcr abcFoo abc* abc-42 abc42 abc2a Aborted (core dumped)