You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by ac...@apache.org on 2016/02/01 23:21:33 UTC
qpid-proton git commit: PROTON-1122:: c++ Fix issues raised by
coverity.
Repository: qpid-proton
Updated Branches:
refs/heads/master a8974a320 -> 5b227bbfb
PROTON-1122:: c++ Fix issues raised by coverity.
One issue was a null dereference, which would core dump if an empty string is set as an
address in link_options.
See: https://scan4.coverity.com/reports.htm#v14284/p10556/fileInstanceId=8369775&defectInstanceId=1901068&mergedDefectId=122279&eventId=1901068-29
Project: http://git-wip-us.apache.org/repos/asf/qpid-proton/repo
Commit: http://git-wip-us.apache.org/repos/asf/qpid-proton/commit/5b227bbf
Tree: http://git-wip-us.apache.org/repos/asf/qpid-proton/tree/5b227bbf
Diff: http://git-wip-us.apache.org/repos/asf/qpid-proton/diff/5b227bbf
Branch: refs/heads/master
Commit: 5b227bbfbbd6f4f71758f567cbf178d6e6df0a21
Parents: a8974a3
Author: Alan Conway <ac...@redhat.com>
Authored: Mon Feb 1 15:37:43 2016 -0500
Committer: Alan Conway <ac...@redhat.com>
Committed: Mon Feb 1 17:20:31 2016 -0500
----------------------------------------------------------------------
proton-c/bindings/cpp/include/proton/io.hpp | 2 ++
proton-c/bindings/cpp/src/interop_test.cpp | 5 ++++-
proton-c/bindings/cpp/src/link_options.cpp | 5 ++---
proton-c/bindings/cpp/src/posix/io.cpp | 2 ++
proton-c/bindings/cpp/src/types.cpp | 8 ++++++++
proton-c/bindings/cpp/src/uuid.cpp | 2 +-
proton-c/bindings/cpp/src/windows/io.cpp | 2 ++
7 files changed, 21 insertions(+), 5 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/5b227bbf/proton-c/bindings/cpp/include/proton/io.hpp
----------------------------------------------------------------------
diff --git a/proton-c/bindings/cpp/include/proton/io.hpp b/proton-c/bindings/cpp/include/proton/io.hpp
index 0037c72..8bead5a 100644
--- a/proton-c/bindings/cpp/include/proton/io.hpp
+++ b/proton-c/bindings/cpp/include/proton/io.hpp
@@ -109,6 +109,8 @@ class socket_engine : public connection_engine {
/// Create socket engine connected to url.
PN_CPP_EXTERN socket_engine(const url&, handler&, const connection_options& = no_opts);
+ PN_CPP_EXTERN ~socket_engine();
+
/// Get the socket descriptor.
descriptor socket() const { return socket_; }
http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/5b227bbf/proton-c/bindings/cpp/src/interop_test.cpp
----------------------------------------------------------------------
diff --git a/proton-c/bindings/cpp/src/interop_test.cpp b/proton-c/bindings/cpp/src/interop_test.cpp
index fe2d58c..168677b 100644
--- a/proton-c/bindings/cpp/src/interop_test.cpp
+++ b/proton-c/bindings/cpp/src/interop_test.cpp
@@ -111,7 +111,10 @@ void test_value_conversions() {
int main(int argc, char** argv) {
int failed = 0;
- if (argc != 2) FAIL("Usage: " << argv[0] << " tests-dir");
+ if (argc != 2) {
+ cerr << "Usage: " << argv[0] << " tests-dir" << endl;
+ return 1;
+ }
tests_dir = argv[1];
RUN_TEST(failed, test_data_ostream());
http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/5b227bbf/proton-c/bindings/cpp/src/link_options.cpp
----------------------------------------------------------------------
diff --git a/proton-c/bindings/cpp/src/link_options.cpp b/proton-c/bindings/cpp/src/link_options.cpp
index 7364c59..3fc694b 100644
--- a/proton-c/bindings/cpp/src/link_options.cpp
+++ b/proton-c/bindings/cpp/src/link_options.cpp
@@ -74,11 +74,10 @@ class link_options::impl {
if (l.state() & endpoint::LOCAL_UNINIT) {
bool sender = !l.receiver();
if (local_address.set) {
- const char *addr = local_address.value.empty() ? NULL : local_address.value.c_str();
if (sender)
- l.local_target().address(addr);
+ l.local_target().address(local_address.value);
else
- l.local_source().address(addr);
+ l.local_source().address(local_address.value);
}
if (delivery_mode.set) {
switch (delivery_mode.value) {
http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/5b227bbf/proton-c/bindings/cpp/src/posix/io.cpp
----------------------------------------------------------------------
diff --git a/proton-c/bindings/cpp/src/posix/io.cpp b/proton-c/bindings/cpp/src/posix/io.cpp
index 26034a6..0f7a3f9 100644
--- a/proton-c/bindings/cpp/src/posix/io.cpp
+++ b/proton-c/bindings/cpp/src/posix/io.cpp
@@ -74,6 +74,8 @@ socket_engine::socket_engine(const url& u, handler& h, const connection_options&
init();
}
+socket_engine::~socket_engine() {}
+
std::pair<size_t, bool> socket_engine::io_read(char *buf, size_t size) {
ssize_t n = ::read(socket_, buf, size);
if (n > 0) return std::make_pair(n, true);
http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/5b227bbf/proton-c/bindings/cpp/src/types.cpp
----------------------------------------------------------------------
diff --git a/proton-c/bindings/cpp/src/types.cpp b/proton-c/bindings/cpp/src/types.cpp
index 7a38f12..1ace1a1 100644
--- a/proton-c/bindings/cpp/src/types.cpp
+++ b/proton-c/bindings/cpp/src/types.cpp
@@ -27,7 +27,15 @@
namespace proton {
namespace {
+struct ios_guard {
+ std::ios &guarded;
+ std::ios old;
+ ios_guard(std::ios& x) : guarded(x), old(0) { old.copyfmt(guarded); }
+ ~ios_guard() { guarded.copyfmt(old); }
+};
+
inline std::ostream& print_segment(std::ostream& o, const amqp_uuid& u, size_t begin, size_t end, const char* sep="") {
+ ios_guard restore_flags(o);
for (const char* p = &u[begin]; p < &u[end]; ++p)
o << std::setw(2) << std::setfill('0') << (int(*p) & 0xff);
return o << sep;
http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/5b227bbf/proton-c/bindings/cpp/src/uuid.cpp
----------------------------------------------------------------------
diff --git a/proton-c/bindings/cpp/src/uuid.cpp b/proton-c/bindings/cpp/src/uuid.cpp
index 32e11ac..6e8367f 100644
--- a/proton-c/bindings/cpp/src/uuid.cpp
+++ b/proton-c/bindings/cpp/src/uuid.cpp
@@ -73,7 +73,7 @@ uuid::uuid() {
/// UUID standard format: 8-4-4-4-12 (36 chars, 32 alphanumeric and 4 hypens)
std::ostream& operator<<(std::ostream& o, const uuid& u) {
- ios_guard guard(o);
+ ios_guard restore_flags(o);
o << std::hex << std::setfill('0');
static const int segments[] = {4,2,2,2,6}; // 1 byte is 2 hex chars.
const uint8_t *p = u.bytes;
http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/5b227bbf/proton-c/bindings/cpp/src/windows/io.cpp
----------------------------------------------------------------------
diff --git a/proton-c/bindings/cpp/src/windows/io.cpp b/proton-c/bindings/cpp/src/windows/io.cpp
index 32b3d3c..9273f19 100644
--- a/proton-c/bindings/cpp/src/windows/io.cpp
+++ b/proton-c/bindings/cpp/src/windows/io.cpp
@@ -90,6 +90,8 @@ socket_engine::socket_engine(const url& u, handler& h, const connection_options
init();
}
+socket_engine::~socket_engine() {}
+
std::pair<size_t, bool> socket_engine::io_read(char *buf, size_t size) {
int n = ::recv(socket_, buf, size, 0);
if (n > 0) return std::make_pair(n, true);
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org