[vlc-commits] [Git][videolan/vlc][master] xiph_metadata: ensure the tracks metadata are valid numbers

Steve Lhomme (@robUx4) gitlab at videolan.org
Sun Aug 24 14:53:36 UTC 2025



Steve Lhomme pushed to branch master at VideoLAN / VLC


Commits:
63c36ef5 by Steve Lhomme at 2025-08-24T14:28:13+00:00
xiph_metadata: ensure the tracks metadata are valid numbers

They are already parsed as unsigned values in the TRACKNUMBER field.
The UTF-8 check was removed from these fields in dfdc98f72edafc586f5a531f9071461d0d68a314.
If we turn them into a valid integer (when they are) we have safe UTF-8 data.

Ref. #28976

- - - - -


1 changed file:

- modules/demux/xiph_metadata.c


Changes:

=====================================
modules/demux/xiph_metadata.c
=====================================
@@ -397,11 +397,19 @@ void vorbis_ParseComment( es_format_t *p_fmt, vlc_meta_t **pp_meta,
         hasMetaFlags |= XIPHMETA_##var; \
     }
 
-#define IF_EXTRACT_ONCE(txt,var) \
+#define IF_EXTRACT_ONCE_NUMBER(txt,var) \
     if( !strncasecmp(psz_comment, txt, strlen(txt)) && !(hasMetaFlags & XIPHMETA_##var) ) \
     { \
-        vlc_meta_Set( p_meta, vlc_meta_ ## var, &psz_comment[strlen(txt)] ); \
-        hasMetaFlags |= XIPHMETA_##var; \
+        bool isnum = true; \
+        const char *num_str = &psz_comment[strlen(txt)], *c; \
+        for (c = num_str; isnum && *c != '\0'; c++) { \
+            isnum = *c >= '0' && *c <= '9'; \
+        } \
+        if (isnum) \
+        { \
+            vlc_meta_Set( p_meta, vlc_meta_ ## var, num_str ); \
+            hasMetaFlags |= XIPHMETA_##var; \
+        } \
     }
 
         IF_EXTRACT("TITLE=", Title )
@@ -429,8 +437,8 @@ void vorbis_ParseComment( es_format_t *p_fmt, vlc_meta_t **pp_meta,
                 }
             }
         }
-        else IF_EXTRACT_ONCE("TRACKTOTAL=", TrackTotal )
-        else IF_EXTRACT_ONCE("TOTALTRACKS=", TrackTotal )
+        else IF_EXTRACT_ONCE_NUMBER("TRACKTOTAL=", TrackTotal )
+        else IF_EXTRACT_ONCE_NUMBER("TOTALTRACKS=", TrackTotal )
         else IF_EXTRACT("DESCRIPTION=", Description )
         else IF_EXTRACT("COMMENT=", Description )
         else IF_EXTRACT("COMMENTS=", Description )
@@ -539,4 +547,3 @@ const char *FindKateCategoryName( const char *psz_tag )
     }
     return N_("Unknown category");
 }
-



View it on GitLab: https://code.videolan.org/videolan/vlc/-/commit/63c36ef5af18366f38c7229d653a9e29eead7f06

-- 
View it on GitLab: https://code.videolan.org/videolan/vlc/-/commit/63c36ef5af18366f38c7229d653a9e29eead7f06
You're receiving this email because of your account on code.videolan.org.


VideoLAN code repository instance


More information about the vlc-commits mailing list