prevent possible segfault std::string if value NULL

This commit is contained in:
Jacek Jendrzej
2015-03-20 11:57:12 +01:00
parent 632ecc3b1e
commit 40fe7fae34
5 changed files with 45 additions and 18 deletions

View File

@@ -271,12 +271,15 @@ void deleteOldfileEvents(char *epgdir)
filter = filter->xmlChildrenNode; filter = filter->xmlChildrenNode;
while (filter) { while (filter) {
filename = xmlGetAttribute(filter, "name"); const char * name = xmlGetAttribute(filter, "name");
file = epgdir; if(name){
file +="/"; filename=name;
file +=filename; file = epgdir;
unlink(file.c_str()); file +="/";
filter = filter->xmlNextNode; file +=filename;
unlink(file.c_str());
filter = filter->xmlNextNode;
}
} }
xmlFreeDoc(filter_parser); xmlFreeDoc(filter_parser);
} }
@@ -313,7 +316,10 @@ void *insertEventsfromFile(void * data)
eventfile = xmlDocGetRootElement(index_parser)->xmlChildrenNode; eventfile = xmlDocGetRootElement(index_parser)->xmlChildrenNode;
while (eventfile) { while (eventfile) {
filename = xmlGetAttribute(eventfile, "name"); const char * name = xmlGetAttribute(eventfile, "name");
if(name)
filename=name;
epgname = epg_dir + filename; epgname = epg_dir + filename;
if (!(event_parser = parseXmlFile(epgname.c_str()))) { if (!(event_parser = parseXmlFile(epgname.c_str()))) {
dprintf("unable to open %s for reading\n", epgname.c_str()); dprintf("unable to open %s for reading\n", epgname.c_str());

View File

@@ -481,7 +481,9 @@ printf("CFileBrowser::readDir_sc: read done, size %d\n", (int)answer.size());
CFile file; CFile file;
if (xml_decode == 1) { if (xml_decode == 1) {
file.Mode = S_IFDIR + 0777 ; file.Mode = S_IFDIR + 0777 ;
file.Name = xmlGetAttribute(element, "name"); const char *eptr = xmlGetAttribute(element, "name");
if(eptr)
file.Name = eptr;
file.Url = sc_get_genre + file.Name; file.Url = sc_get_genre + file.Name;
file.Size = 0; file.Size = 0;
file.Time = 0; file.Time = 0;
@@ -498,8 +500,14 @@ printf("CFileBrowser::readDir_sc: read done, size %d\n", (int)answer.size());
ptr = xmlGetAttribute(element, "mt"); ptr = xmlGetAttribute(element, "mt");
if (ptr && (strcmp(ptr, "audio/mpeg")==0)) { if (ptr && (strcmp(ptr, "audio/mpeg")==0)) {
file.Mode = S_IFREG + 0777 ; file.Mode = S_IFREG + 0777 ;
file.Name = xmlGetAttribute(element, "name"); const char *aptr = xmlGetAttribute(element, "name");
file.Url = sc_tune_in_base + tunein_base + (std::string)"?id=" + xmlGetAttribute(element, "id") + (std::string)"&k=" + g_settings.shoutcast_dev_id; if(aptr)
file.Name = aptr;
const char *idptr = xmlGetAttribute(element, "id");
std::string id;
if(idptr)
id = idptr;
file.Url = sc_tune_in_base + tunein_base + (std::string)"?id=" + id + (std::string)"&k=" + g_settings.shoutcast_dev_id;
//printf("adding %s (%s)\n", file.Name.c_str(), file.Url.c_str()); //printf("adding %s (%s)\n", file.Name.c_str(), file.Url.c_str());
ptr = xmlGetAttribute(element, "br"); ptr = xmlGetAttribute(element, "br");
if (ptr) { if (ptr) {

View File

@@ -146,15 +146,21 @@ CMenuOptionStringChooser* COsdLangSetup::getTzItems()
{ {
if (!strcmp(xmlGetName(search), "zone")) if (!strcmp(xmlGetName(search), "zone"))
{ {
std::string name = xmlGetAttribute(search, "name"); const char* zptr = xmlGetAttribute(search, "zone");
std::string zone = xmlGetAttribute(search, "zone"); std::string zone;
if(zptr)
zone = zptr;
//printf("Timezone: %s -> %s\n", name.c_str(), zone.c_str()); //printf("Timezone: %s -> %s\n", name.c_str(), zone.c_str());
if (access("/usr/share/zoneinfo/" + zone, R_OK)) if (access("/usr/share/zoneinfo/" + zone, R_OK))
printf("[neutrino] timezone file '%s' not installed\n", zone.c_str()); printf("[neutrino] timezone file '%s' not installed\n", zone.c_str());
else else
{ {
tzSelect->addOption(name); const char* ptr = xmlGetAttribute(search, "name");
found = true; if(ptr){
std::string name = ptr;
tzSelect->addOption(name);
found = true;
}
} }
} }
search = search->xmlNextNode; search = search->xmlNextNode;
@@ -172,7 +178,6 @@ CMenuOptionStringChooser* COsdLangSetup::getTzItems()
return tzSelect; return tzSelect;
} }
//shows locale setup for language selection //shows locale setup for language selection
void COsdLangSetup::showLanguageSetup(CMenuWidget *osdl_setup) void COsdLangSetup::showLanguageSetup(CMenuWidget *osdl_setup)
{ {

View File

@@ -453,9 +453,14 @@ bool CTZChangeNotifier::changeNotify(const neutrino_locale_t, void * Data)
xmlNodePtr search = xmlDocGetRootElement(parser)->xmlChildrenNode; xmlNodePtr search = xmlDocGetRootElement(parser)->xmlChildrenNode;
while (search) { while (search) {
if (!strcmp(xmlGetName(search), "zone")) { if (!strcmp(xmlGetName(search), "zone")) {
name = xmlGetAttribute(search, "name"); const char *nptr = xmlGetAttribute(search, "name");
if(nptr)
name = nptr;
if(g_settings.timezone == name) { if(g_settings.timezone == name) {
zone = xmlGetAttribute(search, "zone"); const char *zptr = xmlGetAttribute(search, "zone");
if(zptr)
zone = zptr;
if (!access("/usr/share/zoneinfo/" + zone, R_OK)) if (!access("/usr/share/zoneinfo/" + zone, R_OK))
found = true; found = true;
break; break;

View File

@@ -443,7 +443,10 @@ void CServiceManager::ParseChannels(xmlNodePtr node, const t_transport_stream_id
while ((node = xmlGetNextOccurence(node, "S")) != NULL) { while ((node = xmlGetNextOccurence(node, "S")) != NULL) {
*have_ptr = 1; *have_ptr = 1;
t_service_id service_id = xmlGetNumericAttribute(node, "i", 16); t_service_id service_id = xmlGetNumericAttribute(node, "i", 16);
std::string name = xmlGetAttribute(node, "n"); std::string name;
const char *nptr = xmlGetAttribute(node, "n");
if(nptr)
name = nptr;
uint8_t service_type = xmlGetNumericAttribute(node, "t", 16); uint8_t service_type = xmlGetNumericAttribute(node, "t", 16);
uint16_t vpid = xmlGetNumericAttribute(node, "v", 16); uint16_t vpid = xmlGetNumericAttribute(node, "v", 16);
uint16_t apid = xmlGetNumericAttribute(node, "a", 16); uint16_t apid = xmlGetNumericAttribute(node, "a", 16);