]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
callerid: Logic error in checksum processing
authorRuss Meyerriecks <rmeyerreicks@digium.com>
Mon, 17 Mar 2014 21:14:21 +0000 (21:14 +0000)
committerRuss Meyerriecks <rmeyerreicks@digium.com>
Mon, 17 Mar 2014 21:14:21 +0000 (21:14 +0000)
Callerid checksum-ing was being handled incorrectly here. When the checksum is
calculated to be 0x00, it will perform 0x100-0x00 which results in 0x100. This
value will then fail the otherwise correct callerid message.

This patch changes the logic to simply add the calculated checksum to the
transmitted 2's compliment checksum.

Review: https://reviewboard.asterisk.org/r/3356/
(closes issue ASTERISK-23488)

git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.8@410710 65c4cc65-6c06-0410-ace0-fbb531ad65f3

main/callerid.c

index 4cbfb514cace3483b10340abc4bf409d805b129d..ecfb0b6e271bc5225dce17027666f2d37c088883 100644 (file)
@@ -621,7 +621,7 @@ int callerid_feed(struct callerid_state *cid, unsigned char *ubuf, int len, form
                                }
                                break;
                        case 5: /* Check checksum */
-                               if (b != (256 - (cid->cksum & 0xff))) {
+                               if ((b + cid->cksum) & 0xff)) {
                                        ast_log(LOG_NOTICE, "Caller*ID failed checksum\n");
                                        /* Try again */
                                        cid->sawflag = 0;