Hello,

There is a bug on fakesmsc. It gives segmentation fault when the
program reaches EOF. The simplest way to simulate the bug is:

$ ./test/fakesmsc < /dev/null
2012-09-11 13:56:02 [5946] [0] INFO: Debug_lvl = -1, log_file =
<none>, log_lvl = 0
2012-09-11 13:56:02 [5946] [0] INFO: Entering interactive mode. Type
your message on the command line
2012-09-11 13:56:02 [5946] [0] INFO: fakesmsc starting
2012-09-11 13:56:02 [5946] [0] DEBUG: Connecting to <127.0.0.1>
2012-09-11 13:56:02 [5946] [0] PANIC: ./test/fakesmsc() [0x805d5ad]
2012-09-11 13:56:02 [5946] [0] PANIC:
linux-gate.so.1(__kernel_rt_sigreturn+0) [0xb772140c]
2012-09-11 13:56:02 [5946] [0] PANIC: ./test/fakesmsc(main+0x8a8) [0x804fc48]
2012-09-11 13:56:02 [5946] [0] PANIC:
/usr/lib/libc.so.6(__libc_start_main+0xf5) [0xb7149605]
2012-09-11 13:56:02 [5946] [0] PANIC: ./test/fakesmsc() [0x804fdd9]
Segmentation fault

Real situations for it to happen include reading several messages from a file
$ ./test/fakesmsc < file.txt (after reaching the end of file the
program will crash)

Or even reading from keyboard by simulating EOF when typing control+d.


Attached is a patch that solves the issue. The program now quits when
reaches end of file on stdin. This provides a great way to quit when
in interactive mode: type your messages, then ctrl+d to quit (as it is
on bash / python / perl / ruby and other interpreters).

I've successfully applied it against revision 4995 using "patch -p0 <
fakesmsc-gracefully-quits-when-eof.patch" on project root.

Regards,
Rudy


Index: test/fakesmsc.c
===================================================================
--- test/fakesmsc.c     (revision 4995)
+++ test/fakesmsc.c     (working copy)
@@ -307,6 +307,8 @@
             /* something went off, let's see if it's stdin */
             if (FD_ISSET(fileno(fp), &rset)) { /* stdin is readable */
                 cptr = fgets(buffer, IN_BUFSIZE, stdin);
+                if (!cptr)
+                    goto over;
                 if( strlen( cptr ) < 2 )
                     goto rcv;
             } else { /* timer kicked in */

Attachment: fakesmsc-gracefully-quits-when-eof.patch
Description: Binary data

Reply via email to