Previously (Ctrl-F: "SAT solver on top of regex matcher").
Writing x=x+1 in code is too oldschool and verbose, but Python doesn't support C-style increment/decrement. It however supports statements like x+=1.
The following code can be used to find such statements and maybe even replace them:
#!/usr/bin/env python3 import re, sys for line in sys.stdin: line=line.rstrip() m=re.match(r"(.*)([a-z0-9_]+)=\2\+(.*)", line) if m!=None: print ("replace", m[0]) print ("to ", m[1]+m[2]+"+="+m[3])
Real data from my ToyTLS code:
replace s=s+": "+alert_type_s[err] to s+=": "+alert_type_s[err] replace cur_seq_n_to_serv=cur_seq_n_to_serv+1 to cur_seq_n_to_serv+=1 replace buf=buf+got to buf+=got replace all_certs=all_certs+certs to all_certs+=certs replace tmp=tmp+struct.pack("<BB", H, L) to tmp+=struct.pack("<BB", H, L) replace tmp=tmp+b"\x00\x0b\x00\x04\x03\x00\x01\x02" to tmp+=b"\x00\x0b\x00\x04\x03\x00\x01\x02"
Vim/Emacs fans can easily create a script for that, I suppose.
Update 20240519 18:50:10 EEST:
Vim search string:
/\([a-z0-9_]\+\)=\1+
Using grep against my ToySSH v4:
% cat toyssh_v4.py | grep '\([a-zA-Z0-9_]\+\)=\1+' ... KEX_ALGOS=KEX_ALGOS+"diffie-hellman-group1-sha1" CIPHER_ALGOS=CIPHER_ALGOS+"none" MAC_ALGOS=MAC_ALGOS+"hmac-sha2-256," SERVER_HOST_ALGOS=SERVER_HOST_ALGOS+"rsa-sha2-256," SERVER_HOST_ALGOS=SERVER_HOST_ALGOS+"ssh-dss" idx=idx+1 idx=idx+2 pkt_len=pkt_len+MAC_SIZE recv_seqno=recv_seqno+1 serv_to_client_ctr=serv_to_client_ctr+blocks_total recv_seqno=recv_seqno+1 send_seqno=send_seqno+1 idx=idx+0x10 idx=idx+1 padlen=padlen+16 buf=buf+cookie buf=buf+pack_str(encryption_algorithms_server_to_client) ...
(UPD: 20240617 15:25:12 CEST: As seen on reddit.)
Yes, I know about these lousy Disqus ads. Please use adblocker. I would consider to subscribe to 'pro' version of Disqus if the signal/noise ratio in comments would be good enough.