mirror of https://github.com/BOINC/boinc.git
- client: check return value of FILE_REF when parse project file.
Fixes crashing bug. svn path=/trunk/boinc/; revision=24579
This commit is contained in:
parent
14cf8873b0
commit
0e823f6734
|
@ -8384,3 +8384,12 @@ Charlie 11 Nov 2011
|
||||||
|
|
||||||
clientgui/
|
clientgui/
|
||||||
sg_TaskPanel.cpp
|
sg_TaskPanel.cpp
|
||||||
|
|
||||||
|
David 11 Nov 2011
|
||||||
|
- client: check return value of FILE_REF when parse project file.
|
||||||
|
Fixes crashing bug.
|
||||||
|
|
||||||
|
client/
|
||||||
|
client_types.cpp
|
||||||
|
ssim/
|
||||||
|
ssim.cpp
|
||||||
|
|
|
@ -667,6 +667,7 @@ void FILE_XFER_BACKOFF::file_xfer_succeeded() {
|
||||||
int PROJECT::parse_project_files(XML_PARSER& xp, bool delete_existing_symlinks) {
|
int PROJECT::parse_project_files(XML_PARSER& xp, bool delete_existing_symlinks) {
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
char project_dir[256], path[256];
|
char project_dir[256], path[256];
|
||||||
|
int retval;
|
||||||
|
|
||||||
if (delete_existing_symlinks) {
|
if (delete_existing_symlinks) {
|
||||||
// delete current sym links.
|
// delete current sym links.
|
||||||
|
@ -687,8 +688,10 @@ int PROJECT::parse_project_files(XML_PARSER& xp, bool delete_existing_symlinks)
|
||||||
if (xp.match_tag("/project_files")) return 0;
|
if (xp.match_tag("/project_files")) return 0;
|
||||||
if (xp.match_tag("file_ref")) {
|
if (xp.match_tag("file_ref")) {
|
||||||
FILE_REF file_ref;
|
FILE_REF file_ref;
|
||||||
file_ref.parse(xp);
|
retval = file_ref.parse(xp);
|
||||||
project_files.push_back(file_ref);
|
if (!retval) {
|
||||||
|
project_files.push_back(file_ref);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
if (log_flags.unparsed_xml) {
|
if (log_flags.unparsed_xml) {
|
||||||
msg_printf(0, MSG_INFO,
|
msg_printf(0, MSG_INFO,
|
||||||
|
@ -1486,7 +1489,7 @@ int FILE_REF::parse(XML_PARSER& xp) {
|
||||||
if (xp.parse_bool("no_validate", temp)) continue;
|
if (xp.parse_bool("no_validate", temp)) continue;
|
||||||
if (log_flags.unparsed_xml) {
|
if (log_flags.unparsed_xml) {
|
||||||
msg_printf(0, MSG_INFO,
|
msg_printf(0, MSG_INFO,
|
||||||
"[unparsed_xml] FILE_REF::parse(): unrecognized: %s\n",
|
"[unparsed_xml] FILE_REF::parse(): unrecognized: '%s'\n",
|
||||||
xp.parsed_tag
|
xp.parsed_tag
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,9 +11,9 @@ using std::set;
|
||||||
// this many packets per meta-packet
|
// this many packets per meta-packet
|
||||||
#define N 10
|
#define N 10
|
||||||
// need this many to reconstruct the meta-packet
|
// need this many to reconstruct the meta-packet
|
||||||
#define METAK 15
|
#define META_K 15
|
||||||
// similar, meta-packets per file
|
// similar, meta-packets per file
|
||||||
#define METAN 10
|
#define META_N 10
|
||||||
|
|
||||||
#define HOSTS_PER_DAY 10.
|
#define HOSTS_PER_DAY 10.
|
||||||
#define HOST_LIFE_MEAN 100.*86400
|
#define HOST_LIFE_MEAN 100.*86400
|
||||||
|
@ -38,6 +38,8 @@ struct HOST : public EVENT {
|
||||||
double upload_bytes_sec;
|
double upload_bytes_sec;
|
||||||
double download_bytes_sec;
|
double download_bytes_sec;
|
||||||
virtual void handle() {
|
virtual void handle() {
|
||||||
|
// the host has departed
|
||||||
|
//
|
||||||
set<HOST*>::iterator i = hosts.find(this);
|
set<HOST*>::iterator i = hosts.find(this);
|
||||||
hosts.erase(i);
|
hosts.erase(i);
|
||||||
}
|
}
|
||||||
|
@ -62,15 +64,16 @@ struct REPORT_STATS : public EVENT {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
struct PACKET_HOST : public EVENT {
|
// a packet is associated with at most one host
|
||||||
enum {DOWNLOADING, PRESENT, UPLOADING} state;
|
//
|
||||||
virtual void handle() {
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
struct PACKET {
|
struct PACKET {
|
||||||
set<PACKET_HOST*> packet_hosts;
|
enum {DOWNLOADING, PRESENT, UPLOADING} state;
|
||||||
|
HOST* host;
|
||||||
bool present; // present on server
|
bool present; // present on server
|
||||||
|
virtual void handle() {
|
||||||
|
// transfer has finished
|
||||||
|
//
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
struct META_PACKET {
|
struct META_PACKET {
|
||||||
|
@ -84,12 +87,13 @@ struct DFILE : EVENT {
|
||||||
// hosts that don't have any packets of this file
|
// hosts that don't have any packets of this file
|
||||||
int nmeta_packets_present;
|
int nmeta_packets_present;
|
||||||
virtual void handle() {
|
virtual void handle() {
|
||||||
for (int i=0; i<META_N; i++) {
|
for (int i=0; i<META_K; i++) {
|
||||||
META_PACKET* mp = new META_PACKET;
|
META_PACKET* mp = new META_PACKET;
|
||||||
mp->present = true;
|
mp->npackets_present = K;
|
||||||
meta_packts.push_back(mp);
|
meta_packets.push_back(mp);
|
||||||
for (int j=0; j<N; j++) {
|
for (int j=0; j<K; j++) {
|
||||||
PACKET* p = new PACKET;
|
PACKET* p = new PACKET;
|
||||||
|
p->present = true;
|
||||||
mp->packets.push_back(p);
|
mp->packets.push_back(p);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue