[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
20000218: AW_APLT
- Subject: 20000218: AW_APLT
- Date: Fri, 18 Feb 2000 13:48:30 -0700
I found some redbook graphics on NOAAport which cause
AW_APLT to enter in an infinite loop. Some text blocks
appear to be Null padded 2 bytes less than the itotln.
Don't know if this is an intended checksum.
The wave period charts on NOAAport today exhibit this:
WMO Headers: PKQD01 KWNM 181200, PKQD03 KWNM 181200
(NMCGPH0P1, NMCGPH0P3). I can send you these products if needed.
The problem appears in the main loop, where the IF block
decrements ibeg
DO WHILE ( ibeg .le. itotln )
...
C
C* Storing text in string.
C
ELSE IF ( .not. textfl ) THEN
IF ( ispch .ne. 0 ) THEN
DO WHILE ( ( ( ispch .ge. 32) .and.
+ ( ispch .le. 127 ) ) .and. ( ibeg .le. itotln ) )
stchar ( i:i ) = char ( b ( ibeg ) )
i = i + 1
ibeg = ibeg + 1
ispch = ibits( ibte (ibeg), 0, 8)
textfl = .true.
END DO
ibeg = ibeg - 1
...
ibeg = ibeg + 1
C
C* Check for I = 0 (Chiz)
C
if(i.eq.0) then
iret = -1
return
endif
C
END DO
When ispch is 0, ibeg is not incremented.
I added a check just before the end_do to prevent the infinite loop
by returning to the calling routine- though you might want to
stay in the routine and finish the checksum.
I also added a check in the debug printing to avoid trying to write the
stchar(1:i) when i < 1:
write(14,*)'CHARACTER STRING:'
if(i .gt. 0) then
write(14,68) stchar(1:i)
else
write(14,*) 'No char ',i
endif
Steve Chiswell
Unidata User Support