[Bugfix] FS#13926 -lua Crash when displaying error splash

rockbox-gerrit-noreply--- via rockbox-cvs <[email protected]> Wed, 17 Jun 2026 13:55:44 -0400
Newsgroups gmane.comp.systems.archos.rockbox.cvs
Message-ID <[email protected]>
commit ca2edad0123c1f3002aeda80a4e2128519105086
Author: William Wilgus <[email protected]>
Date:   Wed Jun 17 13:30:51 2026 -0400

    [Bugfix] FS#13926 -lua Crash when displaying error splash
    
    fix lua strpbrk function skipping the first accept chr
    
    lua splash_scroller fix NULL pointer in brk due to lastbreak
    not being reset on a new line
    
    Change-Id: Ica0c9ee5f9194f5be54ab90ad16309adead1c207

diff --git a/apps/plugins/lua/rockaux.c b/apps/plugins/lua/rockaux.c
index 5317d23be9..1cfd31805c 100644
--- a/apps/plugins/lua/rockaux.c
+++ b/apps/plugins/lua/rockaux.c
@@ -79,7 +79,7 @@ int splash_scroller(int timeout, const char* str)
 
     const int max_ch = (LCD_WIDTH / ch_w - 1) * 2;
     char line[max_ch + 2]; /* display buffer +2 incase of tab chars */
-    const char break_chars[] = "/\\  \r\n\f\v";
+    const char break_chars[] = "/\\ \r\n\f\v";
     const char *ch, *brk;
 
     int linepos, curline, linesdisp, maxl, last_break;
@@ -100,7 +100,7 @@ int splash_scroller(int timeout, const char* str)
             linepos = 0;
             brk = NULL;
             maxl = rb->font_measurestring(ch, max_ch, max_w, &w, NULL, fontnum);
-            for (; *ch && linepos < maxl; ch++)
+            for (; *ch && linepos <= maxl; ch++)
             {
                 if (strpbrk_n(ch, 1, break_chars))
                 {
@@ -143,7 +143,7 @@ int splash_scroller(int timeout, const char* str)
             /* try to not split in middle of words */
             if (last_break > 0 && *ch != '\0')
             {
-                if (strpbrk_n(ch, 1, break_chars) ||
+                if ((!strpbrk_n(ch, 1, break_chars)) &&
                    (w + wrap_thresh > max_w && strpbrk_n(ch, max_ch, break_chars)))
                 {
                     line[last_break] = '\0';
@@ -155,6 +155,7 @@ int splash_scroller(int timeout, const char* str)
             {
                 lcd_putsxy(0, realline * ch_h, line);
                 linesdisp++;
+                last_break = 0;
             }
 
             curline++;
diff --git a/apps/plugins/lua/strpbrk.c b/apps/plugins/lua/strpbrk.c
index efa9cbd2bb..9870b3753a 100644
--- a/apps/plugins/lua/strpbrk.c
+++ b/apps/plugins/lua/strpbrk.c
@@ -6,8 +6,8 @@ const char *strpbrk_n(const char *s, int smax, const char *accept) {
   register int i;
   register const char *a = accept;
   for (i=0; __likely(s[i] && i < smax); i++, a=accept)
-    while(__likely(a++[0]))
-      if ((s[i] == a[0]))
+    while(__likely(a[0]))
+      if ((s[i] == a++[0]))
         return &s[i];
   return NULL;
 }
-- 
rockbox-cvs mailing list
[email protected]
https://lists.haxx.se/mailman/listinfo/rockbox-cvs