From:	SMTP%"bailey@HMIVAX.HUMGEN.UPENN.EDU" 24-MAY-1994 10:00:04.11
To:	EVERHART
CC:	
Subj:	Patch: memory errors with XOVER in 6.1b9

Message-Id: <9405230823.AA01489@uu7.psi.com>
Date:         Mon, 23 May 1994 03:35:23 EDT
Reply-To: Charles Bailey <bailey@HMIVAX.HUMGEN.UPENN.EDU>
Sender: ANU-NEWS Discussion <ANU-NEWS@VM1.NoDak.EDU>
From: Charles Bailey <bailey@HMIVAX.HUMGEN.UPENN.EDU>
Organization: HHMI/Human Genetics, Univ of Pa.
Subject:      Patch: memory errors with XOVER in 6.1b9
To: Multiple recipients of list ANU-NEWS <ANU-NEWS@VM1.NoDak.EDU>

The following patch corrects a bug which crept into the 6.1beta9 release at the
last miute on the heels of another patch.  The bug affects only NNTP clients
which use the XOVER command to obtain item summaries from the server, and
manifests itself as memory corruption errors (usually a failed assertion
computing a block checksum).

                    Regards,
                    Charles Bailey

!-------------------------------------------------------------------------------
!              Computational Biology and Informatics Laboratory
!         Dept. of Genetics, Univ. of Pennsylvania School of Medicine
!              Philadelphia, PA USA 19104     Tel. (215) 573-3112
!          Internet: bailey@genetics.upenn.edu  (IN 128.91.200.37)
!-------------------------------------------------------------------------------
$! ------------------ CUT HERE -----------------------
$ v='f$verify(f$trnlnm("SHARE_UNPACK_VERIFY"))'
$!
$! This archive created:
$!  Name : 940523_NEWSUTILITY.PATCH
$!  By   : bailey@genetics.upenn.edu
$!  Date : 23-MAY-1994 03:09:29.82
$!  Using: VMS_SHARE 8.4, (C) 1993 Andy Harper, Kings College London UK
$!
$! Credit is due to these people for their original ideas:
$!    James Gray, Michael Bednarek
$!
$! TO UNPACK THIS SHARE FILE, CONCATENATE ALL PARTS IN ORDER
$! AND EXECUTE AS A COMMAND PROCEDURE  (  @name  )
$!
$! THE FOLLOWING FILE(S) WILL BE CREATED AFTER UNPACKING:
$!       1. 940523_NEWSUTILITY.PATCH
$!
$ set="set"
$ set symbol/scope=(nolocal,noglobal)
$ f=f$parse("SHARE_UNPACK_TEMP","SYS$SCRATCH:."+f$getjpi("","PID"))
$ e="write sys$error  ""%UNPACK"", "
$ w="write sys$output ""%UNPACK"", "
$ if .not. f$trnlnm("SHARE_UNPACK_LOG") then $ w = "!"
$ if f$getsyi("CPU") .gt. 127 then $ goto start
$ ve=f$getsyi("version")
$ if ve-f$extract(0,1,ve) .ges. "4.4" then $ goto start
$ e "-E-OLDVER, Must run at least VMS 4.4"
$ v=f$verify(v)
$ exit 44
$unpack: subroutine ! P1=filename, P2=checksum, P3=attributes,P4=size
$ if f$parse(P1) .nes. "" then $ goto dirok
$ dn=f$parse(P1,,,"DIRECTORY")
$ w "-I-CREDIR, Creating directory ''dn'"
$ create/dir 'dn'
$ if $status then $ goto dirok
$ e "-E-CREDIRFAIL, Unable to create ''dn' File skipped"
$ delete 'f'*
$ exit
$dirok:
$ x=f$search(P1)
$ if x .eqs. "" then $ goto file_absent
$ e "-W-HIGHVERS, Creating higher version of ", P1
$file_absent:
$ w "-I-UNPACK, Unpacking ", P5, " of ", P6, " - ", P1, " - ", P4, " Blocks"
$ n=P1
$ if P3 .nes. "" then $ n=f
$ if .not. f$verify() then $ define/user sys$output nl:
$ EDIT/TPU/NOSEC/NODIS/COM=SYS$INPUT/NOJOURNAL 'f'/OUT='n'
PROCEDURE GetHex(s,p)LOCAL x1,x2;x1:=INDEX(t,SUBSTR(s,p,1))-1;x2:=INDEX(t,
SUBSTR(s,p+1,1))-1;RETURN 16*x1+x2;ENDPROCEDURE;PROCEDURE SkipPartsep LOCAL m;
LOOP m:=MARK(NONE);EXITIF m=END_OF(b);DELETE(m);EXITIF INDEX(ERASE_LINE,
"-+-+-+-+-+-+-+-+")=1;ENDLOOP;ENDPROCEDURE;PROCEDURE ProcessLine LOCAL c,s,l,b,
n,p;c := ERASE_CHARACTER(1);s := ERASE_LINE;IF c = "X" THEN SPLIT_LINE; ENDIF;
MOVE_HORIZONTAL(-1);l := LENGTH(s);p := 1;LOOP EXITIF p > l;c := SUBSTR(s,p,1);
p := p+1;CASE c FROM ' ' TO '`' ['`']: COPY_TEXT(ASCII(GetHex(s,p))); p:=p+2;[
' ']: p:=p+1;[INRANGE,OUTRANGE]: COPY_TEXT(c);ENDCASE;ENDLOOP;ENDPROCEDURE;
PROCEDURE Decode LOCAL m;POSITION(BEGINNING_OF(b));LOOP m:=MARK(NONE);EXITIF m=
END_OF(b);DELETE(m);IF INDEX(CURRENT_LINE,"+-+-+-+-+-+-+-+-")=
1 THEN SkipPartSep;ELSE ProcessLine;MOVE_HORIZONTAL(1);ENDIF;ENDLOOP;
ENDPROCEDURE;SET(FACILITY_NAME,"UNPACK");SET(SUCCESS,OFF);SET(INFORMATIONAL,
OFF);t:="0123456789ABCDEF";f:=GET_INFO(COMMAND_LINE,"file_name");b:=
CREATE_BUFFER(f,f);Decode;WRITE_FILE(b,GET_INFO(COMMAND_LINE,"output_file"));
QUIT;
$ if p3 .eqs. "" then $ goto dl
$ open/write fdl &f
$ write fdl "RECORD"
$ write fdl P3
$ close fdl
$ w "-I-CONVRFM, Converting record format to ", P3
$ convert/fdl=&f &f-1 &P1
$dl: delete 'f'*
$ checksum 'P1'
$ if checksum$checksum .nes. P2 then $ -
  e "-E-CHKSMFAIL, Checksum of ''P1' failed."
