Skip to content
GitLab
Menu
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Menu
Open sidebar
savoirfairelinux
jami-daemon
Commits
e820c984
Commit
e820c984
authored
Jun 10, 2021
by
Olivier Dion
Committed by
Adrien Béraud
Jun 29, 2021
Browse files
fuzzing: Add fuzz-msgpack
Change-Id: I39f655b439a47caaa9c5e7ce57c3ef042258c778
parent
589ae180
Changes
4
Hide whitespace changes
Inline
Side-by-side
test/fuzzing/Makefile.am
View file @
e820c984
...
...
@@ -16,4 +16,8 @@ libfuzz_la_SOURCES = lib/utils.cpp lib/supervisor.cpp lib/gnutls.cpp lib/rand.cp
check_PROGRAMS
+=
fuzz_spam_channel_creation
fuzz_spam_channel_creation_SOURCES
=
fuzz-spam-channel-creation.cpp
fuzz_spam_channel_creation_LDADD
=
libfuzz.la
check_PROGRAMS
+=
fuzz_msgpack
fuzz_msgpack_SOURCES
=
fuzz-msgpack.cpp
fuzz_msgpack_LDADD
=
libfuzz.la
endif
test/fuzzing/fuzz-msgpack.cpp
0 → 100644
View file @
e820c984
/*
* Copyright (C) 2021 Savoir-faire Linux Inc.
*
* Author: Olivier Dion <olivier.dion>@savoirfairelinux.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
#include
"lib/gnutls.h"
#include
"lib/syslog.h"
/*
* Reverse channel and data in packed message
*/
void
pack_gnutls_record_recv
(
msgpack
::
sbuffer
&
buf
,
const
ChanneledMessage
&
msg
)
{
msgpack
::
packer
<
msgpack
::
sbuffer
>
pk
(
&
buf
);
pk
.
pack_array
(
2
);
pk
.
pack_bin
(
msg
.
data
.
size
());
pk
.
pack_bin_body
((
const
char
*
)
msg
.
data
.
data
(),
msg
.
data
.
size
());
pk
.
pack
(
msg
.
channel
);
}
bool
mutate_gnutls_record_recv
(
ChanneledMessage
&
msg
)
{
(
void
)
msg
;
return
true
;
}
#include
"scenarios/classic-alice-and-bob.h"
test/fuzzing/fuzz-spam-channel-creation.cpp
View file @
e820c984
...
...
@@ -22,13 +22,9 @@
#include
<set>
#include
<atomic>
#include
<mutex>
#include
<
condition_variable
>
#include
<
thread
>
#include
"manager.h"
#include
"jamidht/connectionmanager.h"
#include
"jamidht/jamiaccount.h"
#include
"dring.h"
#include
"account_const.h"
#include
"lib/gnutls.h"
#include
"lib/utils.h"
...
...
@@ -99,48 +95,4 @@ void pre_gnutls_deinit_hook(gnutls_session_t session)
}
int
main
(
void
)
{
DRing
::
init
(
DRing
::
InitFlag
(
DRing
::
DRING_FLAG_DEBUG
|
DRing
::
DRING_FLAG_CONSOLE_LOG
));
if
(
not
jami
::
Manager
::
instance
().
initialized
)
{
assert
(
DRing
::
start
(
"dring-sample.yml"
));
}
auto
actors
=
load_actors_and_wait_for_announcement
(
"actors/alice-bob.yml"
);
auto
alice
=
actors
[
"alice"
];
auto
bob
=
actors
[
"bob"
];
auto
aliceAccount
=
jami
::
Manager
::
instance
().
getAccount
<
jami
::
JamiAccount
>
(
alice
);
auto
bobAccount
=
jami
::
Manager
::
instance
().
getAccount
<
jami
::
JamiAccount
>
(
bob
);
auto
aliceUri
=
aliceAccount
->
getUsername
();
auto
bobUri
=
bobAccount
->
getUsername
();
std
::
map
<
std
::
string
,
std
::
shared_ptr
<
DRing
::
CallbackWrapperBase
>>
confHandlers
;
std
::
atomic_bool
callReceived
{
false
};
std
::
mutex
mtx
;
std
::
unique_lock
<
std
::
mutex
>
lk
{
mtx
};
std
::
condition_variable
cv
;
confHandlers
.
insert
(
DRing
::
exportable_callback
<
DRing
::
CallSignal
::
IncomingCall
>
(
[
&
](
const
std
::
string
&
,
const
std
::
string
&
,
const
std
::
string
&
)
{
callReceived
=
true
;
cv
.
notify_one
();
}));
DRing
::
registerSignalHandlers
(
confHandlers
);
auto
call
=
aliceAccount
->
newOutgoingCall
(
bobUri
);
assert
(
cv
.
wait_for
(
lk
,
std
::
chrono
::
seconds
(
30
),
[
&
]
{
return
callReceived
.
load
();
}));
std
::
this_thread
::
sleep_for
(
std
::
chrono
::
seconds
(
60
));
wait_for_removal_of
({
alice
,
bob
});
DRing
::
fini
();
return
0
;
}
#include
"scenarios/classic-alice-and-bob.h"
test/fuzzing/scenarios/classic-alice-and-bob.h
0 → 100644
View file @
e820c984
/*
* Copyright (C) 2021 Savoir-faire Linux Inc.
*
* Author: Olivier Dion <olivier.dion>@savoirfairelinux.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
#include
<condition_variable>
#include
"manager.h"
#include
"jamidht/connectionmanager.h"
#include
"jamidht/jamiaccount.h"
#include
"dring.h"
#include
"account_const.h"
#include
"lib/utils.h"
int
main
(
void
)
{
DRing
::
init
(
DRing
::
InitFlag
(
DRing
::
DRING_FLAG_DEBUG
|
DRing
::
DRING_FLAG_CONSOLE_LOG
));
if
(
not
jami
::
Manager
::
instance
().
initialized
)
{
assert
(
DRing
::
start
(
"dring-sample.yml"
));
}
auto
actors
=
load_actors_and_wait_for_announcement
(
"actors/alice-bob.yml"
);
auto
alice
=
actors
[
"alice"
];
auto
bob
=
actors
[
"bob"
];
auto
aliceAccount
=
jami
::
Manager
::
instance
().
getAccount
<
jami
::
JamiAccount
>
(
alice
);
auto
bobAccount
=
jami
::
Manager
::
instance
().
getAccount
<
jami
::
JamiAccount
>
(
bob
);
auto
aliceUri
=
aliceAccount
->
getUsername
();
auto
bobUri
=
bobAccount
->
getUsername
();
std
::
map
<
std
::
string
,
std
::
shared_ptr
<
DRing
::
CallbackWrapperBase
>>
confHandlers
;
std
::
atomic_bool
callReceived
{
false
};
std
::
mutex
mtx
;
std
::
unique_lock
<
std
::
mutex
>
lk
{
mtx
};
std
::
condition_variable
cv
;
confHandlers
.
insert
(
DRing
::
exportable_callback
<
DRing
::
CallSignal
::
IncomingCall
>
(
[
&
](
const
std
::
string
&
,
const
std
::
string
&
,
const
std
::
string
&
)
{
callReceived
=
true
;
cv
.
notify_one
();
}));
DRing
::
registerSignalHandlers
(
confHandlers
);
auto
call
=
aliceAccount
->
newOutgoingCall
(
bobUri
);
assert
(
cv
.
wait_for
(
lk
,
std
::
chrono
::
seconds
(
30
),
[
&
]
{
return
callReceived
.
load
();
}));
std
::
this_thread
::
sleep_for
(
std
::
chrono
::
seconds
(
60
));
wait_for_removal_of
({
alice
,
bob
});
DRing
::
fini
();
return
0
;
}
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment