Hi!

According to http://www.arm.linux.org.uk/docs/faqs/signedchar.php,
"char" is unsigned on ARM, but signed on e.g. i386.

Hence, the loop

   char c;
   while (c >= 0) {
       /* foo */
       c--;
   }

wraps around (0-1 == 255) and produces undesired results. The assertion
then aborts the program, triggering the segfault.


The attached patch explicitly asks for a signed char, thus fixing the
problem.


HTH
From: Adrian Knoth <a...@drcomp.erfurt.thur.de>
Bug-Debian: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=690206
Forwarded: no, but needed
Description: Fix segmentation fault on ARM.
--- a/Src/menustats.c
+++ b/Src/menustats.c
@@ -307,7 +307,7 @@ static int download_list() {
 /* Displays the choice of stats sources */
 #define MAXPING (26 * 2)
 void update_stats() {
-  char c;
+  signed char c;
   BUFFER *inifile;
   BUFFER *pingernames;
   BUFFER *goodpingers;

Reply via email to