# HG changeset patch # User Mike Becker # Date 1686489408 -7200 # Node ID 60cecca5e4844a367cf647f2a71f0a2c4c26a409 # Parent ff56b28e2cdd816f6736f292e638982b95ff41fd fix illegal memory access when input file does not end with line break diff -r ff56b28e2cdd -r 60cecca5e484 src/c2html.c --- a/src/c2html.c Sun Jun 11 14:05:28 2023 +0200 +++ b/src/c2html.c Sun Jun 11 15:16:48 2023 +0200 @@ -31,6 +31,7 @@ #include #include +#include size_t c2html_format( CxList const *lines, @@ -92,15 +93,15 @@ return written; } -size_t c2html_bformat( +size_t c2html_textformat( char const *inputbuffer, - size_t inputbuflen, void *outbuf, cx_write_func wfnc, c2html_highlighter_func highlighter, int showln ) { /* a rough estimate for the number of lines */ + size_t inputbuflen = strlen(inputbuffer); size_t est_cap = 16 + inputbuflen / 40; /* create the line pointer array */ diff -r ff56b28e2cdd -r 60cecca5e484 src/c2html.h --- a/src/c2html.h Sun Jun 11 14:05:28 2023 +0200 +++ b/src/c2html.h Sun Jun 11 15:16:48 2023 +0200 @@ -45,8 +45,7 @@ /** * Writes the formatted source data to the output buffer. * - * @param inputbuffer the source file data as string - * @param inputbuflen the length of the source file + * @param inputtext the source file data as zero-terminated string * @param outbuf the output buffer * @param wfnc a write function for the output buffer * @param hltr the highlighter function @@ -58,9 +57,9 @@ * @see c2html_c_highlighter() * @see c2html_java_highlighter() */ -size_t c2html_bformat(char const* inputbuffer, size_t inputbuflen, - void* outbuf, cx_write_func wfnc, - c2html_highlighter_func hltr, int showln); +size_t c2html_textformat(char const* inputtext, + void* outbuf, cx_write_func wfnc, + c2html_highlighter_func hltr, int showln); /** * Writes the formatted source data to the output buffer. diff -r ff56b28e2cdd -r 60cecca5e484 src/frontend.c --- a/src/frontend.c Sun Jun 11 14:05:28 2023 +0200 +++ b/src/frontend.c Sun Jun 11 15:16:48 2023 +0200 @@ -150,10 +150,10 @@ cxBufferInit(&fbuf, NULL, 4096, NULL, CX_BUFFER_AUTO_EXTEND); cx_stream_copy(inputfile, &fbuf, (cx_read_func) fread, (cx_write_func) cxBufferWrite); + cxBufferPut(&fbuf, 0); fclose(inputfile); - c2html_bformat( - fbuf.space, fbuf.size, - fout, (cx_write_func ) fwrite, hltr, + c2html_textformat( + fbuf.space, fout, (cx_write_func ) fwrite, hltr, settings.showlinenumbers ); cxBufferDestroy(&fbuf); diff -r ff56b28e2cdd -r 60cecca5e484 test/ctest.c --- a/test/ctest.c Sun Jun 11 14:05:28 2023 +0200 +++ b/test/ctest.c Sun Jun 11 15:16:48 2023 +0200 @@ -388,4 +388,4 @@ str.length = 0; return str; } -} +} \ No newline at end of file diff -r ff56b28e2cdd -r 60cecca5e484 test/gs/ctest.html --- a/test/gs/ctest.html Sun Jun 11 14:05:28 2023 +0200 +++ b/test/gs/ctest.html Sun Jun 11 15:16:48 2023 +0200 @@ -441,8 +441,7 @@ 388 str.length = 0; 389 return str; 390 } -391 } - +391 }