So here is the formatted version:
From 5d284137a6035bab65717fbacd98423b96d862cf Mon Sep 17 00:00:00 2001
From: Igor Zhbanov<i.zhbanov(a)samsung.com>
Date: Wed, 11 Jul 2012 12:08:21 +0400
Subject: [PATCH] Device list sort function bug
Sometimes PowerTOP dies with a Segmentation Fault while generating
the report. Little investigation shown that it dies while sorting
the device list. The problem is that comparison function devlist_sort
is incorrect.
The function should return true if first argument "preceeds" second.
But when strcmp() is used, it can return -1, 0 and 1. So both -1 and 1
values are silently converted to true, which is wrong. It confuses the sort()
function and it crosses boundary of array.
---
src/devlist.cpp | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/src/devlist.cpp b/src/devlist.cpp
index 93f2081..cd5b5d8 100644
--- a/src/devlist.cpp
+++ b/src/devlist.cpp
@@ -273,7 +273,7 @@ static bool devlist_sort(struct devuser * i, struct devuser * j)
if (i->pid != j->pid)
return i->pid< j->pid;
- return strcmp(i->device, j->device);
+ return (strcmp(i->device, j->device)< 0);
}
static const char *dev_class(int line)
--
1.7.5.4
Jan-Simon Möller wrote:
Yes, in an hour or so.
Best,
JS
Am Mittwoch, 11. Juli 2012, 09:33:42 schrieb Sergey Senozhatsky:
> On (07/11/12 10:11), Igor Zhbanov wrote:
>> Sometimes PowerTOP dies with a Segmentation Fault while generating
>> the report. Little investigation shown that it dies while sorting
>> the device list. The problem is that comparison function devlist_sort
>> is incorrect.
>>
>> The function should return true if first argument "preceeds" second.
>> But when strcmp() is used, it can return -1, 0 and 1. So both -1 and 1
>> values are silently converted to true, which is wrong. It confuses the
>> sort() function and it crosses boundary of array.
> Jan, could you please test this one?
>
> Thanks in advance,
>
> -ss
--
Best regards,
Igor Zhbanov,
Expert Software Engineer,
phone: +7 (495) 797 25 00 ext 3806
e-mail: i.zhbanov(a)samsung.com
ASWG, Moscow R&D center, Samsung Electronics
12 Dvintsev street, building 1
127018, Moscow, Russian Federation