Microsoft open sources GWBASIC
Norman Jaffe
turing at shaw.ca
Fri May 29 19:07:35 CDT 2020
Fun that I have had with Fortran:
1) Passing an integer constant where a variable was expected, and having that constant modified by the called routine; on an IBM 1800 / TSX, small integer constants were stored in an area shared with the operating system, so it was supremely easy to change the value of 5 for all programs on the machine.
2) Naming a program with my first name (Norm) and having it go into an infinite loop when it did a floating point calculation.
From: "cctalk" <cctalk at classiccmp.org>
To: "cctalk" <cctalk at classiccmp.org>
Sent: Friday, May 29, 2020 4:32:38 PM
Subject: Re: Microsoft open sources GWBASIC
On 5/29/20 3:41 PM, Fred Cisin via cctalk wrote:
Yes, a pointer to the PC Interrupt Vector Table could be problematic.
>
> C lets you do a lot of things that some other languages will protect you
> from. Accordingly, Allen Holub titled one of his books about C, "Enough
> Rope To Shoot Yourself In The Foot"
> ISBN-10: 0070296898
> ISBN-13: 978-0070296893
Oh, FORTRAN can do likewise--I suspect that most languages can be coaxed
(perhaps with some assembly-language subroutines)to do something nasty.
Two cases in point (but I have lots more). In the CDC 60-bit machines,
one of the most useful functions was LOC(). It passes the address of
the argument. Note that this was basically a single instruction as
FORTRAN uses call-by-reference in most older versions.
The other aspect of the CDC operating systems is that PPMTR looked
periodically at each user's location 1 for system requests. So, it was
a simple matter to use LOC() to obtain a negative subscript into an
array to write and read that location. With the ability to make system
requests directly (and directly address user memory), the sky is the
limit. Indeed several user-written system utilities were written using
just that technique. The CDC iron is word-addressable only.
(Other abuses were the arbitrary target for the ASSIGNed GOTO, but
that's another subject).
Similarly, BASIC, depending on the version, could be abused. One
technique was to use a character array with the BASED attribute (I don't
know if I was the first to invent that keyword, but it was around 1978).
That turned the variable into a pointer and one could change the area
that the variable pointed to with the BASE...AT statement. Several
utilities were written in this fashion, including a few that located the
video refresh buffer and wrote to it directly.
I've been known to do similar nasty things in COBOL.
Side question: How does one create named COMMON in C?
--Chuck
More information about the cctalk
mailing list