From 47facc2eef32453d2df1bc2baff4f2e9e276e0e8 Mon Sep 17 00:00:00 2001 From: Emmanuel Milou Date: Wed, 3 Jun 2009 10:41:50 -0400 Subject: [PATCH] [#1534] Throws a length_error exception in case URL exceeds std::string max_size --- sflphone-common/src/sipvoiplink.cpp | 16 +++++++++++----- sflphone-common/test/hookmanagerTest.cpp | 8 +++++++- sflphone-common/test/hookmanagerTest.h | 2 ++ 3 files changed, 20 insertions(+), 6 deletions(-) diff --git a/sflphone-common/src/sipvoiplink.cpp b/sflphone-common/src/sipvoiplink.cpp index 8a1f1976e..aea88d7ba 100644 --- a/sflphone-common/src/sipvoiplink.cpp +++ b/sflphone-common/src/sipvoiplink.cpp @@ -2245,12 +2245,18 @@ mod_on_rx_request ( pjsip_rx_data *rdata ) header_value = fetch_header_value ( rdata->msg_info.msg, Manager::instance().getConfigString ( HOOKS, URLHOOK_SIP_FIELD ) ); - if ( header_value!="" ) - { - urlhook->addAction ( header_value, + if (header_value.size () < header_value.max_size()) + { + if ( header_value!="" ) + { + urlhook->addAction ( header_value, Manager::instance().getConfigString ( HOOKS, URLHOOK_COMMAND ) ); - } - } + } + } + else + throw length_error ("Url exceeds std::string max_size\n"); + + } /************************************************************************************************/ diff --git a/sflphone-common/test/hookmanagerTest.cpp b/sflphone-common/test/hookmanagerTest.cpp index 071435db7..b62da774d 100644 --- a/sflphone-common/test/hookmanagerTest.cpp +++ b/sflphone-common/test/hookmanagerTest.cpp @@ -36,10 +36,16 @@ void HookManagerTest::testAddAction (){ int status; - status = urlhook->addAction ("www.google.ca", "gnome-www-browser"); + status = urlhook->addAction ("www.google.ca", "x-www-browser"); CPPUNIT_ASSERT (status == 0); } +void HookManagerTest::testLargeUrl (){ + + std::string url; + std::cout << url.max_size() << std::endl; +} + void HookManagerTest::tearDown(){ // Delete the hook manager object delete urlhook; urlhook=0; diff --git a/sflphone-common/test/hookmanagerTest.h b/sflphone-common/test/hookmanagerTest.h index 2c314c7d7..9c7464125 100644 --- a/sflphone-common/test/hookmanagerTest.h +++ b/sflphone-common/test/hookmanagerTest.h @@ -43,6 +43,7 @@ class HookManagerTest : public CppUnit::TestCase { */ CPPUNIT_TEST_SUITE (HookManagerTest); CPPUNIT_TEST (testAddAction); + CPPUNIT_TEST (testLargeUrl); CPPUNIT_TEST_SUITE_END (); public: @@ -56,6 +57,7 @@ class HookManagerTest : public CppUnit::TestCase { void testAddAction (); + void testLargeUrl (); /* * Code factoring - Common resources can be released here. * This method is called by unitcpp after each test