Skip to content

Commit c75c984

Browse files
committed
Merge pull request from GHSA-gv9r-qcjc-5hj7
* Filter JSONP callback function name. v5.0.210,v6.0.121 * Add utest. * Refine utest
1 parent ee6a68d commit c75c984

File tree

7 files changed

+80
-5
lines changed

7 files changed

+80
-5
lines changed

trunk/configure

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -464,7 +464,7 @@ if [[ $SRS_UTEST == YES ]]; then
464464
MODULE_FILES=("srs_utest" "srs_utest_amf0" "srs_utest_kernel" "srs_utest_core"
465465
"srs_utest_config" "srs_utest_rtmp" "srs_utest_http" "srs_utest_avc" "srs_utest_reload"
466466
"srs_utest_mp4" "srs_utest_service" "srs_utest_app" "srs_utest_rtc" "srs_utest_config2"
467-
"srs_utest_protocol" "srs_utest_protocol2" "srs_utest_kernel2")
467+
"srs_utest_protocol" "srs_utest_protocol2" "srs_utest_kernel2" "srs_utest_protocol3")
468468
if [[ $SRS_SRT == YES ]]; then
469469
MODULE_FILES+=("srs_utest_srt")
470470
fi

trunk/doc/CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ The changelog for SRS.
77
<a name="v5-changes"></a>
88

99
## SRS 5.0 Changelog
10+
* v5.0, 2024-03-26, Filter JSONP callback function name. v5.0.210
1011
* v5.0, 2024-03-19, Merge [#3990](https://github.com/ossrs/srs/pull/3990): System: Disable feature that obtains versions and check features status. v5.0.209 (#3990)
1112
* v5.0, 2024-02-06, Merge [#3920](https://github.com/ossrs/srs/pull/3920): WHIP: Fix bug for converting WHIP to RTMP/HLS. v5.0.208 (#3920)
1213
* v5.0, 2024-02-05, Merge [#3925](https://github.com/ossrs/srs/pull/3925): RTC: Fix video and audio track pt_ is not change in player before publisher. v5.0.207 (#3925)

trunk/src/core/srs_core_version5.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,6 @@
99

1010
#define VERSION_MAJOR 5
1111
#define VERSION_MINOR 0
12-
#define VERSION_REVISION 209
12+
#define VERSION_REVISION 210
1313

1414
#endif

trunk/src/kernel/srs_kernel_error.hpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -323,6 +323,7 @@
323323
XX(ERROR_GB_SSRC_GENERATE , 4051, "GbSsrcGenerate", "Failed to generate SSRC for GB28181") \
324324
XX(ERROR_GB_CONFIG , 4052, "GbConfig", "Invalid configuration for GB28181") \
325325
XX(ERROR_GB_TIMEOUT , 4053, "GbTimeout", "SIP or media connection timeout for GB28181") \
326+
XX(ERROR_HTTP_JSONP , 4058, "HttpJsonp", "Invalid callback for JSONP")
326327

327328
/**************************************************/
328329
/* RTC protocol error. */

trunk/src/protocol/srs_protocol_http_conn.cpp

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -332,6 +332,20 @@ void SrsHttpMessage::set_header(SrsHttpHeader* header, bool keep_alive)
332332
}
333333
}
334334

335+
// For callback function name, only allow [a-zA-Z0-9_-.] characters.
336+
bool srs_is_valid_jsonp_callback(std::string callback)
337+
{
338+
for (int i = 0; i < (int)callback.length(); i++) {
339+
char ch = callback.at(i);
340+
bool is_alpha_beta = (ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z');
341+
bool is_number = (ch >= '0' && ch <= '9');
342+
if (!is_alpha_beta && !is_number && ch != '.' && ch != '_' && ch != '-') {
343+
return false;
344+
}
345+
}
346+
return true;
347+
}
348+
335349
srs_error_t SrsHttpMessage::set_url(string url, bool allow_jsonp)
336350
{
337351
srs_error_t err = srs_success;
@@ -373,12 +387,16 @@ srs_error_t SrsHttpMessage::set_url(string url, bool allow_jsonp)
373387

374388
// parse jsonp request message.
375389
if (allow_jsonp) {
376-
if (!query_get("callback").empty()) {
377-
jsonp = true;
378-
}
390+
string callback= query_get("callback");
391+
jsonp = !callback.empty();
392+
379393
if (jsonp) {
380394
jsonp_method = query_get("method");
381395
}
396+
397+
if (!srs_is_valid_jsonp_callback(callback)) {
398+
return srs_error_new(ERROR_HTTP_JSONP, "invalid callback=%s", callback.c_str());
399+
}
382400
}
383401

384402
return err;
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
//
2+
// Copyright (c) 2013-2024 The SRS Authors
3+
//
4+
// SPDX-License-Identifier: MIT
5+
//
6+
#include <srs_utest_protocol3.hpp>
7+
8+
using namespace std;
9+
10+
#include <srs_kernel_error.hpp>
11+
#include <srs_core_autofree.hpp>
12+
#include <srs_protocol_utility.hpp>
13+
#include <srs_protocol_rtmp_msg_array.hpp>
14+
#include <srs_protocol_rtmp_stack.hpp>
15+
#include <srs_kernel_utility.hpp>
16+
#include <srs_app_st.hpp>
17+
#include <srs_protocol_amf0.hpp>
18+
#include <srs_protocol_rtmp_stack.hpp>
19+
#include <srs_protocol_http_conn.hpp>
20+
#include <srs_protocol_protobuf.hpp>
21+
#include <srs_kernel_buffer.hpp>
22+
23+
extern bool srs_is_valid_jsonp_callback(std::string callback);
24+
25+
VOID TEST(ProtocolHttpTest, JsonpCallbackName)
26+
{
27+
EXPECT_TRUE(srs_is_valid_jsonp_callback(""));
28+
EXPECT_TRUE(srs_is_valid_jsonp_callback("callback"));
29+
EXPECT_TRUE(srs_is_valid_jsonp_callback("Callback"));
30+
EXPECT_TRUE(srs_is_valid_jsonp_callback("Callback1234567890"));
31+
EXPECT_TRUE(srs_is_valid_jsonp_callback("Callback-1234567890"));
32+
EXPECT_TRUE(srs_is_valid_jsonp_callback("Callback_1234567890"));
33+
EXPECT_TRUE(srs_is_valid_jsonp_callback("Callback.1234567890"));
34+
EXPECT_TRUE(srs_is_valid_jsonp_callback("Callback1234567890-_."));
35+
EXPECT_FALSE(srs_is_valid_jsonp_callback("callback()//"));
36+
EXPECT_FALSE(srs_is_valid_jsonp_callback("callback!"));
37+
EXPECT_FALSE(srs_is_valid_jsonp_callback("callback;"));
38+
}
39+
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
//
2+
// Copyright (c) 2013-2024 The SRS Authors
3+
//
4+
// SPDX-License-Identifier: MIT
5+
//
6+
7+
#ifndef SRS_UTEST_PROTOCOL3_HPP
8+
#define SRS_UTEST_PROTOCOL3_HPP
9+
10+
/*
11+
#include <srs_utest_protocol3.hpp>
12+
*/
13+
#include <srs_utest_protocol.hpp>
14+
15+
#endif
16+

0 commit comments

Comments
 (0)