Well, while we are digressing ...

There was discussion earlier of the use of the equal sign for assignment versus 
comparison.

I am going to guess that THE most common cause of C/C++ program errors is the 
mis-use of = for comparison. (The comparison operator in C and C++ is ==.) In C 
if you code

if (foo = 3) bar = 5;

Then the compiler generates code to assign 3 to foo, test the result (3) for 
truth (not 0) and then execute the conditional statement. The above has the 
same effect as

foo = 3;
bar = 5;  

If I am recalling the story correctly, a malicious programmer *almost* 
succeeded in inserting code into the Linux kernel of the form

if (uid = 0) ...

The code appears to be testing the uid for 0, but in reality is making the uid 
0. Someone who know how to get to the code path could make themselves into 
superuser.

I like := for assignment, but I believe C eliminated the ambiguity of = by 
choosing == for comparison, by analogy to all of the other 2-character 
comparison operators (>=, !=, etc.).=

Charles


-----Original Message-----
From: IBM Mainframe Discussion List [mailto:[email protected]] On Behalf 
Of Bernd Oppolzer
Sent: Tuesday, March 29, 2022 1:57 PM
To: [email protected]
Subject: Re: PL/I question

As it seems from other posts, the story is not completely true;
there was indeed such an error somewhere sometime with NASA,
but the error that destroyed the Mariner spacecraft was different (a 
missing hyphen on
a hand-written variable specification, which had not been translated 
correctly to computer code).

I believe that there are similar pitfalls in other languages, too, 
although FORTRAN is very special,
because it allows spaces even in the middle of identifiers (and 
numbers), such as

    DO  3  I    =   1 . 10

which in every other programming language would disqualify as an 
assignment statement
because of the spaces around the DO symbol.

My favorite PL/1 example from a real world program is this:

    IF 9 < ZZ < 20 THEN DO; ...

----------------------------------------------------------------------
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to [email protected] with the message: INFO IBM-MAIN

Reply via email to