** Description changed:

- Hot to reproduce :
+ How to reproduce :
  
  $ strfile fort
  "fort.dat" created
  There were 36 strings
  Longest string: 201 bytes
  Shortest string: 25 bytes
  
  $ ls -l fort*
  -rw-rw-r-- 1 br br 3383 Feb 23 10:31 fort
  -rw-rw-r-- 1 br br  172 Feb 23 10:31 fort.dat
  
  $ unstr fort
  Input file: fort
  unstr: data file corrupted
  
  The bug is line 234 of unstr.c (source file:
  https://sources.debian.org/src/fortune-mod/1%3A1.99.1-7/util/unstr.c/).
  
  The current checked_fread() macro compares fread() return value with the 
number of bytes to read :
  #define checked_fread(item, size)                          \
-     if (fread(item, size, 1, Dataf) != size)               \
-       {                                                    \
-         fprintf(stderr, "unstr: data file corrupted\n");   \
-         exit(1);                                           \
-       }
+     if (fread(item, size, 1, Dataf) != size)               \
+       {                                                    \
+         fprintf(stderr, "unstr: data file corrupted\n");   \
+         exit(1);                                           \
+       }
  
  It should instead compare fread() return value with the number of items to 
read, which is 1 :
  #define checked_fread(item, size)                          \
-     if (fread(item, size, 1, Dataf) != 1)                  \
-       {                                                    \
-         fprintf(stderr, "unstr: data file corrupted\n");   \
-         exit(1);                                           \
-       }
+     if (fread(item, size, 1, Dataf) != 1)                  \
+       {                                                    \
+         fprintf(stderr, "unstr: data file corrupted\n");   \
+         exit(1);                                           \
+       }
  
  After changing the code, running the same commands give :
  $ strfile fort
  "fort.dat" created
  There were 36 strings
  Longest string: 201 bytes
  Shortest string: 25 bytes
  
  $ ls -l fort*
  -rw-rw-r-- 1 br br 3383 Feb 23 10:31 fort
  -rw-rw-r-- 1 br br  172 Feb 23 10:38 fort.dat
  
  $ ./unstr fort
  Input file: fort
  nothing to do -- table in file order

-- 
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.
https://bugs.launchpad.net/bugs/1961954

Title:
  unstr (package fortune-mod) incorrectly reads data file

To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/fortune-mod/+bug/1961954/+subscriptions


-- 
ubuntu-bugs mailing list
ubuntu-bugs@lists.ubuntu.com
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs

Reply via email to