$ exit
$ endsubroutine
$start:
$!
$ create 'f'
XANU`20News`20Patch
XPatch`20ID:`20940523_newsutility.c!bailey@genetics.upenn.edu
XDate:`2023-May-1994
XAuthor:`20Charles`20Bailey`20`20bailey@genetics.upenn.edu
XNews`20Version:`206.1beta9
XNews`20Files:`20NewsUtility.C
XDescription:`20Fixes`20bug`20in`20item`20array`20allocation`20within`20xoverni
V()`20which`20caused
XNNTP`20client`20to`20incur`20errors`20freeing`20item`20array`20space`20when`20
Vprocessing`20an`20XOVER
Xreponse`20from`20the`20remote`20server.
X***`20newsutility.c
X---`20newsutility_new.c
X**************
X***`2099,101
X`20`20**--
X`20`20**/
X`20`20`0C
X---`2099,103`20-----
X+`20**`09V6.1b9`20`2022-May-1994`20`20Charles`20Bailey`20`20bailey@genetics.up
Venn.edu
X+`20**`09`20-`20fix`20memory`20usage`20bug`20which`20snuck`20into`206.1b9`20re
Vlease`20with`20another`20patch
X`20`20**--
X`20`20**/
X`20`20`0C
X**************
X***`202479,2485
X`20`20
X`20`20`20`20if`20(sgap->grp_iasize`20==`20sgap->grp_count)`20`7B
X`20`20`20`20`20`20sgap->grp_iasize`20+=`2010;
X!`20`20`20`20`20sgap->grp_ia`20=`20realloc(sgap->grp_ia,(sgap->grp_iasize`20+
V`201)`20*`20(sizeof`20newsitm));
X`20`20`20`20`20`20`7D
X`20`20`20`20j`20=`20sgap->grp_count`20+`201;
X`20`20`20`20while`20(j`20>`20i)`20`7B
X---`202481,2487`20-----
X`20`20
X`20`20`20`20if`20(sgap->grp_iasize`20==`20sgap->grp_count)`20`7B
X`20`20`20`20`20`20sgap->grp_iasize`20+=`2010;
X!`20`20`20`20`20sgap->grp_ia`20=`20news_realloc(sgap->grp_ia,(sgap->grp_iasize
V`20+`201)`20*`20(sizeof`20newsitm));
X`20`20`20`20`20`20`7D
X`20`20`20`20j`20=`20sgap->grp_count`20+`201;
X`20`20`20`20while`20(j`20>`20i)`20`7B
X***`20patchlist.h;-1
X---`20patchlist.h
X**************
X***`201,1
X`20`20=+=+=`20End`20=+=+=
X---`201,2`20-----
X+`20940523_newsutility.c!bailey@genetics.upenn.edu
X`20`20=+=+=`20End`20=+=+=
$ call unpack 940523_NEWSUTILITY.PATCH -
 1128231335 "FORMAT STREAM_LF;CARRIAGE_CONTROL CARRIAGE_RETURN" 3 1 1
$ v=f$verify(v)
$ exit
