1
0
Fork 0
mirror of https://github.com/ossrs/srs.git synced 2025-03-09 15:49:59 +00:00

Support address sanitizer for utest and fix some leaks. (#3242)

* MP4: Fix memory leak when error.

* Kernel: Support free global objects for utest.

* HTTP: Fix memory leak when error.

* MP4: Support more sample rate for audio.

* RTMP: Support free field for utest.

* UTest: Support address sanitizer.
This commit is contained in:
Winlin 2022-11-18 11:19:01 +08:00 committed by GitHub
parent be0241efdb
commit 368356c223
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
18 changed files with 360 additions and 154 deletions

View file

@ -689,12 +689,14 @@ srs_error_t SrsHttpServeMux::handle(std::string pattern, ISrsHttpHandler* handle
srs_assert(handler);
if (pattern.empty()) {
srs_freep(handler);
return srs_error_new(ERROR_HTTP_PATTERN_EMPTY, "empty pattern");
}
if (entries.find(pattern) != entries.end()) {
SrsHttpMuxEntry* exists = entries[pattern];
if (exists->explicit_match) {
srs_freep(handler);
return srs_error_new(ERROR_HTTP_PATTERN_DUPLICATED, "pattern=%s exists", pattern.c_str());
}
}

View file

@ -3331,6 +3331,12 @@ SrsCreateStreamPacket::~SrsCreateStreamPacket()
srs_freep(command_object);
}
void SrsCreateStreamPacket::set_command_object(SrsAmf0Any* v)
{
srs_freep(command_object);
command_object = v;
}
srs_error_t SrsCreateStreamPacket::decode(SrsBuffer* stream)
{
srs_error_t err = srs_success;
@ -3509,6 +3515,12 @@ SrsFMLEStartPacket::~SrsFMLEStartPacket()
srs_freep(command_object);
}
void SrsFMLEStartPacket::set_command_object(SrsAmf0Any* v)
{
srs_freep(command_object);
command_object = v;
}
srs_error_t SrsFMLEStartPacket::decode(SrsBuffer* stream)
{
srs_error_t err = srs_success;
@ -3613,6 +3625,18 @@ SrsFMLEStartResPacket::~SrsFMLEStartResPacket()
srs_freep(args);
}
void SrsFMLEStartResPacket::set_args(SrsAmf0Any* v)
{
srs_freep(args);
args = v;
}
void SrsFMLEStartResPacket::set_command_object(SrsAmf0Any* v)
{
srs_freep(command_object);
command_object = v;
}
srs_error_t SrsFMLEStartResPacket::decode(SrsBuffer* stream)
{
srs_error_t err = srs_success;
@ -3691,6 +3715,12 @@ SrsPublishPacket::~SrsPublishPacket()
srs_freep(command_object);
}
void SrsPublishPacket::set_command_object(SrsAmf0Any* v)
{
srs_freep(command_object);
command_object = v;
}
srs_error_t SrsPublishPacket::decode(SrsBuffer* stream)
{
srs_error_t err = srs_success;
@ -3961,6 +3991,18 @@ SrsPlayResPacket::~SrsPlayResPacket()
srs_freep(desc);
}
void SrsPlayResPacket::set_command_object(SrsAmf0Any* v)
{
srs_freep(command_object);
command_object = v;
}
void SrsPlayResPacket::set_desc(SrsAmf0Object* v)
{
srs_freep(desc);
desc = v;
}
int SrsPlayResPacket::get_prefer_cid()
{
return RTMP_CID_OverStream;
@ -4012,6 +4054,12 @@ SrsOnBWDonePacket::~SrsOnBWDonePacket()
srs_freep(args);
}
void SrsOnBWDonePacket::set_args(SrsAmf0Any* v)
{
srs_freep(args);
args = v;
}
int SrsOnBWDonePacket::get_prefer_cid()
{
return RTMP_CID_OverConnection;
@ -4061,6 +4109,18 @@ SrsOnStatusCallPacket::~SrsOnStatusCallPacket()
srs_freep(data);
}
void SrsOnStatusCallPacket::set_args(SrsAmf0Any* v)
{
srs_freep(args);
args = v;
}
void SrsOnStatusCallPacket::set_data(SrsAmf0Object* v)
{
srs_freep(data);
data = v;
}
int SrsOnStatusCallPacket::get_prefer_cid()
{
return RTMP_CID_OverStream;
@ -4111,6 +4171,12 @@ SrsOnStatusDataPacket::~SrsOnStatusDataPacket()
srs_freep(data);
}
void SrsOnStatusDataPacket::set_data(SrsAmf0Object* v)
{
srs_freep(data);
data = v;
}
int SrsOnStatusDataPacket::get_prefer_cid()
{
return RTMP_CID_OverStream;
@ -4198,6 +4264,12 @@ SrsOnMetaDataPacket::~SrsOnMetaDataPacket()
srs_freep(metadata);
}
void SrsOnMetaDataPacket::set_metadata(SrsAmf0Object* v)
{
srs_freep(metadata);
metadata = v;
}
srs_error_t SrsOnMetaDataPacket::decode(SrsBuffer* stream)
{
srs_error_t err = srs_success;

View file

@ -908,6 +908,8 @@ public:
public:
SrsCreateStreamPacket();
virtual ~SrsCreateStreamPacket();
public:
void set_command_object(SrsAmf0Any* v);
// Decode functions for concrete packet to override.
public:
virtual srs_error_t decode(SrsBuffer* stream);
@ -982,6 +984,8 @@ public:
public:
SrsFMLEStartPacket();
virtual ~SrsFMLEStartPacket();
public:
void set_command_object(SrsAmf0Any* v);
// Decode functions for concrete packet to override.
public:
virtual srs_error_t decode(SrsBuffer* stream);
@ -1014,6 +1018,9 @@ public:
public:
SrsFMLEStartResPacket(double _transaction_id);
virtual ~SrsFMLEStartResPacket();
public:
void set_args(SrsAmf0Any* v);
void set_command_object(SrsAmf0Any* v);
// Decode functions for concrete packet to override.
public:
virtual srs_error_t decode(SrsBuffer* stream);
@ -1057,6 +1064,8 @@ public:
public:
SrsPublishPacket();
virtual ~SrsPublishPacket();
public:
void set_command_object(SrsAmf0Any* v);
// Decode functions for concrete packet to override.
public:
virtual srs_error_t decode(SrsBuffer* stream);
@ -1181,6 +1190,9 @@ public:
public:
SrsPlayResPacket();
virtual ~SrsPlayResPacket();
public:
void set_command_object(SrsAmf0Any* v);
void set_desc(SrsAmf0Object* v);
// Encode functions for concrete packet to override.
public:
virtual int get_prefer_cid();
@ -1204,6 +1216,8 @@ public:
public:
SrsOnBWDonePacket();
virtual ~SrsOnBWDonePacket();
public:
void set_args(SrsAmf0Any* v);
// Encode functions for concrete packet to override.
public:
virtual int get_prefer_cid();
@ -1232,6 +1246,9 @@ public:
public:
SrsOnStatusCallPacket();
virtual ~SrsOnStatusCallPacket();
public:
void set_args(SrsAmf0Any* v);
void set_data(SrsAmf0Object* v);
// Encode functions for concrete packet to override.
public:
virtual int get_prefer_cid();
@ -1255,6 +1272,9 @@ public:
public:
SrsOnStatusDataPacket();
virtual ~SrsOnStatusDataPacket();
public:
void set_data(SrsAmf0Object* v);
SrsAmf0Object* get_data();
// Encode functions for concrete packet to override.
public:
virtual int get_prefer_cid();
@ -1303,6 +1323,8 @@ public:
public:
SrsOnMetaDataPacket();
virtual ~SrsOnMetaDataPacket();
public:
void set_metadata(SrsAmf0Object* v);
// Decode functions for concrete packet to override.
public:
virtual srs_error_t decode(SrsBuffer* stream);

View file

@ -665,6 +665,17 @@ bool srs_net_device_is_internet(const sockaddr* addr)
}
vector<SrsIPAddress*> _srs_system_ips;
void srs_free_global_system_ips()
{
vector<SrsIPAddress*>& ips = _srs_system_ips;
// Release previous IPs.
for (int i = 0; i < (int)ips.size(); i++) {
SrsIPAddress* ip = ips[i];
srs_freep(ip);
}
ips.clear();
}
void discover_network_iface(ifaddrs* cur, vector<SrsIPAddress*>& ips, stringstream& ss0, stringstream& ss1, bool ipv6, bool loopback)
{
@ -702,14 +713,10 @@ void discover_network_iface(ifaddrs* cur, vector<SrsIPAddress*>& ips, stringstre
void retrieve_local_ips()
{
vector<SrsIPAddress*>& ips = _srs_system_ips;
// Release previous IPs.
for (int i = 0; i < (int)ips.size(); i++) {
SrsIPAddress* ip = ips[i];
srs_freep(ip);
}
ips.clear();
srs_free_global_system_ips();
vector<SrsIPAddress*>& ips = _srs_system_ips;
// Get the addresses.
ifaddrs* ifap;