Mercurial > mplayer.hg
view TOOLS/countquant.pl @ 23708:1fb5f0b13a1a
Fix crash on some DVDs
sprintf(tmp,"%.02x",(char)0xef); would print "ffffffef" instead of "ef",
in this case this leads to local array buffer overflow and hard to trace stack corruption.
The quick, easy & durty solution is to use (unsigned char) or (uint8_t)
Fixes Bugzilla 860 & 845
author | iive |
---|---|
date | Fri, 06 Jul 2007 23:22:51 +0000 |
parents | 85ebbeeb913b |
children | 32725ca88fed |
line wrap: on
line source
#!/usr/bin/perl -w sub display_quants { $frames = 0; foreach $key (sort(keys(%quants))) { $frames += $quants{$key}; } foreach $key (sort({ $a <=> $b } keys(%quants))) { printf("q=%d:\t% 6d, % 6.2f%%\n", $key, $quants{$key}, $quants{$key} * 100 / $frames); } print("$lines lines processed, $frames frames found\n"); printf("average quant. is: %f\n", $quant_total/$frames); } $lines = 0; $thislines = 0; $quant_total = 0; while (<STDIN>) { $lines++; $thislines++; if (/ q:([0-9]+) /) { $quants{$1}++; } elsif (/ q:(([0-9]+)\.[0-9]+) /) { $quants{$2}++; $quant_total += $1; } if ((scalar(@ARGV) > 0) && ($thislines > $ARGV[0])) { display_quants(); $thislines = 0; } } display_quants();