From 9c968456c1bc1e855d17d204be256c0df3a67afe Mon Sep 17 00:00:00 2001 From: Adrian Sampson Date: Fri, 13 Nov 2015 12:21:36 -0800 Subject: [PATCH] Fix #1666: malformed binary data in SoundCheck --- beets/mediafile.py | 4 ++-- docs/changelog.rst | 2 ++ test/rsrc/soundcheck-nonascii.m4a | Bin 0 -> 5862 bytes test/test_mediafile_edge.py | 15 +++++++++++---- 4 files changed, 15 insertions(+), 6 deletions(-) create mode 100644 test/rsrc/soundcheck-nonascii.m4a diff --git a/beets/mediafile.py b/beets/mediafile.py index 64ab49ac2..5fe1fa308 100644 --- a/beets/mediafile.py +++ b/beets/mediafile.py @@ -215,9 +215,9 @@ def _sc_decode(soundcheck): # SoundCheck tags consist of 10 numbers, each represented by 8 # characters of ASCII hex preceded by a space. try: - soundcheck = soundcheck.replace(' ', '').decode('hex') + soundcheck = soundcheck.replace(b' ', b'').decode('hex') soundcheck = struct.unpack(b'!iiiiiiiiii', soundcheck) - except (struct.error, TypeError, UnicodeEncodeError): + except (struct.error, TypeError): # SoundCheck isn't in the format we expect, so return default # values. return 0.0, 0.0 diff --git a/docs/changelog.rst b/docs/changelog.rst index 27567f283..700a16d6d 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -56,6 +56,8 @@ Fixes: * :doc:`/plugins/duplicates`: Fix a crash when merging items. :bug:`1699` * :doc:`/plugins/smartplaylist`: More gracefully handle malformed queries and missing configuration. +* Fix a crash with some files with unreadable iTunes SoundCheck metadata. + :bug:`1666` .. _Emby Server: http://emby.media diff --git a/test/rsrc/soundcheck-nonascii.m4a b/test/rsrc/soundcheck-nonascii.m4a new file mode 100644 index 0000000000000000000000000000000000000000..29f5de5310f799d5f17514d280f32d4cab82f9cd GIT binary patch literal 5862 zcmeGdX;hQP_5;GAvO_RHq+tgk7_yKAk$q7M$R;8x=F0}D34|ob(kfvQsZ>yl6}2KF zV53yAEr=EcErQmfzTy)ROYsR65i6}r)mqz`FXUCxp5yCzzk0kUH}}q6=590dAqYYe zDsrV!^dJ%f08)vRP8G>BByf!&h8rXq8LI&!maI%@|157w2j>b}B7N}t`sy$1> z7omV9N%*g>YjG!L=#a)2%QUX?jI4AGuc2DK5>dJktW4z+^-hx-C%#%vSOe5za_$GWSQBTK*(V0IAxtVqTO@0xXHDbW{SUB_GASVdoHGmKa() zsDk1W0JV8ur$`f!P?|Z#o@xWcSunJ{DpipF zDgz*v34ns6kgb9SgvlKMi-9)m1pqs~NDi-{)f7Dr(FIbXijU?3`a*?N3I)#CnkN;( zO3fxc;W@$%kF_)vl}=SarHuj<2B`V-9*7>0_^1>aP~$bJ!8$2Q$VwN;NvoM&K3-H$ zQf!upw<-q*+|CNS=lb=`VN8eT^OMH9JOS$wj&aa5e7Ot~bAv8?I3=a=~f$OqqT(ye8p4pel6sc`~+-k99OWDXJ;^zA+bS9!BE6$QWRKggiVnUS(rl%#W_hMS+KlN{O zJ8yloC36KgzrGcDf-mZf3F}uX4N3c(LT~hM_FuSIOv9ZEa=Pp;axa?Mfms9@I2I@k zbUl1&cR5L@LCf~4vyWrv9_Tn+RXRF^Jj55(I*^Ku&+APq??a~F6KcJiIn5wD`NPf{ zTAo(B(9u1*KhqUv0?kZTos(G|@4vj)DAlZD-*2v!V}^M5+}RCPS08@q*>t`+M{kdn zF^q~C%Zy5bO_LJC&Bw=?>1h`lh|$&W#r!NCI`%=j3FFAN4<#I595vqv&& zCl-DhnnyY0{_~^jHUr+_`K--Pj*Oh0<dUygo42}+14T`L@(Z?W3X?zfhc>IQHE5JQ*JJ|Ege(@OCy-(iD@q1#)gn~jz? z?y**+PZHq4)!m^Gta128FRO}0WpI;JnJ70b@*09akve{}w&-t-~xx(u6$bFD- zf@!hw435D;`+@~)veMEModU}2JcjqUB_Ak0S+M7t0i(hlOAY$atjmGm7&C2vFFj|oyM2Iq>(jOJfit~#H@e3BI6kk(<*7Xp ziy0Gv_?1(lza#b-7lb|9Zfm`==z*)Q_d4GPW>sY)cFVDenv+URJjFALGTSa4^DAid zAD!rNx%*Xh!$R7ctt-s=u}VuNRzWQ%yrzb=z~iG9U-bG%b1C)R{t}}9-0!1K+!?6Y z-Dgxk$2=9AjMQI=407XnBI})%b&*DSzH8@iWE4fwR0P+iAdgX(Vj*e$Wj92M&E1@0 z&+pKw-Ezp+#JM)4iH#5b{6}Mt70+nNCALRLc?)GFr*JJ=70|Yh6Q(rSgnF)Mc3&PW z%Ess0o$<^i-VFTeSZM3xT~A#*_u=Y4xu&Vf_+p1rkCJ(B$YdV3nji^2Z5)*Scz#o# zz2T0~`2Cw^u(0q9l064^ie9pBB;}_&dizs+o!HG6)}_kLI8n~)zD`b7>`z&|cd1(j zHk?`qLa9j|h5hjs$LN0@ar~w+&+h7yopTjNL1b@!?)R0nx|ACA5pp0oj3eRy$sTWe zQta8R(<;Ib-X&e!r~!yqR_T*Majp;x~SpKKq>qNrKaT%q@t^M^=VT{=_>Q$XglO&sAulxlTpoX?t1JRX1Iq-sx0|HAnl zw|j{;9W&L_2rn#9J}loAUJ|&Iw`R>m$SDh|zx9A$*Ud$Yz4k|A2j`^9LMtY)YmXX$ zP7K-JC#<)m>b(C&yjzOx!DQVEe*VO}4KW3EyLH#T-#<{*u-Rui5`PSPF>5VJ#b%xy zd>h$2J9-ca>agyqOp19sZBO>w1G