gsoap/gsoap-wsse.patch
2021-09-10 18:07:52 +08:00

95 lines
3.7 KiB
Diff

diff -ur gsoap2-code-r187/gsoap/plugin/wsseapi.c gsoap2-code-r188/gsoap/plugin/wsseapi.c
--- gsoap2-code-r187/gsoap/plugin/wsseapi.c 2020-06-30 21:06:47.000000000 +0200
+++ gsoap2-code-r188/gsoap/plugin/wsseapi.c 2020-07-22 22:20:04.000000000 +0200
@@ -3956,9 +3956,12 @@
if (!strcmp(att->name, "xmlns"))
{
soap_attribute(soap, att->name, att->text);
+ prt = NULL;
break;
}
}
+ if (!prt)
+ break;
}
}
else
@@ -4247,9 +4250,12 @@
if (!strcmp(att->name, "xmlns"))
{
soap_attribute(soap, att->name, att->text);
+ prt = NULL;
break;
}
}
+ if (!prt)
+ break;
}
}
else
@@ -4984,7 +4990,7 @@
if (soap_tagsearch(data->encid, "ds:Signature"))
{
/* support ds:Signature encryption only with HTTP chunking, otherwise content length is incorrect */
- if ((soap->omode & SOAP_IO) == SOAP_IO_BUFFER)
+ if ((soap->omode & SOAP_IO) == SOAP_IO_BUFFER || (soap->omode & SOAP_IO) == SOAP_IO_FLUSH)
soap->omode = (soap->omode & ~SOAP_IO) | SOAP_IO_CHUNK;
}
}
@@ -7573,6 +7579,8 @@
soap->c14ninclude = NULL; /* but do not render inclusive namespaces */
if ((soap->mode & SOAP_XML_INDENT))
soap->count += 5; /* correction for soap->ns = 0: add \n+indent */
+ if ((soap->mode & SOAP_XML_DEFAULTNS))
+ soap->count -= 2*(9 + strlen(ds_URI)); /* correct for xmlns="http://www.w3.org/2000/09/xmldsig#" added to SignedInfo and ds:SignatureValue */
}
soap_out_ds__SignedInfoType(soap, "ds:SignedInfo", 0, signature->SignedInfo, NULL);
soap_out__ds__SignatureValue(soap, "ds:SignatureValue", 0, &signature->SignatureValue, NULL);
diff -ur gsoap2-code-r187/gsoap/plugin/wsseapi.cpp gsoap2-code-r188/gsoap/plugin/wsseapi.cpp
--- gsoap2-code-r187/gsoap/plugin/wsseapi.cpp 2020-06-30 21:06:47.000000000 +0200
+++ gsoap2-code-r188/gsoap/plugin/wsseapi.cpp 2020-07-22 22:20:04.000000000 +0200
@@ -3956,9 +3956,12 @@
if (!strcmp(att->name, "xmlns"))
{
soap_attribute(soap, att->name, att->text);
+ prt = NULL;
break;
}
}
+ if (!prt)
+ break;
}
}
else
@@ -4247,9 +4250,12 @@
if (!strcmp(att->name, "xmlns"))
{
soap_attribute(soap, att->name, att->text);
+ prt = NULL;
break;
}
}
+ if (!prt)
+ break;
}
}
else
@@ -4984,7 +4990,7 @@
if (soap_tagsearch(data->encid, "ds:Signature"))
{
/* support ds:Signature encryption only with HTTP chunking, otherwise content length is incorrect */
- if ((soap->omode & SOAP_IO) == SOAP_IO_BUFFER)
+ if ((soap->omode & SOAP_IO) == SOAP_IO_BUFFER || (soap->omode & SOAP_IO) == SOAP_IO_FLUSH)
soap->omode = (soap->omode & ~SOAP_IO) | SOAP_IO_CHUNK;
}
}
@@ -7573,6 +7579,8 @@
soap->c14ninclude = NULL; /* but do not render inclusive namespaces */
if ((soap->mode & SOAP_XML_INDENT))
soap->count += 5; /* correction for soap->ns = 0: add \n+indent */
+ if ((soap->mode & SOAP_XML_DEFAULTNS))
+ soap->count -= 2*(9 + strlen(ds_URI)); /* correct for xmlns="http://www.w3.org/2000/09/xmldsig#" added to SignedInfo and ds:SignatureValue */
}
soap_out_ds__SignedInfoType(soap, "ds:SignedInfo", 0, signature->SignedInfo, NULL);
soap_out__ds__SignatureValue(soap, "ds:SignatureValue", 0, &signature->SignatureValue, NULL);