From 30f81f902d72e077dbc4e4367669012251ab40d7 Mon Sep 17 00:00:00 2001
From: Terry Wilson <twilson@digium.com>
Date: Thu, 9 Dec 2010 22:19:56 +0000
Subject: [PATCH] Merged revisions 297965 via svnmerge from
 https://origsvn.digium.com/svn/asterisk/branches/1.8

................
  r297965 | twilson | 2010-12-09 16:18:19 -0600 (Thu, 09 Dec 2010) | 28 lines

  Merged revisions 297960 via svnmerge from
  https://origsvn.digium.com/svn/asterisk/branches/1.6.2

  ................
    r297960 | twilson | 2010-12-09 16:10:31 -0600 (Thu, 09 Dec 2010) | 21 lines

    Merged revisions 297959 via svnmerge from
    https://origsvn.digium.com/svn/asterisk/branches/1.4

    ........
      r297959 | twilson | 2010-12-09 16:00:30 -0600 (Thu, 09 Dec 2010) | 14 lines

      Ignore spurious REGISTER requests

      If a REGISTER request with a Call-ID matching an existing transaction is received
      it was possible that the REGISTER request would overwrite the initreq of the
      private structure. This info is used to generate messages for other responses in
      the transaction. This patch ignores REGISTER requests that match non-REGISTER
      transactions.

      (closes issue #18051)
      Reported by: eeman
      Tested by: twilson

      Review: https://reviewboard.asterisk.org/r/1050/
    ........
  ................
................


git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@297972 65c4cc65-6c06-0410-ace0-fbb531ad65f3
---
 channels/chan_sip.c | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/channels/chan_sip.c b/channels/chan_sip.c
index 2a0e128652..2751094cb0 100644
--- a/channels/chan_sip.c
+++ b/channels/chan_sip.c
@@ -23648,6 +23648,13 @@ static int handle_request_register(struct sip_pvt *p, struct sip_request *req, s
 {
 	enum check_auth_result res;
 
+	/* If this is not the intial request, and the initial request isn't
+	 * a register, something screwy happened, so bail */
+	if (p->initreq.headers && p->initreq.method != SIP_REGISTER) {
+		ast_log(LOG_WARNING, "Ignoring spurious REGISTER with Call-ID: %s\n", p->callid);
+		return -1;
+	}
+
 	/* Use this as the basis */
 	copy_request(&p->initreq, req);
 	if (sipdebug)
-- 
GitLab