Accepting request 311432 from devel:libraries:c_c++

Automatic submission by obs-autosubmit

OBS-URL: https://build.opensuse.org/request/show/311432
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/gsoap?expand=0&rev=14
This commit is contained in:
Dominique Leuenberger 2015-06-12 18:28:13 +00:00 committed by Git OBS Bridge
commit c572ad93db
5 changed files with 139 additions and 27 deletions

View File

@ -77,7 +77,7 @@ Index: gsoap-2.8.21/gsoap/Makefile.am
-libgsoapssl___a_CXXFLAGS = $(SOAPCPP2_DEBUG) $(SOAPCPP2_NONAMESPACES) $(SOAPCPP2_IPV6) -D$(platform) $(WSDL2H_EXTRA_FLAGS) -DWITH_DOM
+libgsoap_la_SOURCES = stdsoap2.c dom.c
+libgsoap_la_CFLAGS = $(SOAPCPP2_DEBUG) $(SOAPCPP2_NONAMESPACES) $(SOAPCPP2_IPV6) -D$(platform)
+libgsoap_la_LDFLAGS = -release ${PACKAGE_VERSION} -version-info 0:0:0
+libgsoap_la_LDFLAGS = -release ${PACKAGE_VERSION}
+libgsoap___la_SOURCES = stdsoap2_cpp.cpp dom_cpp.cpp
+libgsoap___la_CXXFLAGS = $(SOAPCPP2_DEBUG) $(SOAPCPP2_NONAMESPACES) $(SOAPCPP2_IPV6) -D$(platform)
+libgsoap___la_LDFLAGS = ${libgsoap_la_LDFLAGS}

View File

