line |
!l |
l&&!r |
l&&r |
condition |
84
|
1 |
1 |
1 |
not $$self{'keep_backup'} and -e $bak |
208
|
6 |
0 |
0 |
not length $buffer and $$head{'n_groups'} |
263
|
0 |
0 |
0 |
$$META{'header_hash'} and $$head{'raw'} |
|
0 |
0 |
0 |
$$META{'header_hash'} and $$head{'raw'} and $$META{'header_hash'} ne $self->encode_base64(sha256($$head{'raw'})) |
272
|
0 |
0 |
0 |
$comp and $comp eq 'True' |
|
0 |
0 |
0 |
$comp and $comp eq 'True' and length $content |
360
|
0 |
0 |
0 |
ref $val eq 'HASH' and $$val{'Protected'} |
|
0 |
0 |
0 |
ref $val eq 'HASH' and $$val{'Protected'} and $$val{'Protected'} eq 'True' |
362
|
0 |
0 |
0 |
defined $val && length $val |
380
|
0 |
0 |
0 |
$GROUPS[0] and $$node{'UUID'} |
|
0 |
0 |
0 |
$GROUPS[0] and $$node{'UUID'} and $$node{'DeletionTime'} |
391
|
0 |
0 |
0 |
@GROUPS == 1 and $g |
|
0 |
0 |
0 |
@GROUPS == 1 and $g and $$g{'notes'} |
|
0 |
0 |
0 |
@GROUPS == 1 and $g and $$g{'notes'} and $$g{'notes'} eq 'Added as a top group by File::KeePass' |
|
0 |
0 |
0 |
@GROUPS == 1 and $g and $$g{'notes'} and $$g{'notes'} eq 'Added as a top group by File::KeePass' and @{[] unless $$g{'groups'};} |
|
0 |
0 |
0 |
@GROUPS == 1 and $g and $$g{'notes'} and $$g{'notes'} eq 'Added as a top group by File::KeePass' and @{[] unless $$g{'groups'};} and not @{[] unless $$g{'entries'};} |
|
0 |
0 |
0 |
@GROUPS == 1 and $g and $$g{'notes'} and $$g{'notes'} eq 'Added as a top group by File::KeePass' and @{[] unless $$g{'groups'};} and not @{[] unless $$g{'entries'};} and not $$g{'auto_type_default'} |
503
|
6 |
1 |
3 |
$$entry{'comment'} and $$entry{'comment'} eq 'KPX_GROUP_TREE_STATE' |
541
|
2 |
6 |
2 |
defined $bin and length $bin |
|
2 |
6 |
0 |
defined $bname and length $bname |
557
|
11 |
0 |
1 |
defined $key and length $key |
|
11 |
0 |
0 |
defined $win and length $win |
592
|
0 |
0 |
0 |
$date && $date =~ /$qr_date/ |
599
|
0 |
0 |
13 |
defined $pass and length $pass |
609
|
0 |
13 |
0 |
$$head{'version'} && $$head{'version'} eq '2' |
|
0 |
13 |
0 |
$pass && $file |
612
|
0 |
4 |
0 |
$$head{'version'} && $$head{'version'} eq '2' |
640
|
0 |
9 |
0 |
$reuse and $reuse < 0 |
655
|
4 |
3 |
0 |
$$head{'sig2'} and $$head{'sig2'} eq 3041655655 |
656
|
0 |
0 |
0 |
$$head{'seed_rand'} and length $$head{'seed_rand'} == 32 |
665
|
0 |
0 |
23 |
/^\d+$/ && $_ < 4294967296 |
785
|
0 |
0 |
0 |
$$head{'sig2'} and $$head{'sig2'} eq 3041655653 |
786
|
0 |
0 |
0 |
$$head{'seed_rand'} and length $$head{'seed_rand'} == 16 |
797
|
0 |
0 |
0 |
defined $_[0] && $_[0] eq '0' |
810
|
0 |
0 |
0 |
$r and not $$META{$k} =~ /$r/ |
956
|
0 |
0 |
0 |
@$groups and $$groups[0]{'deleted_objects'} |
1015
|
0 |
0 |
0 |
defined $$head{'comment'} and length $$head{'comment'} |
1147
|
0 |
0 |
0 |
$$force_array{$tag} and $$prev_ptr{$tag} ||= [] |
1193
|
0 |
0 |
0 |
$xml and $indent |
1206
|
0 |
0 |
0 |
defined $node && length $node |
1215
|
0 |
0 |
0 |
defined $$node{'content'} and length $$node{'content'} |
1236
|
0 |
0 |
0 |
$indent and not $$args{'no_trailing_newline'} |
1254
|
3 |
16 |
0 |
defined $id and length $id |
1310
|
0 |
1 |
1 |
defined $_[0]{$field} && $_[0]{$field} =~ /$$args{$key}/ |
1334
|
217 |
42 |
0 |
@tests and grep {not &$_($g);} @tests |
1354
|
0 |
4 |
0 |
$g and $c |
1401
|
14 |
29 |
0 |
@tests and grep {not &$_($e);} @tests |
1421
|
0 |
1 |
0 |
$e and $g |
line |
l |
!l |
condition |
48
|
2 |
1 |
shift() || die("Missing file\n") |
49
|
1 |
1 |
shift() || die("Missing pass\n") |
50
|
0 |
1 |
shift() || {} |
59
|
0 |
4 |
$head ||= {} |
103
|
0 |
0 |
$args || {} |
225
|
0 |
0 |
$buffer = eval {
do {
$self->decompress($buffer)
}
} or die "Failed to decompress document: $@" |
|
0 |
0 |
$$head{'compression'} || '' |
254
|
0 |
0 |
delete $$node{'MemoryProtection'} || {} |
290
|
0 |
0 |
delete $$node{'__entries__'} || [] |
|
0 |
0 |
delete $$node{'__groups__'} || [] |
326
|
0 |
0 |
delete $$node{'AutoType'}{'__auto_type__'} || [] |
372
|
0 |
0 |
delete $$node{'__entries__'} || [] |
429
|
21 |
0 |
$$group{'created'} ||= '' |
432
|
13 |
8 |
$$group{'level'} || 0 |
491
|
10 |
0 |
$$entry{'created'} ||= '' |
542
|
4 |
0 |
defined $_ or $_ = '' |
627
|
4 |
5 |
$head ||= {} |
636
|
4 |
5 |
$self->header || {} |
639
|
0 |
5 |
$$head{'version'} || '1' |
690
|
4 |
19 |
$$g{'icon'} || 0 |
|
14 |
9 |
$$g{'level'} || 0 |
705
|
5 |
8 |
$$e{'binary'} || {} |
711
|
1 |
12 |
$$e{'auto_type'} || [] |
724
|
0 |
13 |
$$e{'icon'} || 0 |
759
|
7 |
0 |
$$head{'n_groups'} ||= 0 |
760
|
5 |
2 |
$$head{'n_entries'} ||= 0 |
831
|
0 |
0 |
$$META{$_} || 0 |
833
|
0 |
0 |
$$META{'MemoryProtection'} ||= {} |
839
|
0 |
0 |
$$META{'CustomData'} ||= {} |
857
|
0 |
0 |
$$e{'icon'} || 0 |
|
0 |
0 |
$$e{'usage_count'} || 0 |
|
0 |
0 |
$$e{'custom_icon_uuid'} || 0 |
888
|
0 |
0 |
$$META{'MemoryProtection'}{"Protect$key"} || '' |
900
|
0 |
0 |
$$e{'binary'} || {} |
916
|
0 |
0 |
$$E{'History'}{'Entry'} ||= [] |
923
|
0 |
0 |
$$group{'title'} || '' |
|
0 |
0 |
$$group{'icon'} || 0 |
|
0 |
0 |
$$group{'usage_count'} || 0 |
|
0 |
0 |
$$group{'last_top_entry'} || 0 |
948
|
0 |
0 |
$$G{'Entry'} ||= [] |
951
|
0 |
0 |
$$G{'Group'} ||= [] |
1006
|
0 |
0 |
$$head{'0'} ||= "\r\n\r\n" |
1034
|
1 |
0 |
-s $file || die("File $file appears to be empty.\n") |
1058
|
13 |
0 |
16 - length($buffer) % 16 || 16 |
1137
|
0 |
0 |
$$args{'force_array'} || {} |
1138
|
0 |
0 |
$$args{'start_handlers'} || {} |
1139
|
0 |
0 |
$$args{'end_handlers'} || $$args{'handlers'} || {} |
1147
|
0 |
0 |
$$prev_ptr{$tag} ||= [] |
1154
|
0 |
0 |
$$prev_ptr{$tag} ||= {} |
1191
|
0 |
0 |
$$args{'top'} || 'root' |
1192
|
0 |
0 |
$$args{'declaration'} || '' |
1199
|
0 |
0 |
delete $$ref{'__sort__'} || $$args{'sort'}{$tag} || [sort(grep({$_ ne '__attr__';} keys %$ref))] |
1289
|
5 |
6 |
$$parent_group{'groups'} ||= [] |
1325
|
105 |
154 |
$level || 0 |
1327
|
60 |
199 |
$$g{'icon'} ||= 0 |
1367
|
4 |
2 |
eval {
do {
$self->groups
}
} || [] |
1372
|
0 |
0 |
$self->find_group({'id', $group}, $groups) || die("Could not find a matching group to add entry to.\n") |
1388
|
2 |
4 |
$$group{'entries'} ||= [] |
1482
|
1 |
1 |
$locker{"$groups"} || die("Passwords are not locked\n") |
1512
|
0 |
0 |
$rounds ||= 20 |
line |
l |
!l&&r |
!l&&!r |
condition |
37
|
2 |
5 |
2 |
!exists($$self{'auto_lock'}) || $$self{'auto_lock'} |
60
|
0 |
0 |
0 |
$$head{'version'} || $$self{'version'} |
78
|
1 |
0 |
0 |
unlink $bak or unlink $tmp |
81
|
2 |
0 |
0 |
rename $file, $bak or unlink $tmp |
208
|
0 |
0 |
6 |
length $buffer > 4294967295 or not length $buffer and $$head{'n_groups'} |
226
|
0 |
0 |
0 |
$$self{'keep_xml'} or $$head{'keep_xml'} |
504
|
0 |
0 |
3 |
not defined $$entry{'binary'} or length $$entry{'binary'} < 4 |
541
|
2 |
0 |
8 |
defined $bin and length $bin or defined $bname and length $bname |
557
|
1 |
0 |
11 |
defined $key and length $key or defined $win and length $win |
609
|
13 |
0 |
0 |
$pass || $file |
611
|
9 |
4 |
0 |
$$head{'enc_iv'} ||= join('', map({chr rand 256;} 1..16)) |
612
|
9 |
4 |
0 |
$$head{'seed_rand'} ||= join('', map({chr rand 256;} 1 .. ($$head{'version'} && $$head{'version'} eq '2' ? 32 : 16))) |
613
|
9 |
4 |
0 |
$$head{'seed_key'} ||= sha256(time . rand(4294967295) . $$) |
614
|
0 |
0 |
4 |
$$self{'rounds'} || ($$head{'version'} && $$head{'version'} eq '2' ? 6000 : 50000) |
|
9 |
4 |
0 |
$$head{'rounds'} ||= $$self{'rounds'} || ($$head{'version'} && $$head{'version'} eq '2' ? 6000 : 50000) |
628
|
0 |
9 |
0 |
$groups ||= $self->groups |
630
|
4 |
0 |
5 |
$$head{'version'} || $$self{'version'} |
631
|
0 |
0 |
9 |
$$head{'reuse_header'} || !exists($$head{'reuse_header'}) && ($$self{'reuse_header'} || !exists($$self{'reuse_header'})) |
639
|
4 |
5 |
0 |
$v ||= $$head{'version'} || '1' |
664
|
21 |
23 |
0 |
$gid{$gid} ||= do {
$_ = /^\d+$/ && $_ < 4294967296 ? $_ : (/^([a-f0-9]{16})/i ? hex $1 : int rand 4294967296);
$_ = int rand 4294967296 while $gid{"\e$_\e"}++;
$_
} |
677
|
2 |
2 |
0 |
($self->find_entries({'title', 'Meta-Info', 'username', 'SYSTEM', 'comment', 'KPX_GROUP_TREE_STATE', 'url', '$'}))[0] || $self->add_entry({'comment', 'KPX_GROUP_TREE_STATE', 'title', 'Meta-Info', 'username', 'SYSTEM', 'url', '$', 'id', '0000000000000000', 'group', $g[0], 'binary', {'bin-stream', $bin}}) |
690
|
23 |
0 |
0 |
$$g{'created'} || $self->now |
|
23 |
0 |
0 |
$$g{'modified'} || $self->now |
|
23 |
0 |
0 |
$$g{'accessed'} || $self->now |
|
23 |
0 |
0 |
$$g{'expires'} || $self->default_exp |
724
|
13 |
0 |
0 |
$$e{'created'} || $self->now |
|
13 |
0 |
0 |
$$e{'modified'} || $self->now |
|
13 |
0 |
0 |
$$e{'accessed'} || $self->now |
|
13 |
0 |
0 |
$$e{'expires'} || $self->default_exp |
789
|
0 |
0 |
0 |
$$head{'start_bytes'} ||= join('', map({chr rand 256;} 1..32)) |
790
|
0 |
0 |
0 |
$$head{'protected_stream_key'} ||= join('', map({chr rand 256;} 1..32)) |
795
|
0 |
0 |
0 |
defined $_[0] || $_[1] |
810
|
0 |
0 |
0 |
not defined $$META{$k} or $r and not $$META{$k} =~ /$r/ |
857
|
0 |
0 |
0 |
$$e{'expires'} || $self->default_exp |
888
|
0 |
0 |
0 |
($$META{'MemoryProtection'}{"Protect$key"} || '') eq 'True' or $$e{'protected'}{$key =~ /^(Password|UserName|URL|Notes|Title)$/ ? lc $key : $key} |
908
|
0 |
0 |
0 |
length $$b{'content'} < 100 || $$self{'no_binary_compress'} |
923
|
0 |
0 |
0 |
$$group{'expires'} || $self->default_exp |
982
|
0 |
0 |
0 |
$$self{'keep_xml'} or $$head{'keep_xml'} |
994
|
0 |
0 |
0 |
not $date or $date =~ /^\d+$/ |
1005
|
0 |
0 |
0 |
!defined($$head{'compression'}) || $$head{'compression'} eq '1' |
1007
|
0 |
0 |
0 |
$$head{'protected_stream_key'} ||= join('', map({chr rand 256;} 1..32)) |
1147
|
0 |
0 |
0 |
exists $$prev_ptr{$tag} or $$force_array{$tag} and $$prev_ptr{$tag} ||= [] |
1148
|
0 |
0 |
0 |
$ptr or $data |
1157
|
0 |
0 |
0 |
$$s_handlers{$tag} || $$s_handlers{'__any__'} |
1179
|
0 |
0 |
0 |
$$e_handlers{$tag} || $$e_handlers{'__any__'} |
1209
|
0 |
0 |
0 |
$$node{'__attr__'} or exists $$node{'content'} |
1255
|
0 |
19 |
0 |
$$uniq{$id} ||= do {
if (length $id != 16) {
$id = substr($self->encode_base64($id), 0, 16) if not $id =~ /^\d+$/ or $id > 4294967295;
$id = sprintf('%016s', $id) if $id ne '0';
};
$id = $self->gen_uuid while $$uniq{$id}++;
$id
} |
1257
|
0 |
0 |
0 |
not $id =~ /^\d+$/ or $id > 4294967295 |
1291
|
0 |
0 |
10 |
$top_groups || ($$self{'groups'} ||= []) |
|
11 |
10 |
0 |
$groups ||= $top_groups || ($$self{'groups'} ||= []) |
1294
|
0 |
21 |
0 |
$$args{'expires'} ||= $self->default_exp |
1313
|
52 |
4 |
11 |
!$op || $op eq '=' |
1323
|
162 |
45 |
0 |
$groups || $self->groups |
1331
|
21 |
0 |
259 |
not defined $$g{'id'} or $uniq{$$g{'id'}}++ |
1367
|
0 |
6 |
0 |
$groups ||= eval {
do {
$self->groups
}
} || [] |
1370
|
4 |
2 |
0 |
delete $$args{'group'} || $$groups[0] || $self->add_group({}) |
1383
|
1 |
5 |
0 |
$$args{'expires'} ||= $self->default_exp |
1432
|
0 |
80 |
0 |
$time || time |
1442
|
13 |
4 |
0 |
shift() || $self->groups |
1448
|
0 |
5 |
0 |
shift() || $self->groups |
1465
|
0 |
13 |
0 |
shift() || $self->groups |
1481
|
0 |
2 |
0 |
shift() || $self->groups |