Skip to content

Commit f12fd40

Browse files
committed
Check that file version matches before applying filters.
Signed-off-by: Henry Cox <[email protected]>
1 parent 9157e96 commit f12fd40

File tree

3 files changed

+35
-5
lines changed

3 files changed

+35
-5
lines changed

bin/genhtml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4310,7 +4310,7 @@ sub _load
43104310
'' ne $version) {
43114311
if (defined($currentVersion)) {
43124312
lcovutil::checkVersionMatch($repo_path, $version,
4313-
$currentVersion);
4313+
$currentVersion, 'load');
43144314
} else {
43154315
lcovutil::ignorable_error($lcovutil::ERROR_VERSION,
43164316
"'$repo_path': computed '$version' but version not defined in 'current' data file "

lib/lcovutil.pm

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1803,7 +1803,7 @@ sub extractFileVersion
18031803

18041804
sub checkVersionMatch
18051805
{
1806-
my ($filename, $me, $you) = @_;
1806+
my ($filename, $me, $you, $reason) = @_;
18071807

18081808
my $match;
18091809
if (@extractVersionScript) {
@@ -1816,10 +1816,12 @@ sub checkVersionMatch
18161816
$match = $me eq $you; # simple string compare
18171817
}
18181818
lcovutil::ignorable_error($ERROR_VERSION,
1819+
(defined($reason) ? ($reason . ' ') : '') .
18191820
"$filename: revision control version mismatch: " .
1820-
(defined($me) ? $me : 'undef') .
1821-
' <- ' . (defined($you) ? $you : 'undef'))
1821+
(defined($me) ? $me : 'undef') .
1822+
' <- ' . (defined($you) ? $you : 'undef'))
18221823
unless $match;
1824+
return $match;
18231825
}
18241826

18251827
#
@@ -3828,7 +3830,7 @@ sub merge
38283830
$brOp = \&BranchData::difference;
38293831
}
38303832

3831-
lcovutil::checkVersionMatch($filename, $me, $you);
3833+
lcovutil::checkVersionMatch($filename, $me, $you, 'merge');
38323834
my $changed = 0;
38333835

38343836
foreach my $name ($info->test()->keylist()) {
@@ -4637,6 +4639,17 @@ sub _filterFile
46374639
} else {
46384640
$srcReader->close();
46394641
}
4642+
my $fileVersion = lcovutil::extractFileVersion($source_file)
4643+
if $srcReader->notEmpty();
4644+
if (defined($fileVersion) &&
4645+
defined($traceInfo->version())
4646+
&&
4647+
!lcovutil::checkVersionMatch($source_file, $traceInfo->version(),
4648+
$fileVersion, 'filter')
4649+
) {
4650+
lcovutil::info(1, 'skip filtering due to version mismatch\n');
4651+
return ($traceInfo, 0);
4652+
}
46404653

46414654
my $modified = 0;
46424655
if (defined($lcovutil::func_coverage) &&

tests/gendiffcov/simple/script.sh

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -208,6 +208,23 @@ if [ 0 != $? ] ; then
208208
exit 1
209209
fi
210210
fi
211+
# test filter with differing version
212+
$COVER $LCOV_HOME/bin/lcov $LCOV_OPTS --output filt.info --filter branch,line -a baseline2.info $IGNORE
213+
if [ 0 == $? ] ; then
214+
echo "ERROR: filter with mismatched version did not fail"
215+
status=1
216+
if [ 0 == $KEEP_GOING ] ; then
217+
exit 1
218+
fi
219+
fi
220+
$COVER $LCOV_HOME/bin/lcov $LCOV_OPTS --output filt.info --filter branch,line -a baseline2.info $IGNORE --ignore version
221+
if [ 0 != $? ] ; then
222+
echo "ERROR: ignore error filer with mismatched version failed"
223+
status=1
224+
if [ 0 == $KEEP_GOING ] ; then
225+
exit 1
226+
fi
227+
fi
211228
# run genhtml with mismatched version
212229
echo genhtml $DIFFCOV_OPTS baseline2.info --output-directory ./mismatched
213230
$COVER $LCOV_HOME/bin/genhtml $DIFFCOV_OPTS baseline2.info --output-directory ./mismatched

0 commit comments

Comments
 (0)