summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorDenys Vlasenko <vda.linux@googlemail.com>2010-01-11 07:22:13 +0100
committerDenys Vlasenko <vda.linux@googlemail.com>2010-01-11 07:22:13 +0100
commit14ef0cfe72faf6696df3ef8f42927e9458ccbeeb (patch)
treec5d3a3169fc31f212d507553beb67920be92ebcd /lib
parentb1c4304104910c4bc066cd43f9784fe2f3ddf1ad (diff)
downloadabrt-14ef0cfe72faf6696df3ef8f42927e9458ccbeeb.tar.gz
abrt-14ef0cfe72faf6696df3ef8f42927e9458ccbeeb.tar.xz
abrt-14ef0cfe72faf6696df3ef8f42927e9458ccbeeb.zip
*: misc fixes
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
Diffstat (limited to 'lib')
-rw-r--r--lib/Plugins/CCpp.cpp2
-rw-r--r--lib/Plugins/FileTransfer.cpp20
-rw-r--r--lib/Plugins/RunApp.cpp4
-rw-r--r--lib/Utils/CommLayerInner.cpp6
-rw-r--r--lib/Utils/DebugDump.cpp10
-rw-r--r--lib/Utils/DebugDump.h2
-rw-r--r--lib/Utils/Polkit.cpp10
-rw-r--r--lib/Utils/xatonum.cpp4
8 files changed, 33 insertions, 25 deletions
diff --git a/lib/Plugins/CCpp.cpp b/lib/Plugins/CCpp.cpp
index a7f005c8..46c2f281 100644
--- a/lib/Plugins/CCpp.cpp
+++ b/lib/Plugins/CCpp.cpp
@@ -627,7 +627,7 @@ static bool DebuginfoCheckPolkit(int uid)
//parent
int status;
- if (waitpid(child_pid, &status, 0) > 0 && WEXITSTATUS(status) == 0)
+ if (waitpid(child_pid, &status, 0) > 0 && WIFEXITED(status) && WEXITSTATUS(status) == 0)
{
return true; //authorization OK
}
diff --git a/lib/Plugins/FileTransfer.cpp b/lib/Plugins/FileTransfer.cpp
index 60e1e66b..9d7a59af 100644
--- a/lib/Plugins/FileTransfer.cpp
+++ b/lib/Plugins/FileTransfer.cpp
@@ -110,13 +110,11 @@ parameter "something" to each filename,
now used in create_zip, but can be useful for some future
archivers as well
*/
-static void traverse_directory(const char * directory, void * something,
- void (*func)(void *, const char *) )
+static void traverse_directory(const char *directory, void *something,
+ void (*func)(void *, const char *))
{
- DIR * dp;
- struct dirent * dirp;
- char complete_name[BUFSIZ];
- char * end;
+ DIR *dp;
+ struct dirent *dirp;
dp = opendir(directory);
if (dp == NULL)
@@ -127,14 +125,8 @@ static void traverse_directory(const char * directory, void * something,
{
if (is_regular_file(dirp, directory))
{
- end = stpcpy(complete_name, directory);
- if (end[-1] != '/')
- {
- *end++ = '/';
- }
- end = stpcpy(end, dirp->d_name);
-
- func(something, complete_name);
+ string complete_name = concat_path_file(directory, dirp->d_name);
+ func(something, complete_name.c_str());
}
}
closedir(dp);
diff --git a/lib/Plugins/RunApp.cpp b/lib/Plugins/RunApp.cpp
index c1f725be..e2147e26 100644
--- a/lib/Plugins/RunApp.cpp
+++ b/lib/Plugins/RunApp.cpp
@@ -40,6 +40,10 @@ void CActionRunApp::Run(const char *pActionDir, const char *pArgs)
vector_string_t args;
parse_args(pArgs, args, '"');
+ if (args.size() <= COMMAND)
+ {
+ return;
+ }
const char *cmd = args[COMMAND].c_str();
if (!cmd[0])
{
diff --git a/lib/Utils/CommLayerInner.cpp b/lib/Utils/CommLayerInner.cpp
index 133e97d2..4a3b80a8 100644
--- a/lib/Utils/CommLayerInner.cpp
+++ b/lib/Utils/CommLayerInner.cpp
@@ -68,11 +68,9 @@ void update_client(const char *fmt, ...)
va_list p;
va_start(p, fmt);
- char *msg;
- int used = vasprintf(&msg, fmt, p);
+ char *msg = xvasprintf(fmt, p);
va_end(p);
- if (used < 0)
- return;
s_pObs->Status(msg, peer, key);
+ free(msg);
}
diff --git a/lib/Utils/DebugDump.cpp b/lib/Utils/DebugDump.cpp
index cb3a082c..dd992aab 100644
--- a/lib/Utils/DebugDump.cpp
+++ b/lib/Utils/DebugDump.cpp
@@ -115,7 +115,15 @@ static bool GetAndSetLock(const char* pLockFile, const char* pPID)
char pid_buf[sizeof(pid_t)*3 + 4];
ssize_t r = readlink(pLockFile, pid_buf, sizeof(pid_buf) - 1);
if (r < 0)
+ {
+ if (errno == ENOENT)
+ {
+ /* Looks like pLockFile was deleted */
+ usleep(10 * 1000); /* avoid CPU eating loop */
+ continue;
+ }
perror_msg_and_die("Can't read lock file '%s'", pLockFile);
+ }
pid_buf[r] = '\0';
if (strcmp(pid_buf, pPID) == 0)
@@ -228,7 +236,7 @@ void CDebugDump::UnLock()
}
}
-void CDebugDump::Create(const char *pDir, int64_t uid)
+void CDebugDump::Create(const char *pDir, uid_t uid)
{
if (m_bOpened)
{
diff --git a/lib/Utils/DebugDump.h b/lib/Utils/DebugDump.h
index c59552e9..ce515dbd 100644
--- a/lib/Utils/DebugDump.h
+++ b/lib/Utils/DebugDump.h
@@ -62,7 +62,7 @@ class CDebugDump
~CDebugDump();
void Open(const char *pDir);
- void Create(const char *pDir, int64_t uid);
+ void Create(const char *pDir, uid_t uid);
void Delete();
void Close();
diff --git a/lib/Utils/Polkit.cpp b/lib/Utils/Polkit.cpp
index c868e1a7..8bd0eb6f 100644
--- a/lib/Utils/Polkit.cpp
+++ b/lib/Utils/Polkit.cpp
@@ -46,14 +46,12 @@ static PolkitResult do_check(PolkitSubject *subject, const char *action_id)
GCancellable * cancellable;
authority = polkit_authority_get();
-
cancellable = g_cancellable_new();
g_timeout_add(POLKIT_TIMEOUT * 1000,
(GSourceFunc) do_cancel,
cancellable);
-
result = polkit_authority_check_authorization_sync(authority,
subject,
action_id,
@@ -61,6 +59,7 @@ static PolkitResult do_check(PolkitSubject *subject, const char *action_id)
POLKIT_CHECK_AUTHORIZATION_FLAGS_ALLOW_USER_INTERACTION,
cancellable,
&error);
+ g_object_unref(authority);
if (error)
{
@@ -71,11 +70,18 @@ static PolkitResult do_check(PolkitSubject *subject, const char *action_id)
if (result)
{
if (polkit_authorization_result_get_is_challenge(result))
+ {
/* Can't happen (happens only with
* POLKIT_CHECK_AUTHORIZATION_FLAGS_NONE flag) */
+ g_object_unref(result);
return PolkitChallenge;
+ }
if (polkit_authorization_result_get_is_authorized(result))
+ {
+ g_object_unref(result);
return PolkitYes;
+ }
+ g_object_unref(result);
return PolkitNo;
}
diff --git a/lib/Utils/xatonum.cpp b/lib/Utils/xatonum.cpp
index b096ca89..83146298 100644
--- a/lib/Utils/xatonum.cpp
+++ b/lib/Utils/xatonum.cpp
@@ -9,7 +9,7 @@
unsigned xatou(const char *numstr)
{
- unsigned r;
+ unsigned long r;
int old_errno;
char *e;
@@ -19,7 +19,7 @@ unsigned xatou(const char *numstr)
old_errno = errno;
errno = 0;
r = strtoul(numstr, &e, 10);
- if (errno || numstr == e || *e != '\0')
+ if (errno || numstr == e || *e != '\0' || r > UINT_MAX)
goto inval; /* error / no digits / illegal trailing chars */
errno = old_errno; /* Ok. So restore errno. */
return r;