From 3993436a02dc18785a5b726e716664783200ec56 Mon Sep 17 00:00:00 2001 From: Dave Thaler Date: Mon, 21 Nov 2016 16:49:57 -0800 Subject: [PATCH] [IOT-1513] One more incorrect URI construction Change-Id: I3ea6f8cc55935ea3f30f30320386d7c430ee1b77 Signed-off-by: Dave Thaler Reviewed-on: https://gerrit.iotivity.org/gerrit/14587 Reviewed-by: Mike Fenelon Tested-by: jenkins-iotivity Reviewed-by: Dan Mihai --- resource/src/OCRepresentation.cpp | 12 +++++++++++- resource/unittests/OCRepresentationTest.cpp | 24 ++++++++++++++++++++++++ 2 files changed, 35 insertions(+), 1 deletion(-) diff --git a/resource/src/OCRepresentation.cpp b/resource/src/OCRepresentation.cpp index 5228517..bbf0907 100644 --- a/resource/src/OCRepresentation.cpp +++ b/resource/src/OCRepresentation.cpp @@ -35,6 +35,7 @@ #include "ocrandom.h" #include "oic_malloc.h" #include "oic_string.h" +#include "ocstack.h" namespace OC { @@ -649,7 +650,16 @@ namespace OC } if (m_devAddr.flags & OC_IP_USE_V6) { - ss << '[' << m_devAddr.addr << ']'; + char addressEncoded[128] = {0}; + + OCStackResult result = OCEncodeAddressForRFC6874(addressEncoded, + sizeof(addressEncoded), + m_devAddr.addr); + if (OC_STACK_OK != result) + { + throw OC::OCException("Invalid address in setDevAddr"); + } + ss << '[' << addressEncoded << ']'; } else { diff --git a/resource/unittests/OCRepresentationTest.cpp b/resource/unittests/OCRepresentationTest.cpp index 471c302..bf41e98 100644 --- a/resource/unittests/OCRepresentationTest.cpp +++ b/resource/unittests/OCRepresentationTest.cpp @@ -1447,4 +1447,28 @@ namespace OCRepresentationTest } } } + + TEST(OCRepresentationHostTest, ValidHost) + { + OCDevAddr addr = {OC_DEFAULT_ADAPTER, OC_IP_USE_V6}; + addr.port = 5000; + strcpy(addr.addr, "fe80::1%eth0"); + + OCRepresentation rep; + rep.setDevAddr(addr); + std::string host = rep.getHost(); + std::string expected = "coap://[fe80::1%25eth0]:5000"; + EXPECT_EQ(host, expected); + } + + TEST(OCRepresentationHostTest, InvalidHost) + { + OCDevAddr addr = {OC_DEFAULT_ADAPTER, OC_IP_USE_V6}; + addr.port = 5000; + strcpy(addr.addr, "fe80::1%%"); + + OCRepresentation rep; + EXPECT_ANY_THROW(rep.setDevAddr(addr)); + } + } -- 2.7.4