diff options
author | William Wilgus <wilgus.william@gmail.com> | 2024-12-22 23:59:31 -0500 |
---|---|---|
committer | William Wilgus <wilgus.william@gmail.com> | 2024-12-22 23:59:31 -0500 |
commit | dfd01709c54036d7590e157cd77b90d7e7424a68 (patch) | |
tree | 3fc569e601384ffaa2c9c6c4b5a3baedf8c512c5 | |
parent | 50515de940dd9c20165037e9a0250ea9c8a4a80e (diff) | |
download | rockbox-dfd01709c5.tar.gz rockbox-dfd01709c5.zip |
[Bugfix] theme %ss will overflow buffer, update %ft manual entry
%ss did not check for the size of the resulting string before
copying it to the buffer
%ft has a search text mode
Change-Id: I1321681c249251aafe0e39bcc510b9e81f0cd0d3
-rw-r--r-- | apps/gui/skin_engine/skin_tokens.c | 4 | ||||
-rw-r--r-- | manual/appendix/wps_tags.tex | 19 |
2 files changed, 16 insertions, 7 deletions
diff --git a/apps/gui/skin_engine/skin_tokens.c b/apps/gui/skin_engine/skin_tokens.c index d11f21d7b2..5df93bf262 100644 --- a/apps/gui/skin_engine/skin_tokens.c +++ b/apps/gui/skin_engine/skin_tokens.c @@ -823,7 +823,11 @@ const char *get_token_value(struct gui_wps *gwps, byte_len = end_byte - start_byte; if (token_val != buf) + { + if (byte_len >= buf_size) /* the resulting string exceeds buf */ + return &token_val[start_byte]; /* just return the string */ memcpy(buf, &token_val[start_byte], byte_len); + } else buf = &buf[start_byte]; diff --git a/manual/appendix/wps_tags.tex b/manual/appendix/wps_tags.tex index 86859837f0..3bf50ffe1d 100644 --- a/manual/appendix/wps_tags.tex +++ b/manual/appendix/wps_tags.tex @@ -758,18 +758,23 @@ a horizontal progressbar which doesn't fill and draws the image \end{description} \begin{tagmap} - \config{\%ft(filename [,line]} & Get a line of text from a file.\\ + \config{\%ft(filename [,line|search text]} & Get a line of text from a file.\\ \end{tagmap} - Use this tag to check for the existence of a file or read a line of text from a file. - Checking if a file exists can be done with \%?(ft(filename)<Found|NotFound> - similarly you can also check if a specific line exists with \%?(ft(filename, n)<Found|NotFound> - where n is the desired line. - Note: empty files or files that do not exist are ignored by the skin engine otherwise + Use this tag to check for the existence of a file, read a line or search for a line in a file. + Checking if a file exists can be done with \%?ft(filename)<Found|NotFound>\newline + Check if a specific line exists with \%?ft(filename, n)<Found|NotFound> where n is the desired line.\newline + Search (ignoring case) of the beginning of each line with \%?ft(filename,search text)<Found|NotFound>\newline + Note: empty files or files that do not exist are treated by the skin engine as a comment and ignored.\newline + lines must end with CR or LF but may not exceed 320 characters including search text \newline + Maximum 1023 lines will be accessible to the theme. \begin{description} \item[filename] -- filename Note: files can only be found in \fname{/.rockbox} directory or one of its children. eg. \%ft(wps/file.txt) would refer to \fname{/.rockbox/wps/file.txt} \item[line] -- OPTIONAL, which line to grab, defaults to the first line. - Note: lines must end with CR or LF but may not exceed 320 characters + \item[search text] -- OPTIONAL, instead of a line number find (ignoring case) a line that begins with search text. + Note: If found this search text will be removed and the rest of the string returned to the end of line.\newline + Quotes and spaces should not be included unless you want to search for a string containing them.\newline + ie. \%ft(filename,text) is not the same as \%ft(filename,'text') and \%ft(filename,text) is not the same as \%ft(filename, text) \end{description} \begin{tagmap} |