- status: open --> pending-fixed
- Group: Reproducable --> 3.0b6
The NOACK code below does not push anything for the ack parameter to TCPSENDDGM function, leading to a stack imbalance and a rtl into someplace unexpected. I don't think NOACK should be taken so literally...
(this is in I.TCP.S)
INITIAL_CLOSED DBGMSG INITIAL_CLOSED
LDY #tcp_code ;flags
LDA [TCPHEADER],Y
BIT #TCPF_RST
BEQL :DISCARD
BIT #TCPF_ACK ;If ACK, use that, else use zero
BNE :GOTACK
:NOACK LDY #tcp_seq
LDA [TCPHEADER],Y
XBA
PHA
INY
INY
LDA [TCPHEADER],Y
XBA
PHA
LDA 1,S ;Use ACK of SEG.SEQ+SEG.LEN
CLC
ADC TCPDATALEN
STA 1,S
LDA 1+2,S
ADC #0
STA 1+2,S
PEA 0 ;len
PHS 2 ;ptr
PEA TCPF_RST+TCPF_ACK
TCPD 'sending <RST>'
TCPDSEQ
JSL TCPSENDDGM
should be something like this:
:NOACK
PEA 0 ; ack
PEA 0 ; ack+2
LDY #tcp_seq
LDA [TCPHEADER],Y
...