Bug#810960: sngrep FTBFS on hppa/parisc architecture (with patch)

2016-01-14 Thread Victor Seva
forwarded 810960 https://github.com/irontec/sngrep/issues/81
thanks



signature.asc
Description: OpenPGP digital signature


Bug#810960: sngrep FTBFS on hppa/parisc architecture (with patch)

2016-01-14 Thread Helge Deller
Package: sngrep
Version: 1.2.0-1
Tags: patch

sngrep fails to build because the testcases test-004, test-005 and test-005 
fail, e.g.:
https://buildd.debian.org/status/fetch.php?pkg=sngrep=hppa=1.2.0-1=1452639207

It turns out, that this is a bug in the C-code of the testcases of sngrep which 
affects only big-endian machines (e.g. s390x, ppc64 and hppa).

Testcases 1,2,3 and 7 defines the keystroke table correctly like this:
const char keys[] = {...};
while testcases 4,5 and 6 define the keystrokes like this (with "int" type):
const int keys[] = {...};

In tests/test_input.c each various key is then written with:
   unused = write(ppipe[1], [i], sizeof(char));

Please note the usage of "char" vs. "int" in the keys tables above.
If "int" is used, then on big-endian machines the [i] refers to the first 
byte of each 2-byte (int) value, which is
on big-endian machines the higher-8-bit value which is "0", while on 
little-endian machines the lower 8-bit-value which is the key which was 
actually defined.

So, the attached patch fixes this problem for all machines regardless of the 
endianess and adds a check to tests/test_input.c like this:
const char keys[];
That way at least a compiler warning will be generated if new testcases with 
"int" usage would be added.

Can you please apply this patch to the next upload of sngrep and/or report this 
upstream ?

Thanks,
Helge

PS: I still wonder why the testcases 4-6 didn't broke on all other big-endian 
arches. I assume the compiler did some optimization of the "int"-based-keys 
table and as such just hided the coding problem...
diff -up ./tests/test_004.c.org ./tests/test_004.c
--- ./tests/test_004.c.org	2016-01-13 17:12:19.119482967 +0100
+++ ./tests/test_004.c	2016-01-13 17:12:51.303469253 +0100
@@ -25,7 +25,7 @@
  *
  * Basic Call Raw testing
  */
-const int keys[] =
+const char keys[] =
 {
  /* Select some dialogs */
  32, 107, 107, 107, 32, 107,
diff -up ./tests/test_005.c.org ./tests/test_005.c
--- ./tests/test_005.c.org	2016-01-13 17:06:23.367642939 +0100
+++ ./tests/test_005.c	2016-01-13 17:13:01.559464906 +0100
@@ -26,7 +26,7 @@
  * Basic Column selection testing
  */
 
-const int keys[] =
+const char keys[] =
 {
  /* Show Raw panel */
  't',
diff -up ./tests/test_006.c.org ./tests/test_006.c
--- ./tests/test_006.c.org	2016-01-13 17:06:29.147640213 +0100
+++ ./tests/test_006.c	2016-01-13 17:13:12.079460465 +0100
@@ -25,7 +25,7 @@
  *
  * Basic Message diff testing
  */
-const int keys[] =
+const char keys[] =
 {
  /* Select some dialog */
  107, 107, 107, 32, 10,
diff -up ./tests/test_input.c.org ./tests/test_input.c
--- ./tests/test_input.c.org	2016-01-14 09:26:47.258821143 +0100
+++ ./tests/test_input.c	2016-01-14 09:25:08.806832567 +0100
@@ -47,6 +47,9 @@
 #define TEST_PCAP_INPUT "aaa.pcap"
 #endif
 
+/* keys array needs to be of type "char" */
+const char keys[];
+
 int
 main()
 {