funsec mailing list archives

Re: simple question


From: Valdis.Kletnieks () vt edu
Date: Sat, 05 Dec 2009 21:45:11 -0500

On Sat, 05 Dec 2009 16:33:42 PST, "Tomas L. Byrnes" said:

Yes, and it you look at the real to integer, and integer to real,
assignments without conversion functions, you can see where the actual
assignment may be indeterminate. I don't have the datasets, and haven't
done Fortran since F77, but when I did Fortran, assignment without type
conversion produced unpredictable results. Specifically, in little
endian machines, assigning a real to an integer was a very workable
random number generator.

Admittedly, when I was doing Fortran IV, it was on a big-endian machine,
but I don't remember real->int being a big problem. So I whomped up a quick
test:

% cat ftest.f
        program main
        dimension a(10)
        data a /1.0, 5.0, 10.0, 11938.0, -45.7, 9.2, 4.3, -99934.2,
     $  1.0, 0.0/
        do 20 i = 1, 10
        j = a(i)
        write(6,10) i, j, a(i)
10      format(' ',i6, ' ',i6,' ', f9.2)
20      continue
        stop
        end
% gfortran ftest.f
% ./a.out
      1      1      1.00
      2      5      5.00
      3     10     10.00
      4  11938  11938.00
      5    -45    -45.70
      6      9      9.20
      7      4      4.30
      8 -99934 -99934.20
      9      1      1.00
     10      0      0.00

Nope, doesn't look like a random number generator to me... Tried with 'REAL*8
A(10)' and that didn't change the output at all.  Nor did compiling for
32 or 64 bit make a difference, and this is on an Intel Core2, which is most
certainly little-endian.

Now mind you, if you started doing type punning in Fortran (i.e. something
like this:

        subroutine z1
        common /foo/ i(20)
C       i is implicitly an integer*4
        end
        subroutine z2
        common /foo/ a(20)
C       but here the same storage is implicit real*4
        end

you're in for trouble.  But you do that in *any* language and you're
in for trouble.

Attachment: _bin
Description:

_______________________________________________
Fun and Misc security discussion for OT posts.
https://linuxbox.org/cgi-bin/mailman/listinfo/funsec
Note: funsec is a public and open mailing list.

Current thread: