winlin

fix the empty config error

@@ -1182,6 +1182,13 @@ int SrsConfig::parse_buffer(_srs_internal::SrsConfigBuffer* buffer) @@ -1182,6 +1182,13 @@ int SrsConfig::parse_buffer(_srs_internal::SrsConfigBuffer* buffer)
1182 if ((ret = root->parse(buffer)) != ERROR_SUCCESS) { 1182 if ((ret = root->parse(buffer)) != ERROR_SUCCESS) {
1183 return ret; 1183 return ret;
1184 } 1184 }
  1185 +
  1186 + // check empty
  1187 + if (root->directives.size() == 0) {
  1188 + ret = ERROR_SYSTEM_CONFIG_INVALID;
  1189 + srs_error("conf is empty, ret=%d", ret);
  1190 + return ret;
  1191 + }
1185 1192
1186 // check root directives. 1193 // check root directives.
1187 for (int i = 0; i < (int)root->directives.size(); i++) { 1194 for (int i = 0; i < (int)root->directives.size(); i++) {
@@ -1200,7 +1207,7 @@ int SrsConfig::parse_buffer(_srs_internal::SrsConfigBuffer* buffer) @@ -1200,7 +1207,7 @@ int SrsConfig::parse_buffer(_srs_internal::SrsConfigBuffer* buffer)
1200 } 1207 }
1201 1208
1202 // check rtmp port specified by directive listen. 1209 // check rtmp port specified by directive listen.
1203 - if (_srs_config->get_listen().size() <= 0) { 1210 + if (get_listen().size() <= 0) {
1204 ret = ERROR_SYSTEM_CONFIG_INVALID; 1211 ret = ERROR_SYSTEM_CONFIG_INVALID;
1205 srs_error("directive \"listen\" is empty, ret=%d", ret); 1212 srs_error("directive \"listen\" is empty, ret=%d", ret);
1206 return ret; 1213 return ret;
@@ -53,6 +53,20 @@ int MockSrsConfigBuffer::fullfill(const char* /*filename*/) @@ -53,6 +53,20 @@ int MockSrsConfigBuffer::fullfill(const char* /*filename*/)
53 return ERROR_SUCCESS; 53 return ERROR_SUCCESS;
54 } 54 }
55 55
  56 +MockSrsConfig::MockSrsConfig()
  57 +{
  58 +}
  59 +
  60 +MockSrsConfig::~MockSrsConfig()
  61 +{
  62 +}
  63 +
  64 +int MockSrsConfig::parse(string buf)
  65 +{
  66 + MockSrsConfigBuffer buffer(buf);
  67 + return parse_buffer(&buffer);
  68 +}
  69 +
56 VOID TEST(ConfigTest, CheckMacros) 70 VOID TEST(ConfigTest, CheckMacros)
57 { 71 {
58 #ifndef SRS_CONSTS_LOCALHOST 72 #ifndef SRS_CONSTS_LOCALHOST
@@ -777,3 +791,9 @@ VOID TEST(ConfigDirectiveTest, ParseLineNormal) @@ -777,3 +791,9 @@ VOID TEST(ConfigDirectiveTest, ParseLineNormal)
777 EXPECT_EQ(0, (int)dir2.directives.size()); 791 EXPECT_EQ(0, (int)dir2.directives.size());
778 EXPECT_EQ(3, (int)dir2.conf_line); 792 EXPECT_EQ(3, (int)dir2.conf_line);
779 } 793 }
  794 +
  795 +VOID TEST(ConfigMainTest, ParseEmpty)
  796 +{
  797 + MockSrsConfig conf;
  798 + EXPECT_TRUE(ERROR_SUCCESS != conf.parse(""));
  799 +}
@@ -42,4 +42,13 @@ public: @@ -42,4 +42,13 @@ public:
42 virtual int fullfill(const char* filename); 42 virtual int fullfill(const char* filename);
43 }; 43 };
44 44
  45 +class MockSrsConfig : public SrsConfig
  46 +{
  47 +public:
  48 + MockSrsConfig();
  49 + virtual ~MockSrsConfig();
  50 +public:
  51 + virtual int parse(std::string buf);
  52 +};
  53 +
45 #endif 54 #endif