summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorDenys Vlasenko <vda.linux@googlemail.com>2009-12-15 19:54:51 +0100
committerDenys Vlasenko <vda.linux@googlemail.com>2009-12-15 19:54:51 +0100
commit1e119f37b85b90c5a9a17fdcbc80625727b4ab66 (patch)
tree2eda8402810f7148304c3f7ee878b86c9dcb67c8 /lib
parent661875fe000fd0d8469ae20d587fa84624d7f262 (diff)
downloadabrt-1e119f37b85b90c5a9a17fdcbc80625727b4ab66.tar.gz
abrt-1e119f37b85b90c5a9a17fdcbc80625727b4ab66.tar.xz
abrt-1e119f37b85b90c5a9a17fdcbc80625727b4ab66.zip
fix all instances of atoi() usage
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
Diffstat (limited to 'lib')
-rw-r--r--lib/Plugins/CCpp.cpp10
-rw-r--r--lib/Plugins/Catcut.cpp4
-rw-r--r--lib/Plugins/FileTransfer.cpp4
-rw-r--r--lib/Plugins/Firefox.cpp8
-rw-r--r--lib/Plugins/Mailx.cpp2
-rw-r--r--lib/Plugins/SQLite3.cpp4
-rw-r--r--lib/Plugins/TicketUploader.cpp4
-rw-r--r--lib/Utils/CrashTypesSocket.cpp2
-rw-r--r--lib/Utils/Makefile.am1
-rw-r--r--lib/Utils/xatonum.cpp50
10 files changed, 70 insertions, 19 deletions
diff --git a/lib/Plugins/CCpp.cpp b/lib/Plugins/CCpp.cpp
index 0fe3d32a..c9a31c7e 100644
--- a/lib/Plugins/CCpp.cpp
+++ b/lib/Plugins/CCpp.cpp
@@ -309,7 +309,7 @@ static void GetBacktrace(const char *pDebugDumpDir,
args[11] = (char*)"info sharedlib";
args[12] = NULL;
- ExecVP(args, atoi(UID.c_str()), pBacktrace);
+ ExecVP(args, xatoi_u(UID.c_str()), pBacktrace);
}
static void GetIndependentBuildIdPC(const char *unstrip_n_output,
@@ -355,7 +355,7 @@ static string run_unstrip_n(const char *pDebugDumpDir)
args[3] = NULL;
string output;
- ExecVP(args, atoi(UID.c_str()), output);
+ ExecVP(args, xatoi_u(UID.c_str()), output);
free(args[1]);
@@ -575,7 +575,7 @@ string CAnalyzerCCpp::GetGlobalUUID(const char *pDebugDumpDir)
close(pipeout[0]); /* read side of the pipe */
/* abrt-backtrace is executed under the user's uid and gid. */
- uid_t uid = atoi(uid_str.c_str());
+ uid_t uid = xatoi_u(uid_str.c_str());
struct passwd* pw = getpwuid(uid);
gid_t gid = pw ? pw->pw_gid : uid;
setgroups(1, &gid);
@@ -670,7 +670,7 @@ void CAnalyzerCCpp::CreateReport(const char *pDebugDumpDir, int force)
dd.Close(); /* do not keep dir locked longer than needed */
string build_ids;
- if (m_bInstallDebugInfo && DebuginfoCheckPolkit(atoi(UID.c_str())))
+ if (m_bInstallDebugInfo && DebuginfoCheckPolkit(xatoi_u(UID.c_str())))
{
if (m_nDebugInfoCacheMB > 0)
{
@@ -761,7 +761,7 @@ void CAnalyzerCCpp::SetSettings(const map_plugin_settings_t& pSettings)
it = pSettings.find("DebugInfoCacheMB");
if (it != end)
{
- m_nDebugInfoCacheMB = atoi(it->second.c_str());
+ m_nDebugInfoCacheMB = xatou(it->second.c_str());
}
it = pSettings.find("InstallDebugInfo");
if (it == end) //compat, remove after 0.0.11
diff --git a/lib/Plugins/Catcut.cpp b/lib/Plugins/Catcut.cpp
index ebddfdd3..35f56f25 100644
--- a/lib/Plugins/Catcut.cpp
+++ b/lib/Plugins/Catcut.cpp
@@ -510,12 +510,12 @@ void CReporterCatcut::SetSettings(const map_plugin_settings_t& pSettings)
it = pSettings.find("RetryCount");
if (it != end)
{
- m_nRetryCount = atoi(it->second.c_str());
+ m_nRetryCount = xatoi_u(it->second.c_str());
}
it = pSettings.find("RetryDelay");
if (it != end)
{
- m_nRetryDelay = atoi(it->second.c_str());
+ m_nRetryDelay = xatoi_u(it->second.c_str());
}
}
diff --git a/lib/Plugins/FileTransfer.cpp b/lib/Plugins/FileTransfer.cpp
index c98645cf..08bba6ca 100644
--- a/lib/Plugins/FileTransfer.cpp
+++ b/lib/Plugins/FileTransfer.cpp
@@ -388,13 +388,13 @@ void CFileTransfer::SetSettings(const map_plugin_settings_t& pSettings)
it = pSettings.find("RetryCount");
if (it != end)
{
- m_nRetryCount = atoi(it->second.c_str());
+ m_nRetryCount = xatoi_u(it->second.c_str());
}
it = pSettings.find("RetryDelay");
if (it != end)
{
- m_nRetryDelay = atoi(it->second.c_str());
+ m_nRetryDelay = xatoi_u(it->second.c_str());
}
it = pSettings.find("ArchiveType");
diff --git a/lib/Plugins/Firefox.cpp b/lib/Plugins/Firefox.cpp
index bcc59485..2bb7f9c5 100644
--- a/lib/Plugins/Firefox.cpp
+++ b/lib/Plugins/Firefox.cpp
@@ -281,7 +281,7 @@ static void GetBacktrace(const char *pDebugDumpDir, std::string& pBacktrace)
args[9] = (char*)"thread apply all backtrace full";
args[10] = NULL;
- ExecVP(args, atoi(UID.c_str()), pBacktrace);
+ ExecVP(args, xatoi_u(UID.c_str()), pBacktrace);
free(args[5]);
free(args[7]);
@@ -454,7 +454,7 @@ static std::string run_unstrip_n(const char *pDebugDumpDir)
args[3] = NULL;
std::string output;
- ExecVP(args, atoi(UID.c_str()), output);
+ ExecVP(args, xatoi_u(UID.c_str()), output);
free(args[1]);
@@ -886,7 +886,7 @@ void CAnalyzerFirefox::CreateReport(const char *pDebugDumpDir, int force)
dd.Close(); /* do not keep dir locked longer than needed */
std::string build_ids;
- if (m_bInstallDebugInfo && DebuginfoCheckPolkit(atoi(UID.c_str()))) {
+ if (m_bInstallDebugInfo && DebuginfoCheckPolkit(xatoi_u(UID.c_str()))) {
if (m_nDebugInfoCacheMB > 0)
trim_debuginfo_cache(m_nDebugInfoCacheMB);
InstallDebugInfos(pDebugDumpDir, build_ids);
@@ -974,7 +974,7 @@ void CAnalyzerFirefox::SetSettings(const map_plugin_settings_t& pSettings)
it = pSettings.find("DebugInfoCacheMB");
if (it != end)
{
- m_nDebugInfoCacheMB = atoi(it->second.c_str());
+ m_nDebugInfoCacheMB = xatou(it->second.c_str());
}
it = pSettings.find("InstallDebugInfo");
if (it == end) //compat, remove after 0.0.11
diff --git a/lib/Plugins/Mailx.cpp b/lib/Plugins/Mailx.cpp
index b06edebb..6904c169 100644
--- a/lib/Plugins/Mailx.cpp
+++ b/lib/Plugins/Mailx.cpp
@@ -163,7 +163,7 @@ std::string CMailx::Report(const map_crash_report_t& pCrashReport,
update_client(_("Sending an email..."));
const char *uid_str = pCrashReport.find(CD_MWUID)->second[CD_CONTENT].c_str();
- exec_and_feed_input(atoi(uid_str), emailBody.c_str(), args);
+ exec_and_feed_input(xatoi_u(uid_str), emailBody.c_str(), args);
while (*args)
{
diff --git a/lib/Plugins/SQLite3.cpp b/lib/Plugins/SQLite3.cpp
index c3f7a7d8..12f8a5db 100644
--- a/lib/Plugins/SQLite3.cpp
+++ b/lib/Plugins/SQLite3.cpp
@@ -198,9 +198,9 @@ static bool check_table(sqlite3 *db)
if (pos != string::npos)
{
string tableVersion = tableName.substr(pos + 2);
- if (atoi(tableVersion.c_str()) < ABRT_TABLE_VERSION)
+ if (xatoi_u(tableVersion.c_str()) < ABRT_TABLE_VERSION)
{
- update_from_old_ver(db, atoi(tableVersion.c_str()));
+ update_from_old_ver(db, xatoi_u(tableVersion.c_str()));
}
return true;
}
diff --git a/lib/Plugins/TicketUploader.cpp b/lib/Plugins/TicketUploader.cpp
index 06b6cde8..14f5e1d5 100644
--- a/lib/Plugins/TicketUploader.cpp
+++ b/lib/Plugins/TicketUploader.cpp
@@ -394,12 +394,12 @@ void CTicketUploader::SetSettings(const map_plugin_settings_t& pSettings)
it = pSettings.find("RetryCount");
if (it != end)
{
- m_nRetryCount = atoi(it->second.c_str());
+ m_nRetryCount = xatoi_u(it->second.c_str());
}
it = pSettings.find("RetryDelay");
if (it != end)
{
- m_nRetryDelay = atoi(it->second.c_str());
+ m_nRetryDelay = xatoi_u(it->second.c_str());
}
}
diff --git a/lib/Utils/CrashTypesSocket.cpp b/lib/Utils/CrashTypesSocket.cpp
index f16e2a9a..3525c6a5 100644
--- a/lib/Utils/CrashTypesSocket.cpp
+++ b/lib/Utils/CrashTypesSocket.cpp
@@ -114,7 +114,7 @@ static int get_number_from_string(const std::string& pMessage, int& len)
}
}
len = ii + 1;
- return atoi(sNumber.c_str());
+ return xatoi(sNumber.c_str());
}
//TODO: remove constant 4 and place it in a message
diff --git a/lib/Utils/Makefile.am b/lib/Utils/Makefile.am
index 9618751a..4f6670b8 100644
--- a/lib/Utils/Makefile.am
+++ b/lib/Utils/Makefile.am
@@ -14,6 +14,7 @@ libABRTUtils_la_SOURCES = \
logging.cpp \
copyfd.cpp \
skip_whitespace.cpp \
+ xatonum.cpp \
popen_and_save_output.cpp \
stringops.cpp \
dirsize.cpp \
diff --git a/lib/Utils/xatonum.cpp b/lib/Utils/xatonum.cpp
new file mode 100644
index 00000000..b096ca89
--- /dev/null
+++ b/lib/Utils/xatonum.cpp
@@ -0,0 +1,50 @@
+/*
+ * Utility routines.
+ *
+ * Copyright (C) 2003 Manuel Novoa III <mjn3@codepoet.org>
+ *
+ * Licensed under GPLv2, see file LICENSE in this tarball for details.
+ */
+#include "abrtlib.h"
+
+unsigned xatou(const char *numstr)
+{
+ unsigned r;
+ int old_errno;
+ char *e;
+
+ if (*numstr < '0' || *numstr > '9')
+ goto inval;
+
+ old_errno = errno;
+ errno = 0;
+ r = strtoul(numstr, &e, 10);
+ if (errno || numstr == e || *e != '\0')
+ goto inval; /* error / no digits / illegal trailing chars */
+ errno = old_errno; /* Ok. So restore errno. */
+ return r;
+
+ inval:
+ error_msg_and_die("invalid number '%s'", numstr);
+}
+
+int xatoi_u(const char *numstr)
+{
+ unsigned r = xatou(numstr);
+ if (r > (unsigned)INT_MAX)
+ error_msg_and_die("invalid number '%s'", numstr);
+ return r;
+}
+
+int xatoi(const char *numstr)
+{
+ unsigned r;
+
+ if (*numstr != '-')
+ return xatoi_u(numstr);
+
+ r = xatou(numstr + 1);
+ if (r > (unsigned)INT_MAX + 1)
+ error_msg_and_die("invalid number '%s'", numstr);
+ return - (int)r;
+}