mirror of
https://git.um-react.app/um/cli.git
synced 2025-11-28 03:33:02 +00:00
fix: Handle musicex tag correctly
This commit is contained in:
@@ -137,10 +137,10 @@ func (d *Decoder) searchKey() (err error) {
|
||||
d.decodedKey, err = deriveKey([]byte(key))
|
||||
if err == nil {
|
||||
d.audioLen = fileSize
|
||||
return nil
|
||||
} else {
|
||||
d.decodedKey = nil
|
||||
d.logger.Warn("could not derive key, skip", zap.Error(err))
|
||||
}
|
||||
d.decodedKey = nil
|
||||
d.logger.Warn("could not derive key, skip", zap.Error(err))
|
||||
}
|
||||
|
||||
suffixBuf := make([]byte, 4)
|
||||
@@ -153,7 +153,7 @@ func (d *Decoder) searchKey() (err error) {
|
||||
return d.readRawMetaQTag()
|
||||
case "STag":
|
||||
return errors.New("qmc: file with 'STag' suffix doesn't contains media key")
|
||||
// MusicEx\0
|
||||
// speculative guess for "musicex\0"
|
||||
case "cex\x00":
|
||||
footer, err := NewMusicExTag(d.raw)
|
||||
if err != nil {
|
||||
@@ -161,17 +161,26 @@ func (d *Decoder) searchKey() (err error) {
|
||||
}
|
||||
d.audioLen = fileSize - int(footer.TagSize)
|
||||
if key, ok := d.params.CryptoParams.QmcKeys.Get(footer.MediaFileName); ok {
|
||||
d.logger.Debug("searchKey: using key from MediaFileName", zap.String("MediaFileName", footer.MediaFileName), zap.String("key", key))
|
||||
d.decodedKey, err = deriveKey([]byte(key))
|
||||
} else if d.decodedKey == nil {
|
||||
return errors.New("searchKey: no key found for musicex tag")
|
||||
}
|
||||
return err
|
||||
default:
|
||||
size := binary.LittleEndian.Uint32(suffixBuf)
|
||||
// if we already have a key from legacy mmkv, use it
|
||||
if d.decodedKey != nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
// try to use suffix as key length
|
||||
size := binary.LittleEndian.Uint32(suffixBuf)
|
||||
if size <= 0xFFFF && size != 0 { // assume size is key len
|
||||
return d.readRawKey(int64(size))
|
||||
}
|
||||
|
||||
// try to use default static cipher
|
||||
// try to use default static cipher,
|
||||
// or the key read from the legacy mmkv
|
||||
d.audioLen = fileSize
|
||||
return nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user