KiCad PCB EDA Suite
Loading...
Searching...
No Matches
test_remote_symbol_download_security.cpp
Go to the documentation of this file.
1
/*
2
* This program source code file is part of KiCad, a free EDA CAD application.
3
*
4
* Copyright The KiCad Developers, see AUTHORS.txt for contributors.
5
*
6
* This program is free software; you can redistribute it and/or modify it
7
* under the terms of the GNU General Public License as published by the
8
* Free Software Foundation; either version 3 of the License, or (at your
9
* option) any later version.
10
*
11
* This program is distributed in the hope that it will be useful,
12
* but WITHOUT ANY WARRANTY; without even the implied warranty of
13
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14
* General Public License for more details.
15
*
16
* You should have received a copy of the GNU General Public License along
17
* with this program. If not, see <http://www.gnu.org/licenses/>.
18
*/
19
20
#include <boost/test/unit_test.hpp>
21
22
#include <
remote_provider_metadata.h
>
23
#include <
remote_symbol_download_manager.h
>
24
25
26
namespace
27
{
28
REMOTE_PROVIDER_METADATA
provider()
29
{
30
REMOTE_PROVIDER_METADATA
metadata;
31
metadata.
api_base_url
= wxString(
"https://provider.example.test/api"
);
32
metadata.
panel_url
= wxString(
"https://provider.example.test/app"
);
33
metadata.
max_download_bytes
= 4096;
34
return
metadata;
35
}
36
37
38
REMOTE_PROVIDER_PART_ASSET
baseAsset()
39
{
40
REMOTE_PROVIDER_PART_ASSET
asset;
41
asset.
asset_type
= wxString(
"symbol"
);
42
asset.
name
= wxString(
"test.kicad_sym"
);
43
asset.
content_type
= wxString(
"application/x-kicad-symbol"
);
44
asset.
size_bytes
= 5;
45
asset.
sha256
= wxString(
"5994471abb01112afcc18159f6cc74b4f511b99806da59b3caf5a9c173cacfc5"
);
46
asset.
download_url
= wxString(
"https://provider.example.test/downloads/test.kicad_sym"
);
47
asset.
required
=
true
;
48
asset.
target_library
= wxString(
"Device"
);
49
asset.
target_name
= wxString(
"R"
);
50
return
asset;
51
}
52
}
// namespace
53
54
55
BOOST_AUTO_TEST_SUITE
( RemoteSymbolDownloadSecurityTests )
56
57
BOOST_AUTO_TEST_CASE
( DigestMismatchRejected )
58
{
59
REMOTE_SYMBOL_DOWNLOAD_MANAGER
manager(
60
[&](
const
wxString& aUrl,
REMOTE_SYMBOL_FETCH_RESPONSE
& aResponse, wxString& aError )
61
{
62
wxUnusedVar( aUrl );
63
wxUnusedVar( aError );
64
aResponse.
status_code
= 200;
65
aResponse.
content_type
= wxString(
"application/x-kicad-symbol"
);
66
aResponse.
payload
= {
'b'
,
'a'
,
'd'
,
'd'
,
'!'
};
67
return
true
;
68
} );
69
70
REMOTE_SYMBOL_FETCHED_ASSET
fetched;
71
wxString error;
72
BOOST_CHECK( !manager.DownloadAndVerify( provider(), baseAsset(), 10, fetched, error ) );
73
BOOST_CHECK( error.Contains( wxString(
"digest"
) ) );
74
}
75
76
BOOST_AUTO_TEST_CASE
( SizeMismatchRejected )
77
{
78
REMOTE_SYMBOL_DOWNLOAD_MANAGER
manager(
79
[&](
const
wxString& aUrl,
REMOTE_SYMBOL_FETCH_RESPONSE
& aResponse, wxString& aError )
80
{
81
wxUnusedVar( aUrl );
82
wxUnusedVar( aError );
83
aResponse.
status_code
= 200;
84
aResponse.
content_type
= wxString(
"application/x-kicad-symbol"
);
85
aResponse.
payload
= {
'1'
,
'2'
,
'3'
,
'4'
};
86
return
true
;
87
} );
88
89
REMOTE_SYMBOL_FETCHED_ASSET
fetched;
90
wxString error;
91
BOOST_CHECK( !manager.DownloadAndVerify( provider(), baseAsset(), 10, fetched, error ) );
92
BOOST_CHECK( error.Contains( wxString(
"size"
) ) );
93
}
94
95
BOOST_AUTO_TEST_CASE
( ContentTypeMismatchRejected )
96
{
97
REMOTE_SYMBOL_DOWNLOAD_MANAGER
manager(
98
[&](
const
wxString& aUrl,
REMOTE_SYMBOL_FETCH_RESPONSE
& aResponse, wxString& aError )
99
{
100
wxUnusedVar( aUrl );
101
wxUnusedVar( aError );
102
aResponse.
status_code
= 200;
103
aResponse.
content_type
= wxString(
"text/plain"
);
104
aResponse.
payload
= {
'1'
,
'2'
,
'3'
,
'4'
,
'5'
};
105
return
true
;
106
} );
107
108
REMOTE_SYMBOL_FETCHED_ASSET
fetched;
109
wxString error;
110
BOOST_CHECK( !manager.DownloadAndVerify( provider(), baseAsset(), 10, fetched, error ) );
111
BOOST_CHECK( error.Contains( wxString(
"content type"
) ) );
112
}
113
114
BOOST_AUTO_TEST_CASE
( OversizeAssetRejectedBeforeImport )
115
{
116
REMOTE_PROVIDER_PART_ASSET
asset = baseAsset();
117
asset.
size_bytes
= 32;
118
119
REMOTE_SYMBOL_DOWNLOAD_MANAGER
manager(
120
[&](
const
wxString& aUrl,
REMOTE_SYMBOL_FETCH_RESPONSE
& aResponse, wxString& aError )
121
{
122
wxUnusedVar( aUrl );
123
wxUnusedVar( aError );
124
aResponse.
status_code
= 200;
125
aResponse.
content_type
= wxString(
"application/x-kicad-symbol"
);
126
aResponse.
payload
= std::vector<uint8_t>( 32,
'x'
);
127
return
true
;
128
} );
129
130
REMOTE_SYMBOL_FETCHED_ASSET
fetched;
131
wxString error;
132
BOOST_CHECK( !manager.DownloadAndVerify( provider(), asset, 16, fetched, error ) );
133
BOOST_CHECK( error.Contains( wxString(
"limit"
) ) );
134
}
135
136
BOOST_AUTO_TEST_CASE
( UrlBasedAssetsRequireDigest )
137
{
138
REMOTE_PROVIDER_PART_ASSET
asset = baseAsset();
139
asset.
sha256
.clear();
140
141
REMOTE_SYMBOL_DOWNLOAD_MANAGER
manager(
142
[&](
const
wxString& aUrl,
REMOTE_SYMBOL_FETCH_RESPONSE
& aResponse, wxString& aError )
143
{
144
wxUnusedVar( aUrl );
145
wxUnusedVar( aResponse );
146
wxUnusedVar( aError );
147
return
true
;
148
} );
149
150
REMOTE_SYMBOL_FETCHED_ASSET
fetched;
151
wxString error;
152
BOOST_CHECK( !manager.DownloadAndVerify( provider(), asset, 10, fetched, error ) );
153
BOOST_CHECK( error.Contains( wxString(
"sha256"
) ) );
154
}
155
156
BOOST_AUTO_TEST_CASE
( UrlBasedAssetsMustStayOnProviderOrigin )
157
{
158
REMOTE_PROVIDER_PART_ASSET
asset = baseAsset();
159
asset.
download_url
= wxString(
"https://evil.example.test/downloads/test.kicad_sym"
);
160
161
REMOTE_SYMBOL_DOWNLOAD_MANAGER
manager(
162
[&](
const
wxString& aUrl,
REMOTE_SYMBOL_FETCH_RESPONSE
& aResponse, wxString& aError )
163
{
164
wxUnusedVar( aUrl );
165
wxUnusedVar( aResponse );
166
wxUnusedVar( aError );
167
return
true
;
168
} );
169
170
REMOTE_SYMBOL_FETCHED_ASSET
fetched;
171
wxString error;
172
BOOST_CHECK( !manager.DownloadAndVerify( provider(), asset, 10, fetched, error ) );
173
BOOST_CHECK( error.Contains( wxString(
"origin"
) ) );
174
}
175
176
BOOST_AUTO_TEST_SUITE_END
()
REMOTE_SYMBOL_DOWNLOAD_MANAGER
Definition
remote_symbol_download_manager.h:47
remote_provider_metadata.h
remote_symbol_download_manager.h
REMOTE_PROVIDER_METADATA
Definition
remote_provider_metadata.h:48
REMOTE_PROVIDER_METADATA::panel_url
wxString panel_url
Definition
remote_provider_metadata.h:52
REMOTE_PROVIDER_METADATA::max_download_bytes
long long max_download_bytes
Definition
remote_provider_metadata.h:59
REMOTE_PROVIDER_METADATA::api_base_url
wxString api_base_url
Definition
remote_provider_metadata.h:51
REMOTE_PROVIDER_PART_ASSET
Definition
remote_provider_models.h:79
REMOTE_PROVIDER_PART_ASSET::sha256
wxString sha256
Definition
remote_provider_models.h:86
REMOTE_PROVIDER_PART_ASSET::content_type
wxString content_type
Definition
remote_provider_models.h:84
REMOTE_PROVIDER_PART_ASSET::size_bytes
long long size_bytes
Definition
remote_provider_models.h:85
REMOTE_PROVIDER_PART_ASSET::target_library
wxString target_library
Definition
remote_provider_models.h:82
REMOTE_PROVIDER_PART_ASSET::asset_type
wxString asset_type
Definition
remote_provider_models.h:80
REMOTE_PROVIDER_PART_ASSET::target_name
wxString target_name
Definition
remote_provider_models.h:83
REMOTE_PROVIDER_PART_ASSET::required
bool required
Definition
remote_provider_models.h:88
REMOTE_PROVIDER_PART_ASSET::download_url
wxString download_url
Definition
remote_provider_models.h:87
REMOTE_PROVIDER_PART_ASSET::name
wxString name
Definition
remote_provider_models.h:81
REMOTE_SYMBOL_FETCHED_ASSET
Definition
remote_symbol_download_manager.h:40
REMOTE_SYMBOL_FETCH_RESPONSE
Definition
remote_symbol_download_manager.h:32
REMOTE_SYMBOL_FETCH_RESPONSE::payload
std::vector< uint8_t > payload
Definition
remote_symbol_download_manager.h:35
REMOTE_SYMBOL_FETCH_RESPONSE::status_code
int status_code
Definition
remote_symbol_download_manager.h:33
REMOTE_SYMBOL_FETCH_RESPONSE::content_type
wxString content_type
Definition
remote_symbol_download_manager.h:34
BOOST_AUTO_TEST_CASE
BOOST_AUTO_TEST_CASE(HorizontalAlignment)
Definition
test_api_enums.cpp:136
BOOST_AUTO_TEST_SUITE
BOOST_AUTO_TEST_SUITE(CadstarPartParser)
BOOST_AUTO_TEST_SUITE_END
BOOST_AUTO_TEST_SUITE_END()
BOOST_AUTO_TEST_CASE
BOOST_AUTO_TEST_CASE(DigestMismatchRejected)
Definition
test_remote_symbol_download_security.cpp:57
src
qa
tests
eeschema
test_remote_symbol_download_security.cpp
Generated on Fri Mar 13 2026 00:07:43 for KiCad PCB EDA Suite by
1.13.2