Re: CODE: fread_string()

From: Daniel A. Koepke (dkoepke@circlemud.org)
Date: 04/24/02


On Tue, 23 Apr 2002, Peter Finlayson wrote:

> [...] then reads 512 bytes from a file into 'tmp' [...]

Actually, it reads at most 511 bytes from a file into 'tmp', as
fgets() ensures the string is properly terminated.  However, your concern
remains correct because:

    point = tmp + strlen(tmp) - 1;

If we let strlen(tmp) be 511, then

    point = tmp + 511 - 1; /* => tmp + 510 */

and so

    *(point++) = '\r';
    *(point++) = '\n';
    *point = '\0';

becomes:

    tmp[510] = '\r';
    tmp[511] = '\n';
    tmp[512] = '\0'; /* Oops! */

A trivial fix is to increase the size of buf by 1, which is probably the
solution I will (at least, initially) check in.  It's not a serious bug,
so I don't think it merits any considerable re-engineering of the code
around it.  Anyone have larger issues with this quick fix?

-dak

--
   +---------------------------------------------------------------+
   | FAQ: http://qsilver.queensu.ca/~fletchra/Circle/list-faq.html |
   | Archives: http://post.queensu.ca/listserv/wwwarch/circle.html |
   | Newbie List:  http://groups.yahoo.com/group/circle-newbies/   |
   +---------------------------------------------------------------+



This archive was generated by hypermail 2b30 : 06/25/03 PDT