mirror of
https://github.com/taglib/taglib.git
synced 2025-05-27 21:20:26 -04:00
Finally took Tommi's suggestion here and introduced a version of the ByteVectorList::split()
that takes a maximum number of values. This should probably be used more widely in places where the max is known ahead of time for this to be a more useful fix than nailing just this special case. Anyway, fixes the bug. BUG:103622 git-svn-id: svn://anonsvn.kde.org/home/kde/trunk/kdesupport/taglib@438030 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
This commit is contained in:
parent
073dee2e41
commit
59fd610999
@ -120,7 +120,7 @@ void CommentsFrame::parseFields(const ByteVector &data)
|
||||
|
||||
int byteAlign = d->textEncoding == String::Latin1 || d->textEncoding == String::UTF8 ? 1 : 2;
|
||||
|
||||
ByteVectorList l = ByteVectorList::split(data.mid(4), textDelimiter(d->textEncoding), byteAlign);
|
||||
ByteVectorList l = ByteVectorList::split(data.mid(4), textDelimiter(d->textEncoding), byteAlign, 2);
|
||||
|
||||
if(l.size() == 2) {
|
||||
d->description = String(l.front(), d->textEncoding);
|
||||
|
@ -34,12 +34,18 @@ class ByteVectorListPrivate
|
||||
|
||||
ByteVectorList ByteVectorList::split(const ByteVector &v, const ByteVector &pattern,
|
||||
int byteAlign)
|
||||
{
|
||||
return split(v, pattern, byteAlign, 0);
|
||||
}
|
||||
|
||||
ByteVectorList ByteVectorList::split(const ByteVector &v, const ByteVector &pattern,
|
||||
int byteAlign, int max)
|
||||
{
|
||||
ByteVectorList l;
|
||||
|
||||
uint previousOffset = 0;
|
||||
for(int offset = v.find(pattern, 0, byteAlign);
|
||||
offset != -1;
|
||||
offset != -1 && (max == 0 || max > int(l.size()) + 1);
|
||||
offset = v.find(pattern, offset + pattern.size(), byteAlign))
|
||||
{
|
||||
l.append(v.mid(previousOffset, offset - previousOffset));
|
||||
|
@ -66,7 +66,16 @@ namespace TagLib {
|
||||
*/
|
||||
static ByteVectorList split(const ByteVector &v, const ByteVector &pattern,
|
||||
int byteAlign = 1);
|
||||
|
||||
/*!
|
||||
* Splits the ByteVector \a v into several strings at \a pattern. This will
|
||||
* not include the pattern in the returned ByteVectors. \a max is the
|
||||
* maximum number of entries that will be separated. If \a max for instance
|
||||
* is 2 then a maximum of 1 match will be found and the vector will be split
|
||||
* on that match.
|
||||
*/
|
||||
// BIC: merge with the function above
|
||||
static ByteVectorList split(const ByteVector &v, const ByteVector &pattern,
|
||||
int byteAlign, int max);
|
||||
private:
|
||||
class ByteVectorListPrivate;
|
||||
ByteVectorListPrivate *d;
|
||||
|
Loading…
Reference in New Issue
Block a user