@ -1,31 +1,86 @@
From: Jan Engelhardt <jengelh@medozas.de>
Date: 2011-07-01 17:19:00 +0200
References: https://sourceforge.net/p/gsoap2/patches/124/attachment/gsoap-aliasing.patch
src: fix invocation of undefined behavior
The int type may have a stricter alignment than buf, and as such,
using *(int *)buf is prone to undefined behavior, usually manifesting
themselves in SIGBUS.
---
gsoap/stdsoap2.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
Index: gsoap-2.8.21/gsoap/stdsoap2.c
===================================================================
--- gsoap-2.8.21.orig/gsoap/stdsoap2.c
+++ gsoap-2.8.21/gsoap/stdsoap2.c
@@ -3073,10 +3073,12 @@ int
diff -ur gsoap-2.8.orig/gsoap/plugin/wsaapi.c gsoap-2.8/gsoap/plugin/wsaapi.c
--- gsoap-2.8.orig/gsoap/plugin/wsaapi.c 2015-04-14 08:46:30.000000000 +0200
+++ gsoap-2.8/gsoap/plugin/wsaapi.c 2015-05-05 09:19:27.985619710 +0200
@@ -599,7 +599,7 @@
k += 0x7FFFFFFF;
r2 = k;
k &= 0x8FFFFFFF;
- r2 += *(int*)soap->buf;
+ r2 += soap->buf[0] << 24 + soap->buf[1] << 16 + soap->buf[2] << 8 + soap->buf[3];
#endif
r3 = soap_random;
r4 = soap_random;
diff -ur gsoap-2.8.orig/gsoap/samples/calc_vs2005/calc_vs2005/stdsoap2.cpp gsoap-2.8/gsoap/samples/calc_vs2005/calc_vs2005/stdsoap2.cpp
--- gsoap-2.8.orig/gsoap/samples/calc_vs2005/calc_vs2005/stdsoap2.cpp 2015-04-14 08:46:34.000000000 +0200
+++ gsoap-2.8/gsoap/samples/calc_vs2005/calc_vs2005/stdsoap2.cpp 2015-05-05 09:01:31.633153838 +0200
@@ -3105,11 +3105,11 @@
int
SOAP_FMAC2
soap_rand()
{ unsigned char buf[4];
+ int r;
-{ unsigned char buf[4];
+{ int buf;
if (!soap_ssl_init_done)
soap_ssl_init();
RAND_pseudo_bytes(buf, 4);
- RAND_pseudo_bytes(buf, 4);
- return *(int*)buf;
+ memcpy(&r, buf, sizeof(r));
+ return r;
+ RAND_pseudo_bytes((unsigned char*)&buf, sizeof(int));
+ return buf;
}
#endif
#endif
diff -ur gsoap-2.8.orig/gsoap/stdsoap2.c gsoap-2.8/gsoap/stdsoap2.c
--- gsoap-2.8.orig/gsoap/stdsoap2.c 2015-04-14 08:46:36.000000000 +0200
+++ gsoap-2.8/gsoap/stdsoap2.c 2015-05-05 09:01:31.633153838 +0200
@@ -3105,11 +3105,11 @@
int
SOAP_FMAC2
soap_rand()
-{ unsigned char buf[4];
+{ int buf;
if (!soap_ssl_init_done)
soap_ssl_init();
- RAND_pseudo_bytes(buf, 4);
- return *(int*)buf;
+ RAND_pseudo_bytes((unsigned char*)&buf, sizeof(int));
+ return buf;
}
#endif
#endif
diff -ur gsoap-2.8.orig/gsoap/stdsoap2.cpp gsoap-2.8/gsoap/stdsoap2.cpp
--- gsoap-2.8.orig/gsoap/stdsoap2.cpp 2015-04-14 08:46:36.000000000 +0200
+++ gsoap-2.8/gsoap/stdsoap2.cpp 2015-05-05 09:01:31.633153838 +0200
@@ -3105,11 +3105,11 @@
int
SOAP_FMAC2
soap_rand()
-{ unsigned char buf[4];
+{ int buf;
if (!soap_ssl_init_done)
soap_ssl_init();
- RAND_pseudo_bytes(buf, 4);
- return *(int*)buf;
+ RAND_pseudo_bytes((unsigned char*)&buf, sizeof(int));
+ return buf;
}
#endif
#endif
diff -ur gsoap-2.8.orig/gsoap/VisualStudio2005/wsdl2h/wsdl2h/stdsoap2.cpp gsoap-2.8/gsoap/VisualStudio2005/wsdl2h/wsdl2h/stdsoap2.cpp
--- gsoap-2.8.orig/gsoap/VisualStudio2005/wsdl2h/wsdl2h/stdsoap2.cpp 2015-04-14 08:46:36.000000000 +0200
+++ gsoap-2.8/gsoap/VisualStudio2005/wsdl2h/wsdl2h/stdsoap2.cpp 2015-05-05 09:01:31.633153838 +0200
@@ -3105,11 +3105,11 @@
int
SOAP_FMAC2
soap_rand()
-{ unsigned char buf[4];
+{ int buf;
if (!soap_ssl_init_done)
soap_ssl_init();
- RAND_pseudo_bytes(buf, 4);
- return *(int*)buf;
+ RAND_pseudo_bytes((unsigned char*)&buf, sizeof(int));
+ return buf;
}
#endif
#endif

39
gsoap-allocator.diff Normal file
View File

@ -0,0 +1,39 @@
---
gsoap/stdsoap2.cpp | 17 +++++++++++++++--
1 file changed, 15 insertions(+), 2 deletions(-)
Index: gsoap-2.8.22/gsoap/stdsoap2.cpp
===================================================================
--- gsoap-2.8.22.orig/gsoap/stdsoap2.cpp
+++ gsoap-2.8.22/gsoap/stdsoap2.cpp
@@ -7256,7 +7256,13 @@ SOAP_FMAC1
struct soap*
SOAP_FMAC2
soap_versioning(soap_new)(soap_mode imode, soap_mode omode)
-{ struct soap *soap = (struct soap*)malloc(sizeof(struct soap));
+{
+#ifdef __cplusplus
+ struct soap *soap = new struct soap;
+#else
+ struct soap *soap = malloc(sizeof(struct soap));
+ soap->dummy = NULL;
+#endif
if (soap)
soap_versioning(soap_init)(soap, imode, omode);
return soap;
@@ -8983,7 +8989,14 @@ SOAP_FMAC1
struct soap*
SOAP_FMAC2
soap_copy(const struct soap *soap)
-{ return soap_copy_context((struct soap*)malloc(sizeof(struct soap)), soap);
+{
+#ifdef __cplusplus
+ return soap_copy_context(new struct soap, soap);
+#else
+ struct soap *s = malloc(sizeof(struct soap));
+ s->dummy = NULL;
+ return soap_copy_context(s, soap);
+#endif
}
#endif

View File

@ -1,3 +1,15 @@
-------------------------------------------------------------------
Tue Jun 2 11:19:46 UTC 2015 - jengelh@inai.de
- Replace gsoap-02-typepuns.diff with better version from SF
- Add gsoap-allocator.diff to please UBSAN
-------------------------------------------------------------------
Thu May 28 17:31:39 UTC 2015 - jengelh@inai.de
- Drop unnecessary -version-info argument from _LDFLAGS variable
in gsoap-01-sharedlibs.diff (we have -release)
-------------------------------------------------------------------
Thu Apr 23 11:45:28 UTC 2015 - jengelh@inai.de

View File

@ -17,7 +17,7 @@
Name: gsoap
%define lname libgsoap-2_8-0
%define lname libgsoap-2_8
Version: 2.8.22
Release: 0
Summary: Toolkit for C/C++ server and client web service applications
@ -32,6 +32,7 @@ Patch13: gsoap-automake1_13.diff
Patch1: gsoap-01-sharedlibs.diff
Patch2: gsoap-02-typepuns.diff
Patch3: gsoap-mindeflateratio.diff
Patch4: gsoap-allocator.diff
BuildRoot: %{_tmppath}/%{name}-%{version}-build
BuildRequires: autoconf
BuildRequires: automake
@ -92,7 +93,7 @@ symlinks for libgsoap.
%prep
%setup -q
cmp gsoap/stdsoap2.cpp gsoap/stdsoap2.c
%patch -P 13 -P 1 -P 2 -P 3 -p1
%patch -P 13 -P 1 -P 2 -P 3 -P 4 -p1
cp gsoap/stdsoap2.cpp gsoap/stdsoap2.c
%build
@ -125,12 +126,17 @@ rm -f "$b/%_libdir"/*.la;
%files -n %lname
%defattr(-,root,root)
%_libdir/*-2.8.so.*
%_libdir/*-2.8.so
%files -n libgsoap-devel
%defattr(-,root,root)
%_includedir/*
%_libdir/*.so
%_libdir/libgsoap.so
%_libdir/libgsoapck.so
%_libdir/libgsoapssl.so
%_libdir/libgsoap++.so
%_libdir/libgsoapck++.so
%_libdir/libgsoapssl++.so
%_libdir/pkgconfig/*
%changelog