Compare commits

...
Sign in to create a new pull request.

10 commits

Author SHA1 Message Date
Enrico Scholz
0c24ea0385 forward ported two patches from stable branch
- fixes interruption with libcurl transport
- fixes parsing error of 64 bit integers
- fixes libxml2 related memory leak
2012-12-09 13:32:27 +01:00
Enrico Scholz
27fe80a495 forward-ported patch from stable branch which fixes exception handling
on invalid utf-8 strings
2012-08-26 16:51:46 +02:00
Enrico Scholz
3a4dd52146 backported "Fix double free of memory with failed xmlrpc_parse_value()" patch 2012-06-06 21:14:44 +02:00
Enrico Scholz
422854b729 backported IPv6 server related patch 2012-05-26 12:31:24 +02:00
Enrico Scholz
c70bcc1acb updated to 1.27.7
backported fix for "doesn't accept 'b/f' to mean boolean false"
2012-01-04 13:40:56 +01:00
Enrico Scholz
e009ec58bb fixed error handling when transfering too large files (#741980) 2011-10-03 20:57:02 +02:00
Enrico Scholz
4ca55d6112 Merge remote-tracking branch 'origin/master' into f16
Conflicts:
	xmlrpc-c.spec
2011-08-27 12:05:36 +02:00
Enrico Scholz
4f60fe2063 rebuilt with correct check for libcurl-devel 2011-08-08 00:12:00 +02:00
Enrico Scholz
c07f64c727 Merge remote-tracking branch 'origin/master' into f16 2011-08-07 23:48:18 +02:00
Enrico Scholz
f96417f815 tagged for f16
make sure that curl-devel with CURLOPT_GSSAPI_DELEGATION is used
2011-08-07 13:02:09 +02:00
11 changed files with 382 additions and 16 deletions

10
.gitignore vendored
View file

@ -1,9 +1 @@
/xmlrpc-c-1.24.4.tar.xz
/xmlrpc-c-1.25.0.tar.xz
/xmlrpc-c-1.25.1.tar.xz
/xmlrpc-c-1.26.0.tar.xz
/xmlrpc-c-1.26.3.tar.xz
/xmlrpc-c-1.27.0.tar.xz
/xmlrpc-c-1.27.3.tar.xz
/xmlrpc-c-1.27.4.tar.xz
/xmlrpc-c-1.27.5.tar.xz
/xmlrpc-c-1.27.7.tar.xz

105
fix-double-free.patch Normal file
View file

@ -0,0 +1,105 @@
commit dc129ae656085855cf126e81183001a5c50fdd77
Author: giraffedata <giraffedata@adbb7d4b-a73a-0410-a071-c5f57c452bd4>
Date: Sat May 26 21:00:19 2012 +0000
Fix double free of memory with failed xmlrpc_parse_value()
git-svn-id: https://xmlrpc-c.svn.sourceforge.net/svnroot/xmlrpc-c/trunk@2327 adbb7d4b-a73a-0410-a071-c5f57c452bd4
diff --git a/src/xmlrpc_decompose.c b/src/xmlrpc_decompose.c
index 6323a26..4a77426 100644
--- a/src/xmlrpc_decompose.c
+++ b/src/xmlrpc_decompose.c
@@ -165,37 +165,33 @@ struct decompTreeNode {
/* prototype for recursive calls */
static void
-releaseDecomposition(const struct decompTreeNode * const decompRootP,
- bool const oldstyleMemMgmt);
+releaseDecomposition(const struct decompTreeNode * const decompRootP);
static void
-releaseDecompArray(struct arrayDecomp const arrayDecomp,
- bool const oldstyleMemMgmt) {
+releaseDecompArray(struct arrayDecomp const arrayDecomp) {
unsigned int i;
for (i = 0; i < arrayDecomp.itemCnt; ++i) {
- releaseDecomposition(arrayDecomp.itemArray[i], oldstyleMemMgmt);
+ releaseDecomposition(arrayDecomp.itemArray[i]);
}
}
+
static void
-releaseDecompStruct(struct structDecomp const structDecomp,
- bool const oldstyleMemMgmt) {
+releaseDecompStruct(struct structDecomp const structDecomp) {
unsigned int i;
for (i = 0; i < structDecomp.mbrCnt; ++i) {
- releaseDecomposition(structDecomp.mbrArray[i].decompTreeP,
- oldstyleMemMgmt);
+ releaseDecomposition(structDecomp.mbrArray[i].decompTreeP);
}
}
static void
-releaseDecomposition(const struct decompTreeNode * const decompRootP,
- bool const oldstyleMemMgmt) {
+releaseDecomposition(const struct decompTreeNode * const decompRootP) {
/*----------------------------------------------------------------------------
Assuming that Caller has decomposed something according to 'decompRootP',
release whatever resources the decomposed information occupies.
@@ -236,10 +232,10 @@ releaseDecomposition(const struct decompTreeNode * const decompRootP,
xmlrpc_DECREF(*decompRootP->store.TstructVal.valueP);
break;
case '(':
- releaseDecompArray(decompRootP->store.Tarray, oldstyleMemMgmt);
+ releaseDecompArray(decompRootP->store.Tarray);
break;
case '{':
- releaseDecompStruct(decompRootP->store.Tstruct, oldstyleMemMgmt);
+ releaseDecompStruct(decompRootP->store.Tstruct);
break;
}
}
@@ -310,11 +306,12 @@ parsearray(xmlrpc_env * const envP,
}
}
if (envP->fault_occurred) {
- /* Release the items we completed before we failed. */
- unsigned int i;
- for (i = 0; i < doneCnt; ++i)
- releaseDecomposition(arrayDecomp.itemArray[i],
- oldstyleMemMgmt);
+ if (!oldstyleMemMgmt) {
+ /* Release the items we completed before we failed. */
+ unsigned int i;
+ for (i = 0; i < doneCnt; ++i)
+ releaseDecomposition(arrayDecomp.itemArray[i]);
+ }
}
}
}
@@ -351,10 +348,12 @@ parsestruct(xmlrpc_env * const envP,
}
if (envP->fault_occurred) {
- unsigned int i;
- for (i = 0; i < doneCount; ++i)
- releaseDecomposition(structDecomp.mbrArray[i].decompTreeP,
- oldstyleMemMgmt);
+ if (!oldstyleMemMgmt) {
+ /* Release the items we completed before we failed. */
+ unsigned int i;
+ for (i = 0; i < doneCount; ++i)
+ releaseDecomposition(structDecomp.mbrArray[i].decompTreeP);
+ }
}
}

View file

@ -0,0 +1,23 @@
commit e843bfc560ec7baabf9f88421ecdd1826e9fb578
Author: giraffedata <giraffedata@adbb7d4b-a73a-0410-a071-c5f57c452bd4>
Date: Wed Aug 22 03:18:22 2012 +0000
Release 1.25.19
git-svn-id: https://xmlrpc-c.svn.sourceforge.net/svnroot/xmlrpc-c/stable@2385 adbb7d4b-a73a-0410-a071-c5f57c452bd4
diff --git a/src/xmlrpc_string.c b/src/xmlrpc_string.c
index ac9a1f5..9496bfa 100644
--- a/src/xmlrpc_string.c
+++ b/src/xmlrpc_string.c
@@ -673,6 +673,10 @@ stringNew(xmlrpc_env * const envP,
xmlrpc_value * valP;
+ // hack to work around old-style exception cleanup in
+ // convert_params() in xmlrpc_parse.c.
+ valP = NULL;
+
xmlrpc_validate_utf8(envP, value, length);
if (!envP->fault_occurred) {

22
ipv6-parse.patch Normal file
View file

@ -0,0 +1,22 @@
commit 2b92ed9855f4decbab5ba46d0cbf491f3fd6044b
Author: giraffedata <giraffedata@adbb7d4b-a73a-0410-a071-c5f57c452bd4>
Date: Sat May 19 02:06:59 2012 +0000
Fix parsing of host/port with colons in host portion
[backported]
git-svn-id: https://xmlrpc-c.svn.sourceforge.net/svnroot/xmlrpc-c/trunk@2323 adbb7d4b-a73a-0410-a071-c5f57c452bd4
diff --git a/lib/abyss/src/http.c b/lib/abyss/src/http.c
index 096d93e..6b03e4c 100644
--- a/lib/abyss/src/http.c
+++ b/lib/abyss/src/http.c
@@ -527,7 +527,7 @@ parseHostPort(const char * const hostport,
buffer = strdup(hostport);
- colonPos = strchr(buffer, ':');
+ colonPos = strrchr(buffer, ':');
if (colonPos) {
const char * p;
uint32_t port;

View file

@ -1 +1 @@
2182
2233

69
release-1.25.20.patch Normal file
View file

@ -0,0 +1,69 @@
From 1c76aa8abeaef8273f637324e43de78677535833 Mon Sep 17 00:00:00 2001
From: giraffedata <giraffedata@adbb7d4b-a73a-0410-a071-c5f57c452bd4>
Date: Fri, 19 Oct 2012 19:47:27 +0000
Subject: Release 1.25.20
git-svn-id: https://xmlrpc-c.svn.sourceforge.net/svnroot/xmlrpc-c/stable@2435 adbb7d4b-a73a-0410-a071-c5f57c452bd4
---
lib/curl_transport/xmlrpc_curl_transport.c | 23 ++++++++++++++++++++---
version.mk | 2 +-
2 Dateien geändert, 21 Zeilen hinzugefügt(+), 4 Zeilen entfernt(-)
diff --git a/lib/curl_transport/xmlrpc_curl_transport.c b/lib/curl_transport/xmlrpc_curl_transport.c
index c48b927..96a403e 100644
--- a/lib/curl_transport/xmlrpc_curl_transport.c
+++ b/lib/curl_transport/xmlrpc_curl_transport.c
@@ -1170,6 +1170,16 @@ createRpc(xmlrpc_env * const envP,
if (rpcP == NULL)
xmlrpc_faultf(envP, "Couldn't allocate memory for rpc object");
else {
+ curlt_progressFn * curlProgressFn;
+
+ if (progress || clientTransportP->interruptP)
+ curlProgressFn = &curlTransactionProgress;
+ else {
+ /* There's nothing for curlTransactionProgress() to do, so save
+ the time and complexity of calling it.
+ */
+ curlProgressFn = NULL;
+ }
rpcP->transportP = clientTransportP;
rpcP->curlSessionP = curlSessionP;
rpcP->callInfoP = callInfoP;
@@ -1186,7 +1196,7 @@ createRpc(xmlrpc_env * const envP,
&clientTransportP->curlSetupStuff,
rpcP,
complete ? &finishRpcCurlTransaction : NULL,
- progress ? &curlTransactionProgress : NULL,
+ curlProgressFn,
&rpcP->curlTransactionP);
if (!envP->fault_occurred) {
if (envP->fault_occurred)
@@ -1296,15 +1306,22 @@ curlTransactionProgress(void * const context,
assert(rpcP);
assert(transportP);
- assert(rpcP->progress);
progressData.response.total = dlTotal;
progressData.response.now = dlNow;
progressData.call.total = ulTotal;
progressData.call.now = ulNow;
- rpcP->progress(rpcP->callInfoP, progressData);
+ if (rpcP->progress) {
+ struct xmlrpc_progress_data progressData;
+
+ progressData.response.total = dlTotal;
+ progressData.response.now = dlNow;
+ progressData.call.total = ulTotal;
+ progressData.call.now = ulNow;
+ rpcP->progress(rpcP->callInfoP, progressData);
+ }
if (transportP->interruptP)
*abortP = *transportP->interruptP;
else
--
1.7.11.7

59
release-1.25.21.patch Normal file
View file

@ -0,0 +1,59 @@
From c880196664ca3902cbf8fd806a58a9e9f362abb0 Mon Sep 17 00:00:00 2001
From: giraffedata <giraffedata@adbb7d4b-a73a-0410-a071-c5f57c452bd4>
Date: Thu, 29 Nov 2012 04:37:55 +0000
Subject: Release 1.25.21
git-svn-id: https://xmlrpc-c.svn.sourceforge.net/svnroot/xmlrpc-c/stable@2452 adbb7d4b-a73a-0410-a071-c5f57c452bd4
---
lib/abyss/src/channel.c | 2 +-
src/method.c | 1 +
src/xmlrpc_libxml2.c | 6 ++++--
version.mk | 2 +-
4 Dateien geändert, 7 Zeilen hinzugefügt(+), 4 Zeilen entfernt(-)
diff --git a/lib/abyss/src/channel.c b/lib/abyss/src/channel.c
index 5044e23..5454bd0 100644
--- a/lib/abyss/src/channel.c
+++ b/lib/abyss/src/channel.c
@@ -181,7 +181,7 @@ void
ChannelInterrupt(TChannel * const channelP) {
if (ChannelTraceIsActive)
- fprintf(stderr, "Interrupting channel waits");
+ fprintf(stderr, "Interrupting channel waits\n");
(*channelP->vtbl.interrupt)(channelP);
}
diff --git a/src/method.c b/src/method.c
index 467bbbe..e375e5f 100644
--- a/src/method.c
+++ b/src/method.c
@@ -54,6 +54,7 @@ translateTypeSpecifierToName(xmlrpc_env * const envP,
case 'S': *typeNameP = "struct"; break;
case 'A': *typeNameP = "array"; break;
case 'n': *typeNameP = "nil"; break;
+ case 'I': *typeNameP = "i8"; break;
default:
xmlrpc_faultf(envP,
"Method registry contains invalid signature "
diff --git a/src/xmlrpc_libxml2.c b/src/xmlrpc_libxml2.c
index 3df6231..574af86 100644
--- a/src/xmlrpc_libxml2.c
+++ b/src/xmlrpc_libxml2.c
@@ -422,9 +422,11 @@ xml_parse(xmlrpc_env * const envP,
*resultPP = context.root;
cleanup:
- if (parser)
+ if (parser) {
+ if (parser->myDoc)
+ xmlFreeDoc(parser->myDoc);
xmlFreeParserCtxt(parser);
-
+ }
if (envP->fault_occurred) {
if (context.root)
xml_element_free(context.root);
--
1.7.11.7

View file

@ -1 +1 @@
0c22580e707bd91be2478e93ea8bce72 xmlrpc-c-1.27.5.tar.xz
2805f07ba44ceb0d66eacd948884d2f4 xmlrpc-c-1.27.7.tar.xz

View file

@ -0,0 +1,21 @@
commit 2764e9684ec9284cf86ad602505cb03ea77a2ad2
Author: giraffedata <giraffedata@adbb7d4b-a73a-0410-a071-c5f57c452bd4>
Date: Sat Dec 10 21:13:10 2011 +0000
Fix bug: doesn't accept 'b/f' to mean boolean false
git-svn-id: https://xmlrpc-c.svn.sourceforge.net/svnroot/xmlrpc-c/trunk@2224 adbb7d4b-a73a-0410-a071-c5f57c452bd4
diff --git a/tools/xmlrpc/xmlrpc.c b/tools/xmlrpc/xmlrpc.c
index 06da3e5..3f24431 100644
--- a/tools/xmlrpc/xmlrpc.c
+++ b/tools/xmlrpc/xmlrpc.c
@@ -352,7 +352,7 @@ buildBool(xmlrpc_env * const envP,
if (streq(valueString, "t") || streq(valueString, "true"))
*paramPP = xmlrpc_bool_new(envP, true);
- else if (streq(valueString, "f") == 0 || streq(valueString, "false"))
+ else if (streq(valueString, "f") || streq(valueString, "false"))
*paramPP = xmlrpc_bool_new(envP, false);
else
setError(envP, "Boolean argument has unrecognized value '%s'. "

View file

@ -0,0 +1,29 @@
From 9b65c6488a51d36513b9315c11dfb42f319079ac Mon Sep 17 00:00:00 2001
From: Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
Date: Mon, 3 Oct 2011 20:49:57 +0200
Subject: [PATCH] xmlrpc_serialize: check for faults before appending
</struct>
fixes https://bugzilla.redhat.com/show_bug.cgi?id=741980 which was
caused by transmitting too large files within a structure.
---
src/xmlrpc_serialize.c | 3 ++-
1 files changed, 2 insertions(+), 1 deletions(-)
diff --git a/src/xmlrpc_serialize.c b/src/xmlrpc_serialize.c
index 78bbc10..e0d9376 100644
--- a/src/xmlrpc_serialize.c
+++ b/src/xmlrpc_serialize.c
@@ -370,7 +370,8 @@ serializeStruct(xmlrpc_env * const envP,
memberKeyP, memberValueP, dialect);
}
}
- addString(envP, outputP, "</struct>");
+ if (!envP->fault_occurred)
+ addString(envP, outputP, "</struct>");
}
}
}
--
1.7.6

View file

@ -5,8 +5,8 @@
Summary: A lightweight RPC library based on XML and HTTP
Name: xmlrpc-c
Version: 1.27.5
Release: %release_func 1700.svn%svnrev
Version: 1.27.7
Release: %release_func 1604.svn%svnrev
# See COPYING for details.
# The Python 1.5.2 license used by a few files is just BSD.
License: BSD and MIT
@ -21,6 +21,13 @@ URL: http://xmlrpc-c.sourceforge.net/
Source100: dfs.cc
Source101: dso-fixup
Patch0: xmlrpc-boolean-meaning.patch
Patch2: ipv6-parse.patch
Patch3: fix-double-free.patch
Patch4: fix-string-exceptions.patch
Patch5: release-1.25.20.patch
Patch6: release-1.25.21.patch
Patch100: xmlrpc-c-cmake.patch
Patch102: xmlrpc-c-printf-size_t.patch
Patch105: xmlrpc-c-longlong.patch
@ -28,6 +35,7 @@ Patch107: xmlrpc-c-uninit-curl.patch
Patch108: xmlrpc-c-30x-redirect.patch
Patch109: xmlrpc-c-check-vasprintf-return-value.patch
Patch110: xmlrpc-c-include-string_int.h.patch
Patch111: xmlrpc-c-struct-serialize.patch
BuildRoot: %_tmppath/%name-%version-%release-root
@ -43,6 +51,8 @@ Requires: %name%{?_isa} = %version-%release
Summary: C client libraries for xmlrpc-c
Group: System Environment/Libraries
Requires: %name%{?_isa} = %version-%release
# we need a CURLOPT_GSSAPI_DELEGATION patched libcurl
BuildConflicts: libcurl-devel < 7.21.7-2
%package client++
Summary: C++ client libraries for xmlrpc-c
@ -110,6 +120,14 @@ This package contains some handy XML-RPC demo applications.
%prep
%setup -q
%patch0 -p1
%patch2 -p1
%patch3 -p1
%patch4 -p1
%patch5 -p1
%patch6 -p1
%patch100 -p1
%patch102 -p1
%patch105 -p1
@ -117,6 +135,7 @@ This package contains some handy XML-RPC demo applications.
%patch108 -p1
%patch109 -p1
%patch110 -p1
%patch111 -p1
## not needed...
rm doc/{INSTALL,configure_doc}
@ -235,13 +254,40 @@ rm -rf $RPM_BUILD_ROOT
%changelog
* Sat Aug 27 2011 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de> - 1.27.5-1700.svn2185
* Sun Dec 9 2012 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de> - 1.27.7-1604.svn2185
- forward ported two patches from stable branch
- fixes interruption with libcurl transport
- fixes parsing error of 64 bit integers
- fixes libxml2 related memory leak
* Sun Aug 26 2012 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de> - 1.27.7-1603.svn2185
- forward-ported patch from stable branch which fixes exception
handling on invalid utf-8 strings
* Wed Jun 6 2012 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de> - 1.27.7-1602.svn2185
- backported "Fix double free of memory with failed xmlrpc_parse_value()"
patch
* Sat May 26 2012 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de> - 1.27.7-1601.svn2185
- backported IPv6 server related patch
* Wed Jan 4 2012 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de> - 1.27.7-1600.svn2185
- updated to 1.27.7; only build fixes not affecting us
- backported fix for "doesn't accept 'b/f' to mean boolean false"
* Mon Oct 3 2011 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de> - 1.27.5-1601.svn2185
- fixed error handling when transfering too large files (#741980)
* Sat Aug 27 2011 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de> - 1.27.5-1600.svn2185
- updated to 1.27.5
* Sun Aug 7 2011 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de> - 1.27.4-1700.svn2171
* Mon Aug 8 2011 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de> - 1.27.4-1601.svn2171
- rebuilt with correct check for libcurl-devel
* Sun Aug 7 2011 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de> - 1.27.4-1600.svn2171
- updated to 1.27.4
* Sun Aug 7 2011 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de> - 1.27.3-1700.svn2145
* Sun Aug 7 2011 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de> - 1.27.3-1600.svn2145
- updated to 1.27.3
* Mon Jun 27 2011 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de> - 1.27.0-1600.svn2145