Passing non-POD types to variadic functions is UB. Use plain C strings.
This commit is contained in:
parent
0fd0d3bd7a
commit
543ad021ee
6 changed files with 152 additions and 2 deletions
|
@ -1,6 +1,7 @@
|
|||
# $NetBSD: Makefile,v 1.3 2020/02/02 02:34:40 markd Exp $
|
||||
# $NetBSD: Makefile,v 1.4 2020/02/18 16:49:13 joerg Exp $
|
||||
|
||||
DISTNAME= kldap-${KAPPSVER}
|
||||
PKGREVISION= 1
|
||||
CATEGORIES= databases
|
||||
|
||||
HOMEPAGE= https://community.kde.org/KDE_PIM
|
||||
|
|
|
@ -1,6 +1,10 @@
|
|||
$NetBSD: distinfo,v 1.2 2020/02/02 02:34:40 markd Exp $
|
||||
$NetBSD: distinfo,v 1.3 2020/02/18 16:49:13 joerg Exp $
|
||||
|
||||
SHA1 (kldap-19.12.1.tar.xz) = 1fee9a6dbe1b0bbe134d04bbdc96b25bbd470ca4
|
||||
RMD160 (kldap-19.12.1.tar.xz) = edbb09747c1e87d002952b1b19593cfb3ab89cbb
|
||||
SHA512 (kldap-19.12.1.tar.xz) = 48445a5bb2ee1e9a897d5306c8641933d8aa18dc34546b136e38d67b944a22760ac1651bbb4d5cbeb3647d005d299813e47b36e9c3ec7bc143a2443847b2622a
|
||||
Size (kldap-19.12.1.tar.xz) = 155468 bytes
|
||||
SHA1 (patch-autotests_testkldap.cpp) = 7994aba5bc9e45fd2ec1ebd3bf2e918fb912e560
|
||||
SHA1 (patch-src_ber.cpp) = be0bb86e83fb8c01b9a5c26cf9636d9590eb25e2
|
||||
SHA1 (patch-src_ber.h) = ae191eb21abf68197887b42a3250c7efc2067fca
|
||||
SHA1 (patch-src_ldapcontrol.cpp) = 9f91d9e6ae20bde896584986009fe18700addfef
|
||||
|
|
64
databases/kldap/patches/patch-autotests_testkldap.cpp
Normal file
64
databases/kldap/patches/patch-autotests_testkldap.cpp
Normal file
|
@ -0,0 +1,64 @@
|
|||
$NetBSD: patch-autotests_testkldap.cpp,v 1.1 2020/02/18 16:49:13 joerg Exp $
|
||||
|
||||
--- autotests/testkldap.cpp.orig 2020-01-14 16:28:11.689663234 +0000
|
||||
+++ autotests/testkldap.cpp
|
||||
@@ -89,37 +89,37 @@ void KLdapTest::testBer()
|
||||
|
||||
ainteger = 23543;
|
||||
|
||||
- ber1.printf(QStringLiteral("i"), ainteger);
|
||||
- ber2.printf(QStringLiteral("o"), &aoctetString1);
|
||||
- ber3.printf(QStringLiteral("O"), &aoctetString2);
|
||||
- ber4.printf(QStringLiteral("s"), &aoctetString3);
|
||||
- ber5.printf(QStringLiteral("{v}"), &alist1);
|
||||
- ber6.printf(QStringLiteral("{V}"), &alist2);
|
||||
- ber7.printf(QStringLiteral("oi{v}O"), &aoctetString1, ainteger, &alist2, &aoctetString2);
|
||||
+ ber1.printf("i", ainteger);
|
||||
+ ber2.printf("o", &aoctetString1);
|
||||
+ ber3.printf("O", &aoctetString2);
|
||||
+ ber4.printf("s", &aoctetString3);
|
||||
+ ber5.printf("{v}", &alist1);
|
||||
+ ber6.printf("{V}", &alist2);
|
||||
+ ber7.printf("oi{v}O", &aoctetString1, ainteger, &alist2, &aoctetString2);
|
||||
|
||||
//test integer:
|
||||
bber = ber1;
|
||||
- bber.scanf(QStringLiteral("i"), &binteger);
|
||||
+ bber.scanf("i", &binteger);
|
||||
QCOMPARE(ainteger, binteger);
|
||||
|
||||
//test octet strings:
|
||||
bber = ber2;
|
||||
- bber.scanf(QStringLiteral("o"), &boctetString1);
|
||||
+ bber.scanf("o", &boctetString1);
|
||||
QCOMPARE(aoctetString1, boctetString1);
|
||||
bber = ber3;
|
||||
- bber.scanf(QStringLiteral("o"), &boctetString2);
|
||||
+ bber.scanf("o", &boctetString2);
|
||||
QCOMPARE(aoctetString2, boctetString2);
|
||||
bber = ber4;
|
||||
- bber.scanf(QStringLiteral("o"), &boctetString3);
|
||||
+ bber.scanf("o", &boctetString3);
|
||||
QCOMPARE(aoctetString3, boctetString3);
|
||||
|
||||
//test sequence of octet strings:
|
||||
bber = ber5;
|
||||
- bber.scanf(QStringLiteral("v"), &blist1);
|
||||
+ bber.scanf("v", &blist1);
|
||||
QCOMPARE(alist1, blist1);
|
||||
|
||||
bber = ber6;
|
||||
- bber.scanf(QStringLiteral("v"), &blist2);
|
||||
+ bber.scanf("v", &blist2);
|
||||
QCOMPARE(alist2, blist2);
|
||||
|
||||
//complex tests
|
||||
@@ -129,7 +129,7 @@ void KLdapTest::testBer()
|
||||
blist2.clear();
|
||||
|
||||
bber = ber7;
|
||||
- bber.scanf(QStringLiteral("oivO"), &boctetString1, &binteger, &blist2, &boctetString2);
|
||||
+ bber.scanf("oivO", &boctetString1, &binteger, &blist2, &boctetString2);
|
||||
QCOMPARE(aoctetString1, boctetString1);
|
||||
QCOMPARE(aoctetString2, boctetString2);
|
||||
QCOMPARE(alist2, blist2);
|
44
databases/kldap/patches/patch-src_ber.cpp
Normal file
44
databases/kldap/patches/patch-src_ber.cpp
Normal file
|
@ -0,0 +1,44 @@
|
|||
$NetBSD: patch-src_ber.cpp,v 1.1 2020/02/18 16:49:13 joerg Exp $
|
||||
|
||||
--- src/ber.cpp.orig 2020-01-14 16:17:11.814803692 +0000
|
||||
+++ src/ber.cpp
|
||||
@@ -124,7 +124,7 @@ QByteArray Ber::flatten() const
|
||||
return ret;
|
||||
}
|
||||
|
||||
-int Ber::printf(QString format, ...)
|
||||
+int Ber::printf(const char *format, ...)
|
||||
{
|
||||
char fmt[2];
|
||||
va_list args;
|
||||
@@ -132,8 +132,8 @@ int Ber::printf(QString format, ...)
|
||||
fmt[1] = '\0';
|
||||
|
||||
int i = 0, ret = 0;
|
||||
- while (i < format.length()) {
|
||||
- fmt[0] = format[i].toLatin1();
|
||||
+ while (format[i]) {
|
||||
+ fmt[0] = format[i];
|
||||
i++;
|
||||
switch (fmt[0]) {
|
||||
case 'b':
|
||||
@@ -229,7 +229,7 @@ int Ber::printf(QString format, ...)
|
||||
return ret;
|
||||
}
|
||||
|
||||
-int Ber::scanf(QString format, ...)
|
||||
+int Ber::scanf(const char *format, ...)
|
||||
{
|
||||
char fmt[2];
|
||||
va_list args;
|
||||
@@ -237,8 +237,8 @@ int Ber::scanf(QString format, ...)
|
||||
fmt[1] = '\0';
|
||||
|
||||
int i = 0, ret = 0;
|
||||
- while (i < format.length()) {
|
||||
- fmt[0] = format[i].toLatin1();
|
||||
+ while (format[i]) {
|
||||
+ fmt[0] = format[i];
|
||||
i++;
|
||||
switch (fmt[0]) {
|
||||
case 'l':
|
15
databases/kldap/patches/patch-src_ber.h
Normal file
15
databases/kldap/patches/patch-src_ber.h
Normal file
|
@ -0,0 +1,15 @@
|
|||
$NetBSD: patch-src_ber.h,v 1.1 2020/02/18 16:49:13 joerg Exp $
|
||||
|
||||
--- src/ber.h.orig 2020-01-14 16:17:30.291511893 +0000
|
||||
+++ src/ber.h
|
||||
@@ -115,8 +115,8 @@ public:
|
||||
* </li>
|
||||
* </ul>
|
||||
*/
|
||||
- int printf(QString format, ...); // Passing by-value since it's used by va_start
|
||||
- int scanf(QString format, ...);
|
||||
+ int printf(const char *format, ...);
|
||||
+ int scanf(const char *format, ...);
|
||||
unsigned int peekTag(int &size);
|
||||
unsigned int skipTag(int &size);
|
||||
|
22
databases/kldap/patches/patch-src_ldapcontrol.cpp
Normal file
22
databases/kldap/patches/patch-src_ldapcontrol.cpp
Normal file
|
@ -0,0 +1,22 @@
|
|||
$NetBSD: patch-src_ldapcontrol.cpp,v 1.1 2020/02/18 16:49:13 joerg Exp $
|
||||
|
||||
--- src/ldapcontrol.cpp.orig 2020-01-14 16:22:02.256391951 +0000
|
||||
+++ src/ldapcontrol.cpp
|
||||
@@ -123,7 +123,7 @@ int LdapControl::parsePageControl(QByteA
|
||||
|
||||
Ber ber(d->mValue);
|
||||
int size;
|
||||
- if (ber.scanf(QStringLiteral("{iO}"), &size, &cookie) == -1) {
|
||||
+ if (ber.scanf("{iO}", &size, &cookie) == -1) {
|
||||
return -1;
|
||||
} else {
|
||||
return size;
|
||||
@@ -135,7 +135,7 @@ LdapControl LdapControl::createPageContr
|
||||
LdapControl control;
|
||||
Ber ber;
|
||||
|
||||
- ber.printf(QStringLiteral("{iO}"), pagesize, &cookie);
|
||||
+ ber.printf("{iO}", pagesize, &cookie);
|
||||
control.setOid(QStringLiteral("1.2.840.113556.1.4.319"));
|
||||
control.setValue(ber.flatten());
|
||||
return control;
|
Loading…
Reference in a new issue