summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWilliam Wilgus <wilgus.william@gmail.com>2024-12-22 23:59:31 -0500
committerWilliam Wilgus <wilgus.william@gmail.com>2024-12-22 23:59:31 -0500
commitdfd01709c54036d7590e157cd77b90d7e7424a68 (patch)
tree3fc569e601384ffaa2c9c6c4b5a3baedf8c512c5
parent50515de940dd9c20165037e9a0250ea9c8a4a80e (diff)
downloadrockbox-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.c4
-rw-r--r--manual/appendix/wps_tags.tex19
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}