Changeset - d56b1627f77a
[Not reviewed]
Merge
0 1 0
vitalyster - 11 years ago 2014-09-04 17:01:21
vitalyster@gmail.com
Merge pull request #53 from drJeckyll/master

Skype: don't crash backend on empty avatar
1 file changed with 4 insertions and 0 deletions:
0 comments (0 inline, 0 general)
backends/skype/skypedb.cpp
Show inline comments
 
@@ -71,51 +71,55 @@
 
			}
 

	
 
using namespace Transport;
 

	
 
DEFINE_LOGGER(logger, "SkypeDB");
 

	
 
namespace SkypeDB {
 

	
 
bool getAvatar(const std::string &db_path, const std::string &name, std::string &photo) {
 
	bool ret = false;
 
	sqlite3 *db;
 
	LOG4CXX_INFO(logger, "Opening database " << db_path);
 
	if (sqlite3_open(db_path.c_str(), &db)) {
 
		sqlite3_close(db);
 
		LOG4CXX_ERROR(logger, "Can't open database");
 
	}
 
	else {
 
		sqlite3_stmt *stmt;
 
		PREP_STMT(stmt, "SELECT avatar_image FROM Contacts WHERE skypename=?");
 
		if (stmt) {
 
			BEGIN(stmt);
 
			BIND_STR(stmt, name);
 
			if(sqlite3_step(stmt) == SQLITE_ROW) {
 
				int size = sqlite3_column_bytes(stmt, 0);
 
				if (size > 0) {
 
				    const void *data = sqlite3_column_blob(stmt, 0);
 
				    photo = std::string((const char *)data + 1, size - 1);
 
				    ret = true;
 
				} else {
 
				    ret = false;
 
				}
 
			}
 
			else {
 
				LOG4CXX_ERROR(logger, (sqlite3_errmsg(db) == NULL ? "" : sqlite3_errmsg(db)));
 
			}
 

	
 
			int ret;
 
			while((ret = sqlite3_step(stmt)) == SQLITE_ROW) {
 
			}
 
			FINALIZE_STMT(stmt);
 
		}
 
		else {
 
			LOG4CXX_ERROR(logger, "Can't create prepared statement");
 
			LOG4CXX_ERROR(logger, (sqlite3_errmsg(db) == NULL ? "" : sqlite3_errmsg(db)));
 
		}
 
		sqlite3_close(db);
 
	}
 
	return ret;
 
}
 

	
 
bool loadBuddies(SkypePlugin *np, const std::string &db_path, std::string &user, std::map<std::string, std::string> &group_map) {
 
	bool ret = false;
 
	sqlite3 *db;
 
	LOG4CXX_INFO(logger, "Opening database " << db_path);
 
	if (sqlite3_open(db_path.c_str(), &db)) {
0 comments (0 inline, 0 general)