]> Kevux Git Server - fll/commit
Security: Finish implementing string and convert changes.
authorKevin Day <thekevinday@gmail.com>
Sat, 4 Sep 2021 05:03:18 +0000 (00:03 -0500)
committerKevin Day <thekevinday@gmail.com>
Sat, 4 Sep 2021 05:03:18 +0000 (00:03 -0500)
commitd46aee4d7010d0cc8d0b8694e939471b5b3cfaab
tree69bea85e131d950ef8c0e25bac27d08cbf71cf33
parent0445b5ae13ba9cfd3ff692aeb425c20048333058
Security: Finish implementing string and convert changes.

The observation that some filesystems may have control characters in their names revealed a security issue in the design of this project.
There is no provided way to easily handle control characters or invalid UTF-8 sequences.

I have long been thinking about writing my own printf()/fprintf() functions but have not been willing to go that far.
With the discovery of this security issue, I finally decided to do so.
This then allows me to get rid of the rather messy f_color_print() and similar functions.

The color support and special FLL types, such as f_static_string_t, are now supported.

Due to the size of this change as well as my available time, I have broken up this process over several "Progress" commits.

This implementation is not complete.
I want to implement floating and double support, but I am not about to spend the research needed to properly handle floating and double digit processing logic.

While being similar, there are several differences between the fl_print_format() and fll_print_format() functions with the fprintf() functions.
Most notable of these is the the fl_print_format(), does not lock the file stream and fll_print_format() is a wrapper to fl_print_format() that does lock the file stream.
The format characters are significantly different, see the function documentation.

There are also improvements that need to be made.
Most notable is the digit to string conversion in which the algorithm I chose is a simple algorithm.
While the performance is acceptable for the time being, the performance can be greatly improved upon.
I need to spend time researching in order to improve this.

All of the programs (level 3) have been converted to use this and all of the many of the old ways of printing have been entirely removed.
I used safe printing where the string needs to be safely printing where I was able to identify such cases.
However, given the size of the refactoring, not to mention the work being spread out between days and weeks, I have concerns that I did not get all of the places that should be using safe printing.
27 files changed:
level_0/f_file/c/file-common.h
level_0/f_fss/c/fss_nest.h
level_0/f_iki/c/iki-common.h
level_0/f_print/c/print-common.h
level_0/f_utf/c/private-utf.c
level_0/f_utf/c/utf.c
level_1/fl_print/c/print.h
level_1/fl_print/c/private-print.c
level_2/fll_fss/c/fss_basic.h
level_2/fll_fss/c/fss_basic_list.h
level_2/fll_fss/c/fss_embedded_list.h
level_2/fll_fss/c/fss_extended.h
level_2/fll_fss/c/fss_extended_list.h
level_3/byte_dump/c/private-byte_dump.c
level_3/controller/c/main.c
level_3/controller/c/private-rule.c
level_3/fake/c/main.c
level_3/fake/documents/fakefile.txt
level_3/firewall/c/private-common.h
level_3/fss_embedded_list_read/c/private-fss_embedded_list_read.c
level_3/fss_status_code/c/fss_status_code.c
level_3/iki_read/c/iki_read.c
level_3/iki_read/c/iki_read.h
level_3/iki_read/c/private-iki_read.c
level_3/iki_read/data/build/dependencies
level_3/iki_read/data/build/settings
level_3/status_code/c/status_code.c