@@ -48,19 +48,14 @@ static const char *_num2str(char *buf, size_t buf_size, int i)
48
48
return "<undefined>" ;
49
49
}
50
50
51
- static const char * _hex2str (const uint8_t * data , size_t len )
51
+ static const char * _hex2str (char * str , size_t str_size , const uint8_t * data , size_t len )
52
52
{
53
- static char * str = NULL ;
54
53
size_t i ;
55
54
55
+ if (str_size < 3 || (str_size - 1 )/2 < len )
56
+ return "<overflow>" ;
56
57
57
- char * tmp = (char * )realloc (str , 2 * len + 1 );
58
- if (tmp )
59
- str = tmp ;
60
- else
61
- return "" ;
62
58
* str = 0 ;
63
-
64
59
for (i = 0 ; i < len ; i ++ ) {
65
60
sprintf (str + 2 * i , "%02X" , data [i ]);
66
61
}
@@ -211,7 +206,8 @@ int main(int argc, char *argv[])
211
206
if (info -> aacs_detected ) {
212
207
printf ("libaacs detected : %s\n" , _yes_no (info -> libaacs_detected ));
213
208
if (info -> libaacs_detected ) {
214
- printf ("Disc ID : %s\n" , _hex2str (info -> disc_id , sizeof (info -> disc_id )));
209
+ char buf [sizeof (info -> disc_id ) * 2 + 1 ];
210
+ printf ("Disc ID : %s\n" , _hex2str (buf , sizeof (buf ), info -> disc_id , sizeof (info -> disc_id )));
215
211
printf ("AACS MKB version : %d\n" , info -> aacs_mkbv );
216
212
printf ("AACS handled : %s\n" , _yes_no (info -> aacs_handled ));
217
213
if (!info -> aacs_handled ) {
0 commit comments